Remove the concept of non-dense jump tables.
WebAssembly doesn't have non-dense jump tables, and higher-level users are better served by the facilities in lib/frontend/src/switch.rs for working with non-dense switches. This eliminates the concept of "absent" jump table entries, which were represented as "0" in the text format. Also, jump table contents are now enclosed in `[` and `]`, so that we can unambiguously display empty jump tables. Previously, empty jump tables were displayed as if they had a single absent entry.
This commit is contained in:
@@ -672,8 +672,8 @@ impl SSABuilder {
|
||||
}
|
||||
|
||||
for old_dest in func.jump_tables[jt].as_mut_slice() {
|
||||
if *old_dest == PackedOption::from(dest_ebb) {
|
||||
*old_dest = PackedOption::from(middle_ebb);
|
||||
if *old_dest == dest_ebb {
|
||||
*old_dest = middle_ebb;
|
||||
}
|
||||
}
|
||||
let mut cur = FuncCursor::new(func).at_bottom(middle_ebb);
|
||||
@@ -1005,7 +1005,7 @@ mod tests {
|
||||
// Here is the pseudo-program we want to translate:
|
||||
//
|
||||
// function %f {
|
||||
// jt = jump_table ebb2, 0, ebb1
|
||||
// jt = jump_table [ebb2, ebb1]
|
||||
// ebb0:
|
||||
// x = 1;
|
||||
// br_table x, ebb2, jt
|
||||
@@ -1039,9 +1039,9 @@ mod tests {
|
||||
};
|
||||
ssa.def_var(x_var, x1, block0);
|
||||
|
||||
// jt = jump_table ebb2, 0, ebb1
|
||||
// jt = jump_table [ebb2, ebb1]
|
||||
jump_table.push_entry(ebb2);
|
||||
jump_table.set_entry(2, ebb1);
|
||||
jump_table.push_entry(ebb1);
|
||||
let jt = func.create_jump_table(jump_table);
|
||||
|
||||
// ebb0:
|
||||
|
||||
Reference in New Issue
Block a user