Files
mercury/tests/hard_coded/dense_lookup_switch_non2.exp
Peter Wang 95f59cf7c9 Fix lookup switches on subtype enums.
compiler/switch_util.m:
    Rename dont_need_bit_vec_check variant of need_bit_vec_check to
    dont_need_bit_vec_check_no_gaps.

    Add dont_need_bit_vec_check_with_gaps (see below).

    Make type_range return the correct min and max values used by a
    subtype enum type. For now, it fails unless the range of values
    is contiguous.

    Make find_int_lookup_switch_params use the min and max values for a
    type returned by type_range, not assuming 0 to the max value.

    Make find_int_lookup_switch_params return
    dont_need_bit_vec_check_with_gaps when a bit vector check is not
    required before a table lookup, yet the table is expected to contain
    dummy rows. This is the case for a cannot_fail switch on a subtype
    enum type type, where the subtype does not use some values between
    the min and max values.

compiler/dense_switch.m:
    Make tagged_case_list_is_dense_switch use the min and max values for
    a type returned by type_range, not assuming 0 to the max value.

compiler/ml_lookup_switch.m:
    Expect the generated lookup table to contain dummy rows or not
    depending on dont_need_bit_vec_check_{with_gaps,no_gaps}.

    Conform to change to need_bit_vec_check.

compiler/lookup_switch.m:
compiler/ml_string_switch.m:
    Conform to change to need_bit_vec_check.

tests/hard_coded/Mmakefile:
tests/hard_coded/dense_lookup_switch4.exp:
tests/hard_coded/dense_lookup_switch4.m:
tests/hard_coded/dense_lookup_switch_non2.exp:
tests/hard_coded/dense_lookup_switch_non2.m:
    Add test cases.
2021-04-09 17:41:23 +10:00

69 lines
562 B
Plaintext

p1 a ->
p1_one f1 1.1
end
p1 b ->
p1_two f2 2.2
end
p1 c ->
p1_three f1 3.3
end
p1 d ->
p1_four f1 4.4
end
p1 e ->
p1_five f2 5.5
p1_five2 f3(5) 55.5
end
p1 f ->
p1_six f4("hex") 6.6
end
p1 g ->
p1_seven f5(77.7) 7.7
p1_seven2 f1 777.7
p1_seven3 f2 7777.7
end
p1 h ->
p1_eight f1 8.0
end
p2 a ->
p2_one f1 1.1
end
p2 b ->
end
p2 c ->
p2_three f1 3.3
end
p2 d ->
p2_four f1 4.4
end
p2 e ->
p2_five f2 5.5
p2_five2 f3(5) 55.5
end
p2 f ->
p2_six f4("hex") 6.6
end
p2 g ->
p2_seven f5(77.7) 7.7
p2_seven2 f1 777.7
p2_seven3 f2 7777.7
end
p2 h ->
end