// 'WebAssembly Text Format' Monarch language import type monaco from 'monaco-editor'; const WebAssemblyTextLanguage: { config: monaco.languages.LanguageConfiguration, tokens: monaco.languages.IMonarchLanguage } = { config: { brackets: [ ["(", ")"], ["if", "end"], ["loop", "end"], ["block", "end"], ], autoClosingPairs: [ { open: "(", close: ")" }, { open: "if", close: "end" }, { open: "loop", close: "end" }, { open: "block", close: "end" }, ], surroundingPairs: [ { open: "(", close: ")" }, { open: "if", close: "end" }, { open: "loop", close: "end" }, { open: "block", close: "end" }, ], }, tokens: { keywords: [ "module", "import", "export", "memory", "data", "table", "elem", "start", "func", "tag", "type", "param", "result", "global", "local", "mut", "struct", "array", "field", ], types: [ "i8", "i16", "i32", "i64", "f32", "f64", "v128", "i31ref", "eqref", "anyref", "dataref", "externref", "funcref", "exnref", "extern", "null", "any", "eq", ], instructions: [ "pop", "nop", "drop", "data.drop", "elem.drop", "local.get", "local.set", "local.tee", "global.get", "global.set", "tuple.make", "tuple.extract", "select", "v128.const", "v128.and", "v128.or", "v128.xor", "v128.not", "v128.andnot", "v128.bitselect", "v128.load", "v128.load8x8_s", "v128.load8x8_u", "v128.load16x4_s", "v128.load16x4_u", "v128.load32x2_s", "v128.load32x2_u", "v128.load8_lane", "v128.load16_lane", "v128.load32_lane", "v128.load64_lane", "v128.load8_splat", "v128.load16_splat", "v128.load32_splat", "v128.load64_splat", "v128.load32_zero", "v128.load64_zero", "v128.store", "v128.store8_lane", "v128.store16_lane", "v128.store32_lane", "v128.store64_lane", "v128.any_true", "i8x16.shuffle", "i8x16.swizzle", "i8x16.bitmask", "i8x16.splat", "i8x16.popcnt", "i8x16.replace_lane", "i8x16.extract_lane_s", "i8x16.extract_lane_u", "i8x16.all_true", "i8x16.abs", "i8x16.add", "i8x16.add_sat_s", "i8x16.add_sat_u", "i8x16.sub", "i8x16.sub_sat_s", "i8x16.sub_sat_u", "i8x16.mul", "i8x16.neg", "i8x16.shl", "i8x16.shr_s", "i8x16.shr_u", "i8x16.eq", "i8x16.ne", "i8x16.lt_s", "i8x16.lt_u", "i8x16.le_s", "i8x16.le_u", "i8x16.gt_s", "i8x16.gt_u", "i8x16.ge_s", "i8x16.ge_u", "i8x16.min_s", "i8x16.min_u", "i8x16.max_s", "i8x16.max_u", "i8x16.avgr_u", "i8x16.narrow_i16x8_s", "i8x16.narrow_i16x8_u", "i16x8.bitmask", "i16x8.splat", "i16x8.load_8x8_s", "i16x8.load_8x8_u", "i16x8.replace_lane", "i16x8.extract_lane_s", "i16x8.extract_lane_u", "i16x8.extend_low_i8x16_s", "i16x8.extend_high_i8x16_s", "i16x8.extend_low_i8x16_u", "i16x8.extend_high_i8x16_u", "i16x8.all_true", "i16x8.abs", "i16x8.add", "i16x8.add_sat_s", "i16x8.add_sat_u", "i16x8.extadd_pairwise_i8x16_s", "i16x8.extadd_pairwise_i8x16_u", "i16x8.sub", "i16x8.sub_sat_s", "i16x8.sub_sat_u", "i16x8.q15mulr_sat_s", "i16x8.mul", "i16x8.extmul_low_i8x16_s", "i16x8.extmul_high_i8x16_s", "i16x8.extmul_low_i8x16_u", "i16x8.extmul_high_i8x16_u", "i16x8.neg", "i16x8.shl", "i16x8.shr_s", "i16x8.shr_u", "i16x8.eq", "i16x8.ne", "i16x8.lt_s", "i16x8.lt_u", "i16x8.le_s", "i16x8.le_u", "i16x8.gt_s", "i16x8.gt_u", "i16x8.ge_s", "i16x8.ge_u", "i16x8.min_s", "i16x8.min_u", "i16x8.max_s", "i16x8.max_u", "i16x8.avgr_u", "i16x8.narrow_i32x4_s", "i16x8.narrow_i32x4_u", "i32x4.bitmask", "i32x4.splat", "i32x4.load_16x4_s", "i32x4.load_16x4_u", "i32x4.replace_lane", "i32x4.extract_lane", "i32x4.extend_low_i16x8_s", "i32x4.extend_high_i16x8_s", "i32x4.extend_low_i16x8_u", "i32x4.extend_high_i16x8_u", "i32x4.all_true", "i32x4.abs", "i32x4.add", "i32x4.extadd_pairwise_i16x8_s", "i32x4.extadd_pairwise_i16x8_u", "i32x4.sub", "i32x4.mul", "i32x4.extmul_low_i16x8_s", "i32x4.extmul_high_i16x8_s", "i32x4.extmul_low_i16x8_u", "i32x4.extmul_high_i16x8_u", "i32x4.neg", "i32x4.shl", "i32x4.shr_s", "i32x4.shr_u", "i32x4.eq", "i32x4.ne", "i32x4.lt_s", "i32x4.lt_u", "i32x4.le_s", "i32x4.le_u", "i32x4.gt_s", "i32x4.gt_u", "i32x4.ge_s", "i32x4.ge_u", "i32x4.min_s", "i32x4.min_u", "i32x4.max_s", "i32x4.max_u", "i32x4.trunc_sat_f32x4_s", "i32x4.trunc_sat_f32x4_u", "i32x4.trunc_sat_f64x2_s_zero", "i32x4.trunc_sat_f64x2_u_zero", "i32x4.dot_i16x8_s", "i64x2.bitmask", "i64x2.splat", "i64x2.load32x2_s", "i64x2.load32x2_u", "i64x2.replace_lane", "i64x2.extract_lane", "i64x2.extend_low_i32x4_s", "i64x2.extend_high_i32x4_s", "i64x2.extend_low_i32x4_u", "i64x2.extend_high_i32x4_u", "i64x2.all_true", "i64x2.abs", "i64x2.add", "i64x2.sub", "i64x2.mul", "i64x2.neg", "i64x2.shl", "i64x2.shr_s", "i64x2.shr_u", "f32x4.splat", "f32x4.replace_lane", "f32x4.extract_lane", "f32x4.add", "f32x4.sub", "f32x4.mul", "i64x2.extmul_low_i32x4_s", "i64x2.extmul_high_i32x4_s", "i64x2.extmul_low_i32x4_u", "i64x2.extmul_high_i32x4_u", "i64x2.eq", "i64x2.ne", "i64x2.lt_s", "i64x2.le_s", "i64x2.gt_s", "i64x2.ge_s", "f32x4.neg", "f32x4.eq", "f32x4.ne", "f32x4.lt", "f32x4.le", "f32x4.gt", "f32x4.ge", "f32x4.abs", "f32x4.min", "f32x4.pmin", "f32x4.max", "f32x4.pmax", "f32x4.div", "f32x4.sqrt", "f32x4.ceil", "f32x4.floor", "f32x4.trunc", "f32x4.nearest", "f32x4.demote_f64x2_zero", "f32x4.convert_i32x4_s", "f32x4.convert_i32x4_u", "f64x2.splat", "f64x2.replace_lane", "f64x2.extract_lane", "f64x2.add", "f64x2.sub", "f64x2.mul", "f64x2.neg", "f64x2.eq", "f64x2.ne", "f64x2.lt", "f64x2.le", "f64x2.gt", "f64x2.ge", "f64x2.abs", "f64x2.min", "f64x2.max", "f64x2.pmin", "f64x2.pmax", "f64x2.div", "f64x2.sqrt", "f64x2.ceil", "f64x2.floor", "f64x2.trunc", "f64x2.nearest", "f64x2.promote_low_f32x4", "f64x2.convert_low_i32x4_s", "f64x2.convert_low_i32x4_u", "i32.atomic.load", "i32.atomic.load8_u", "i32.atomic.load16_u", "i32.atomic.store", "i32.atomic.store8", "i32.atomic.store16", "i32.atomic.rmw.add", "i32.atomic.rmw.sub", "i32.atomic.rmw.and", "i32.atomic.rmw.or", "i32.atomic.rmw.xor", "i32.atomic.rmw.xchg", "i32.atomic.rmw.cmpxchg", "i32.atomic.rmw8.add_u", "i32.atomic.rmw8.sub_u", "i32.atomic.rmw8.and_u", "i32.atomic.rmw8.or_u", "i32.atomic.rmw8.xor_u", "i32.atomic.rmw8.xchg_u", "i32.atomic.rmw8.cmpxchg_u", "i32.atomic.rmw16.add_u", "i32.atomic.rmw16.sub_u", "i32.atomic.rmw16.and_u", "i32.atomic.rmw16.or_u", "i32.atomic.rmw16.xor_u", "i32.atomic.rmw16.xchg_u", "i32.atomic.rmw16.cmpxchg_u", "i64.atomic.load", "i64.atomic.load8_u", "i64.atomic.load16_u", "i64.atomic.load32_u", "i64.atomic.store", "i64.atomic.store8", "i64.atomic.store16", "i64.atomic.store32", "i64.atomic.rmw.add", "i64.atomic.rmw.sub", "i64.atomic.rmw.and", "i64.atomic.rmw.or", "i64.atomic.rmw.xor", "i64.atomic.rmw.xchg", "i64.atomic.rmw.cmpxchg", "i64.atomic.rmw8.add_u", "i64.atomic.rmw8.sub_u", "i64.atomic.rmw8.and_u", "i64.atomic.rmw8.or_u", "i64.atomic.rmw8.xor_u", "i64.atomic.rmw8.xchg_u", "i64.atomic.rmw8.cmpxchg_u", "i64.atomic.rmw16.add_u", "i64.atomic.rmw16.sub_u", "i64.atomic.rmw16.and_u", "i64.atomic.rmw16.or_u", "i64.atomic.rmw16.xor_u", "i64.atomic.rmw16.xchg_u", "i64.atomic.rmw16.cmpxchg_u", "i64.atomic.rmw32.add_u", "i64.atomic.rmw32.sub_u", "i64.atomic.rmw32.and_u", "i64.atomic.rmw32.or_u", "i64.atomic.rmw32.xor_u", "i64.atomic.rmw32.xchg_u", "i64.atomic.rmw32.cmpxchg_u", "atomic.fence", "func.bind", "ref", "ref.eq", "ref.null", "ref.is_null", "ref.is_func", "ref.is_data", "ref.is_i31", "ref.as_func", "ref.as_non_null", "ref.as_data", "ref.as_i31", "ref.func", "ref.cast", "ref.cast_static", "ref.test", "ref.test_static", "table.get", "table.set", "table.size", "table.grow", "table.fill", "table.init", "table.copy", "throw", "rethrow", "i32.load", "i32.load8_s", "i32.load8_u", "i32.load16_s", "i32.load16_u", "i32.store", "i32.store8", "i32.store16", "i32.const", "i32.eqz", "i32.eq", "i32.ne", "i32.lt_s", "i32.lt_u", "i32.le_s", "i32.le_u", "i32.gt_s", "i32.gt_u", "i32.ge_s", "i32.ge_u", "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", "i32.wrap_i64", "i32.trunc_f32_s", "i32.trunc_f32_u", "i32.trunc_f64_s", "i32.trunc_f64_u", "i32.reinterpret_f32", "i64.load", "i64.load8_s", "i64.load8_u", "i64.load16_s", "i64.load16_u", "i64.load32_s", "i64.load32_u", "i64.store", "i64.store8", "i64.store16", "i64.store32", "i64.const", "i64.eqz", "i64.eq", "i64.ne", "i64.lt_s", "i64.lt_u", "i64.le_s", "i64.le_u", "i64.gt_s", "i64.gt_u", "i64.ge_s", "i64.ge_u", "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", "i64.extend_i32_s", "i64.extend_i32_u", "i64.trunc_f32_s", "i64.trunc_f32_u", "i64.trunc_f64_s", "i64.trunc_f64_u", "i64.reinterpret_f64", "f32.load", "f32.store", "f32.const", "f32.eq", "f32.ne", "f32.lt", "f32.le", "f32.gt", "f32.ge", "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", "f32.convert_i32_s", "f32.convert_i32_u", "f32.convert_i64_s", "f32.convert_i64_u", "f32.demote_f64", "f32.reinterpret_i32", "f64.load", "f64.store", "f64.const", "f64.eq", "f64.ne", "f64.lt", "f64.le", "f64.gt", "f64.ge", "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", "f64.convert_i32_s", "f64.convert_i32_u", "f64.convert_i64_s", "f64.convert_i64_u", "f64.promote_f32", "f64.reinterpret_i64", "i32.extend8_s", "i32.extend16_s", "i64.extend8_s", "i64.extend16_s", "i64.extend32_s", "i32.trunc_sat_f32_s", "i32.trunc_sat_f32_u", "i32.trunc_sat_f64_s", "i32.trunc_sat_f64_u", "i64.trunc_sat_f32_s", "i64.trunc_sat_f32_u", "i64.trunc_sat_f64_s", "i64.trunc_sat_f64_u", "memory.size", "memory.grow", "memory.copy", "memory.fill", "memory.init", "memory.atomic.notify", "memory.atomic.wait32", "memory.atomic.wait64", "i31.new", "i31.get_u", "i31.get_s", "array.new", "array.new_default", "array.init", "array.init_static", "array.get", "array.get_s", "array.get_u", "array.set", "array.len", "array.copy", "struct.new", "struct.new_default", "struct.new_with_rtt", "struct.new_default_with_rtt", "struct.get", "struct.get_s", "struct.get_u", "struct.set", "rtt.canon", "rtt.sub", "rtt.fresh_sub", ], controlInstructions: [ "block", "loop", "if", "else", "then", "end", "do", "let", "br", "br_if", "br_table", "br_on_exn", "br_on_null", "br_on_non_null", "br_on_cast", "br_on_cast_static", "br_on_cast_fail", "br_on_cast_static_fail", "br_on_func", "br_on_non_func", "br_on_data", "br_on_non_data", "br_on_i31", "br_on_non_i31", "call", "call_indirect", "call_ref", "return", "return_call", "return_call_indirect", "return_call_ref", "try", "catch", "catch_all", "delegate", "unreachable", ], escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/, digits: /\d+(_+\d+)*/, octaldigits: /[0-7]+(_+[0-7]+)*/, binarydigits: /[0-1]+(_+[0-1]+)*/, hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/, tokenizer: { root: [ // whitespace { include: "@whitespace" }, // strings [/"([^"\\]|\\.)*$/, "string.invalid"], // non-teminated string [/"/, "string", "@string"], // numbers (not all of these are generated, but here to be sure) [/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/, "number.float"], [/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/, "number.float"], [/0[xX](@hexdigits)[Ll]?/, "number.hex"], [/0(@octaldigits)[Ll]?/, "number.octal"], [/0[bB](@binarydigits)[Ll]?/, "number.binary"], [/(@digits)[fFdD]/, "number.float"], [/(@digits)[lL]?/, "number"], // variable names [/\$[^\s\)]*/, { token: "identifier" }], // instructions and types [ /[a-z0-9_]+(?:\.[a-z0-9_]+)*/, { cases: { "@types": { token: "type.$0" }, "@keywords": { token: "keyword.$0" }, "@controlInstructions": { token: "controlInstruction.$0" }, "@instructions": { token: "instruction.$0" }, "@default": "identifier", }, }, ], ], string: [ [/[^\\"]+/, "string"], [/@escapes/, "string.escape"], [/\\./, "string.escape.invalid"], [/"/, "string", "@pop"], ], whitespace: [ [/[ \t\r\n]+/, ""], [/(;; )(ERROR |FAILURE )([^\n]*)/, ["comment", "error", ""]], [/(;; )(WARNING )([^\n]*)/, ["comment", "warning", ""]], [/(;; )(INFO )([^\n]*)/, ["comment", "info", ""]], [/(;; )(PEDANTIC )([^\n]*)/, ["comment", "pedantic", ""]], [/(;; +)(~+|\^)$/, ["comment", "underline"]], [/(;; )([^\n]*)/, ["comment", ""]], [/;;[^\n]*/, "comment"], ], }, }, }; export default WebAssemblyTextLanguage;