Skip to content

Commit

Permalink
Use standardized text format for variable instructions
Browse files Browse the repository at this point in the history
In https://webassembly.github.io/spec/core/text/instructions.html#variable-instructions
the variable instructions are specified as `local.get` instead of `get_local`,
and so on. This changes the disassembler (and the internal names) to match the
standard.

Ref: wasdk#33
Bug: https://crbug.com/1043031
  • Loading branch information
bmeurer committed May 13, 2020
1 parent b13ff5a commit 9ed39f1
Show file tree
Hide file tree
Showing 197 changed files with 18,594 additions and 18,594 deletions.
6 changes: 3 additions & 3 deletions src/WasmDis.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ describe("NameSectionReader", () => {
test("Wasm module with parameter name", () => {
const { buffer } = parseWat(
`test.wat`,
`(module (func $foo (param $x i32) (result i32) get_local $x))`
`(module (func $foo (param $x i32) (result i32) local.get $x))`
).toBinary({ write_debug_names: true });
const reader = new BinaryReader();
reader.setData(buffer.buffer, 0, buffer.byteLength);
Expand All @@ -86,8 +86,8 @@ describe("NameSectionReader", () => {
const { buffer } = parseWat(
`test.wat`,
`(module (func $foo (local $x i32) (local $y f32)
get_local $x
get_local $y))`
local.get $x
local.get $y))`
).toBinary({ write_debug_names: true });
const reader = new BinaryReader();
reader.setData(buffer.buffer, 0, buffer.byteLength);
Expand Down
10 changes: 5 additions & 5 deletions src/WasmDis.ts
Original file line number Diff line number Diff line change
Expand Up @@ -485,14 +485,14 @@ export class WasmDisassembler {
var typeName = this._nameResolver.getTypeName(operator.typeIndex, true);
this.appendBuffer(` (type ${typeName})`);
break;
case OperatorCode.get_local:
case OperatorCode.set_local:
case OperatorCode.tee_local:
case OperatorCode.local_get:
case OperatorCode.local_set:
case OperatorCode.local_tee:
var paramName = this._nameResolver.getVariableName(this._funcIndex, operator.localIndex, true);
this.appendBuffer(` ${paramName}`);
break;
case OperatorCode.get_global:
case OperatorCode.set_global:
case OperatorCode.global_get:
case OperatorCode.global_set:
var globalName = this._nameResolver.getGlobalName(operator.globalIndex, true);
this.appendBuffer(` ${globalName}`);
break;
Expand Down
10 changes: 5 additions & 5 deletions src/WasmEmitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -632,13 +632,13 @@ export class Emitter {
this.writeVarUint(opInfo.typeIndex);
this.writeVarUint(0);
break;
case OperatorCode.get_local:
case OperatorCode.set_local:
case OperatorCode.tee_local:
case OperatorCode.local_get:
case OperatorCode.local_set:
case OperatorCode.local_tee:
this.writeVarUint(opInfo.localIndex);
break;
case OperatorCode.get_global:
case OperatorCode.set_global:
case OperatorCode.global_get:
case OperatorCode.global_set:
this.writeVarUint(opInfo.globalIndex);
break;
case OperatorCode.i32_load:
Expand Down
22 changes: 11 additions & 11 deletions src/WasmParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ export const enum OperatorCode {
call_indirect = 0x11,
drop = 0x1a,
select = 0x1b,
get_local = 0x20,
set_local = 0x21,
tee_local = 0x22,
get_global = 0x23,
set_global = 0x24,
local_get = 0x20,
local_set = 0x21,
local_tee = 0x22,
global_get = 0x23,
global_set = 0x24,
i32_load = 0x28,
i64_load = 0x29,
f32_load = 0x2a,
Expand Down Expand Up @@ -453,7 +453,7 @@ export const enum OperatorCode {
};

export const OperatorCodeNames = [
"unreachable", "nop", "block", "loop", "if", "else", undefined, undefined, undefined, undefined, undefined, "end", "br", "br_if", "br_table", "return", "call", "call_indirect", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "drop", "select", undefined, undefined, undefined, undefined, "get_local", "set_local", "tee_local", "get_global", "set_global", "get_table", "set_table", undefined, "i32.load", "i64.load", "f32.load", "f64.load", "i32.load8_s", "i32.load8_u", "i32.load16_s", "i32.load16_u", "i64.load8_s", "i64.load8_u", "i64.load16_s", "i64.load16_u", "i64.load32_s", "i64.load32_u", "i32.store", "i64.store", "f32.store", "f64.store", "i32.store8", "i32.store16", "i64.store8", "i64.store16", "i64.store32", "current_memory", "grow_memory", "i32.const", "i64.const", "f32.const", "f64.const", "i32.eqz", "i32.eq", "i32.ne", "i32.lt_s", "i32.lt_u", "i32.gt_s", "i32.gt_u", "i32.le_s", "i32.le_u", "i32.ge_s", "i32.ge_u", "i64.eqz", "i64.eq", "i64.ne", "i64.lt_s", "i64.lt_u", "i64.gt_s", "i64.gt_u", "i64.le_s", "i64.le_u", "i64.ge_s", "i64.ge_u", "f32.eq", "f32.ne", "f32.lt", "f32.gt", "f32.le", "f32.ge", "f64.eq", "f64.ne", "f64.lt", "f64.gt", "f64.le", "f64.ge", "i32.clz", "i32.ctz", "i32.popcnt", "i32.add", "i32.sub", "i32.mul", "i32.div_s", "i32.div_u", "i32.rem_s", "i32.rem_u", "i32.and", "i32.or", "i32.xor", "i32.shl", "i32.shr_s", "i32.shr_u", "i32.rotl", "i32.rotr", "i64.clz", "i64.ctz", "i64.popcnt", "i64.add", "i64.sub", "i64.mul", "i64.div_s", "i64.div_u", "i64.rem_s", "i64.rem_u", "i64.and", "i64.or", "i64.xor", "i64.shl", "i64.shr_s", "i64.shr_u", "i64.rotl", "i64.rotr", "f32.abs", "f32.neg", "f32.ceil", "f32.floor", "f32.trunc", "f32.nearest", "f32.sqrt", "f32.add", "f32.sub", "f32.mul", "f32.div", "f32.min", "f32.max", "f32.copysign", "f64.abs", "f64.neg", "f64.ceil", "f64.floor", "f64.trunc", "f64.nearest", "f64.sqrt", "f64.add", "f64.sub", "f64.mul", "f64.div", "f64.min", "f64.max", "f64.copysign", "i32.wrap/i64", "i32.trunc_s/f32", "i32.trunc_u/f32", "i32.trunc_s/f64", "i32.trunc_u/f64", "i64.extend_s/i32", "i64.extend_u/i32", "i64.trunc_s/f32", "i64.trunc_u/f32", "i64.trunc_s/f64", "i64.trunc_u/f64", "f32.convert_s/i32", "f32.convert_u/i32", "f32.convert_s/i64", "f32.convert_u/i64", "f32.demote/f64", "f64.convert_s/i32", "f64.convert_u/i32", "f64.convert_s/i64", "f64.convert_u/i64", "f64.promote/f32", "i32.reinterpret/f32", "i64.reinterpret/f64", "f32.reinterpret/i32", "f64.reinterpret/i64", "i32.extend8_s", "i32.extend16_s", "i64.extend8_s", "i64.extend16_s", "i64.extend32_s", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "ref.null", "ref.is_null", "ref.func", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined
"unreachable", "nop", "block", "loop", "if", "else", undefined, undefined, undefined, undefined, undefined, "end", "br", "br_if", "br_table", "return", "call", "call_indirect", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "drop", "select", undefined, undefined, undefined, undefined, "local.get", "local.set", "local.tee", "global.get", "global.set", "get_table", "set_table", undefined, "i32.load", "i64.load", "f32.load", "f64.load", "i32.load8_s", "i32.load8_u", "i32.load16_s", "i32.load16_u", "i64.load8_s", "i64.load8_u", "i64.load16_s", "i64.load16_u", "i64.load32_s", "i64.load32_u", "i32.store", "i64.store", "f32.store", "f64.store", "i32.store8", "i32.store16", "i64.store8", "i64.store16", "i64.store32", "current_memory", "grow_memory", "i32.const", "i64.const", "f32.const", "f64.const", "i32.eqz", "i32.eq", "i32.ne", "i32.lt_s", "i32.lt_u", "i32.gt_s", "i32.gt_u", "i32.le_s", "i32.le_u", "i32.ge_s", "i32.ge_u", "i64.eqz", "i64.eq", "i64.ne", "i64.lt_s", "i64.lt_u", "i64.gt_s", "i64.gt_u", "i64.le_s", "i64.le_u", "i64.ge_s", "i64.ge_u", "f32.eq", "f32.ne", "f32.lt", "f32.gt", "f32.le", "f32.ge", "f64.eq", "f64.ne", "f64.lt", "f64.gt", "f64.le", "f64.ge", "i32.clz", "i32.ctz", "i32.popcnt", "i32.add", "i32.sub", "i32.mul", "i32.div_s", "i32.div_u", "i32.rem_s", "i32.rem_u", "i32.and", "i32.or", "i32.xor", "i32.shl", "i32.shr_s", "i32.shr_u", "i32.rotl", "i32.rotr", "i64.clz", "i64.ctz", "i64.popcnt", "i64.add", "i64.sub", "i64.mul", "i64.div_s", "i64.div_u", "i64.rem_s", "i64.rem_u", "i64.and", "i64.or", "i64.xor", "i64.shl", "i64.shr_s", "i64.shr_u", "i64.rotl", "i64.rotr", "f32.abs", "f32.neg", "f32.ceil", "f32.floor", "f32.trunc", "f32.nearest", "f32.sqrt", "f32.add", "f32.sub", "f32.mul", "f32.div", "f32.min", "f32.max", "f32.copysign", "f64.abs", "f64.neg", "f64.ceil", "f64.floor", "f64.trunc", "f64.nearest", "f64.sqrt", "f64.add", "f64.sub", "f64.mul", "f64.div", "f64.min", "f64.max", "f64.copysign", "i32.wrap/i64", "i32.trunc_s/f32", "i32.trunc_u/f32", "i32.trunc_s/f64", "i32.trunc_u/f64", "i64.extend_s/i32", "i64.extend_u/i32", "i64.trunc_s/f32", "i64.trunc_u/f32", "i64.trunc_s/f64", "i64.trunc_u/f64", "f32.convert_s/i32", "f32.convert_u/i32", "f32.convert_s/i64", "f32.convert_u/i64", "f32.demote/f64", "f64.convert_s/i32", "f64.convert_u/i32", "f64.convert_s/i64", "f64.convert_u/i64", "f64.promote/f32", "i32.reinterpret/f32", "i64.reinterpret/f64", "f32.reinterpret/i32", "f64.reinterpret/i64", "i32.extend8_s", "i32.extend16_s", "i64.extend8_s", "i64.extend16_s", "i64.extend32_s", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, "ref.null", "ref.is_null", "ref.func", undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined
];

["i32.trunc_s:sat/f32", "i32.trunc_u:sat/f32", "i32.trunc_s:sat/f64", "i32.trunc_u:sat/f64", "i64.trunc_s:sat/f32", "i64.trunc_u:sat/f32", "i64.trunc_s:sat/f64", "i64.trunc_u:sat/f64", "memory.init", "data.drop", "memory.copy", "memory.fill", "table.init", "elem.drop", "table.copy", "table.grow", "table.size", "table.fill"].forEach((s, i) => {
Expand Down Expand Up @@ -1770,13 +1770,13 @@ export class BinaryReader {
typeIndex = this.readVarUint32() >>> 0;
reserved = this.readVarUint1();
break;
case OperatorCode.get_local:
case OperatorCode.set_local:
case OperatorCode.tee_local:
case OperatorCode.local_get:
case OperatorCode.local_set:
case OperatorCode.local_tee:
localIndex = this.readVarUint32() >>> 0;
break;
case OperatorCode.get_global:
case OperatorCode.set_global:
case OperatorCode.global_get:
case OperatorCode.global_set:
globalIndex = this.readVarUint32() >>> 0;
break;
case OperatorCode.table_get:
Expand Down
28 changes: 14 additions & 14 deletions test/address.wast.0.wasm.out
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,48 @@
(export "good" (func $func1))
(export "bad" (func $func2))
(func $func1 (param $var0 i32)
get_local $var0
local.get $var0
i32.load8_u
call $import0
get_local $var0
local.get $var0
i32.load8_u offset=1
call $import0
get_local $var0
local.get $var0
i32.load8_u offset=2
call $import0
get_local $var0
local.get $var0
i32.load8_u offset=25
call $import0
get_local $var0
local.get $var0
i32.load16_u
call $import0
get_local $var0
local.get $var0
i32.load16_u align=1
call $import0
get_local $var0
local.get $var0
i32.load16_u offset=1 align=1
call $import0
get_local $var0
local.get $var0
i32.load16_u offset=2
call $import0
get_local $var0
local.get $var0
i32.load16_u offset=25 align=1
call $import0
get_local $var0
local.get $var0
i32.load
call $import0
get_local $var0
local.get $var0
i32.load offset=1 align=1
call $import0
get_local $var0
local.get $var0
i32.load offset=2 align=2
call $import0
get_local $var0
local.get $var0
i32.load offset=25 align=1
call $import0
)
(func $func2 (param $var0 i32)
get_local $var0
local.get $var0
i32.load offset=4294967295
drop
)
Expand Down
Loading

0 comments on commit 9ed39f1

Please sign in to comment.