Skip to content

Commit a45f699

Browse files
bmeurermarijnh
authored andcommitted
[wast mode] Support atomics from the Wasm Threads proposal
This also adds more test coverage for not only the atomic memory instructions, but also the regular memory instructions. It also shortens the regex's for keyword and atom a bit.
1 parent 1191965 commit a45f699

2 files changed

Lines changed: 97 additions & 3 deletions

File tree

mode/wast/test.js

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
'[string "foo #\\"# bar"]');
2222

2323
MT('atom-test',
24+
'[atom anyfunc]',
2425
'[atom i32]',
2526
'[atom i64]',
2627
'[atom f32]',
@@ -31,5 +32,98 @@
3132
'[keyword if]',
3233
'[keyword loop]',
3334
'[keyword i32.add]',
34-
'[keyword local.get]')
35+
'[keyword local.get]');
36+
37+
MT('memory-instructions',
38+
'[keyword i32.load] [keyword offset]=[number 4] [keyword align]=[number 4]',
39+
'[keyword i32.load8_s] [keyword offset]=[number 4] [keyword align]=[number 4]',
40+
'[keyword i32.load8_u] [keyword offset]=[number 4] [keyword align]=[number 4]',
41+
'[keyword i32.load16_s] [keyword offset]=[number 4] [keyword align]=[number 4]',
42+
'[keyword i32.load16_u] [keyword offset]=[number 4] [keyword align]=[number 4]',
43+
'[keyword i32.store] [keyword offset]=[number 4] [keyword align]=[number 4]',
44+
'[keyword i32.store8] [keyword offset]=[number 4] [keyword align]=[number 4]',
45+
'[keyword i32.store16] [keyword offset]=[number 4] [keyword align]=[number 4]',
46+
'[keyword i64.store] [keyword offset]=[number 4] [keyword align]=[number 4]',
47+
'[keyword i64.load] [keyword offset]=[number 4] [keyword align]=[number 4]',
48+
'[keyword i64.load8_s] [keyword offset]=[number 4] [keyword align]=[number 4]',
49+
'[keyword i64.load8_u] [keyword offset]=[number 4] [keyword align]=[number 4]',
50+
'[keyword i64.load16_s] [keyword offset]=[number 4] [keyword align]=[number 4]',
51+
'[keyword i64.load16_u] [keyword offset]=[number 4] [keyword align]=[number 4]',
52+
'[keyword i64.load32_s] [keyword offset]=[number 4] [keyword align]=[number 4]',
53+
'[keyword i64.load32_u] [keyword offset]=[number 4] [keyword align]=[number 4]',
54+
'[keyword i64.store8] [keyword offset]=[number 4] [keyword align]=[number 4]',
55+
'[keyword i64.store16] [keyword offset]=[number 4] [keyword align]=[number 4]',
56+
'[keyword i64.store32] [keyword offset]=[number 4] [keyword align]=[number 4]',
57+
'[keyword f32.load] [keyword offset]=[number 4] [keyword align]=[number 4]',
58+
'[keyword f32.store] [keyword offset]=[number 4] [keyword align]=[number 4]',
59+
'[keyword f64.load] [keyword offset]=[number 4] [keyword align]=[number 4]',
60+
'[keyword f64.store] [keyword offset]=[number 4] [keyword align]=[number 4]');
61+
62+
MT('atomic-memory-instructions',
63+
'[keyword atomic.notify] [keyword offset]=[number 32] [keyword align]=[number 4]',
64+
'[keyword i32.atomic.wait] [keyword offset]=[number 32] [keyword align]=[number 4]',
65+
'[keyword i64.atomic.wait] [keyword offset]=[number 32] [keyword align]=[number 4]',
66+
'[keyword i32.atomic.load] [keyword offset]=[number 32] [keyword align]=[number 4]',
67+
'[keyword i32.atomic.load8_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
68+
'[keyword i32.atomic.load16_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
69+
'[keyword i32.atomic.store] [keyword offset]=[number 32] [keyword align]=[number 4]',
70+
'[keyword i32.atomic.store8] [keyword offset]=[number 32] [keyword align]=[number 4]',
71+
'[keyword i32.atomic.store16] [keyword offset]=[number 32] [keyword align]=[number 4]',
72+
'[keyword i64.atomic.load] [keyword offset]=[number 32] [keyword align]=[number 4]',
73+
'[keyword i64.atomic.load8_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
74+
'[keyword i64.atomic.load16_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
75+
'[keyword i64.atomic.load32_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
76+
'[keyword i64.atomic.store] [keyword offset]=[number 32] [keyword align]=[number 4]',
77+
'[keyword i64.atomic.store8] [keyword offset]=[number 32] [keyword align]=[number 4]',
78+
'[keyword i64.atomic.store16] [keyword offset]=[number 32] [keyword align]=[number 4]',
79+
'[keyword i64.atomic.store32] [keyword offset]=[number 32] [keyword align]=[number 4]',
80+
'[keyword i32.atomic.rmw.add] [keyword offset]=[number 32] [keyword align]=[number 4]',
81+
'[keyword i32.atomic.rmw8.add_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
82+
'[keyword i32.atomic.rmw16.add_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
83+
'[keyword i64.atomic.rmw.add] [keyword offset]=[number 32] [keyword align]=[number 4]',
84+
'[keyword i64.atomic.rmw8.add_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
85+
'[keyword i64.atomic.rmw16.add_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
86+
'[keyword i64.atomic.rmw32.add_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
87+
'[keyword i32.atomic.rmw.sub] [keyword offset]=[number 32] [keyword align]=[number 4]',
88+
'[keyword i32.atomic.rmw8.sub_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
89+
'[keyword i32.atomic.rmw16.sub_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
90+
'[keyword i64.atomic.rmw.sub] [keyword offset]=[number 32] [keyword align]=[number 4]',
91+
'[keyword i64.atomic.rmw8.sub_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
92+
'[keyword i64.atomic.rmw16.sub_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
93+
'[keyword i64.atomic.rmw32.sub_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
94+
'[keyword i32.atomic.rmw.and] [keyword offset]=[number 32] [keyword align]=[number 4]',
95+
'[keyword i32.atomic.rmw8.and_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
96+
'[keyword i32.atomic.rmw16.and_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
97+
'[keyword i64.atomic.rmw.and] [keyword offset]=[number 32] [keyword align]=[number 4]',
98+
'[keyword i64.atomic.rmw8.and_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
99+
'[keyword i64.atomic.rmw16.and_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
100+
'[keyword i64.atomic.rmw32.and_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
101+
'[keyword i32.atomic.rmw.or] [keyword offset]=[number 32] [keyword align]=[number 4]',
102+
'[keyword i32.atomic.rmw8.or_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
103+
'[keyword i32.atomic.rmw16.or_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
104+
'[keyword i64.atomic.rmw.or] [keyword offset]=[number 32] [keyword align]=[number 4]',
105+
'[keyword i64.atomic.rmw8.or_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
106+
'[keyword i64.atomic.rmw16.or_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
107+
'[keyword i64.atomic.rmw32.or_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
108+
'[keyword i32.atomic.rmw.xor] [keyword offset]=[number 32] [keyword align]=[number 4]',
109+
'[keyword i32.atomic.rmw8.xor_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
110+
'[keyword i32.atomic.rmw16.xor_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
111+
'[keyword i64.atomic.rmw.xor] [keyword offset]=[number 32] [keyword align]=[number 4]',
112+
'[keyword i64.atomic.rmw8.xor_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
113+
'[keyword i64.atomic.rmw16.xor_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
114+
'[keyword i64.atomic.rmw32.xor_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
115+
'[keyword i32.atomic.rmw.xchg] [keyword offset]=[number 32] [keyword align]=[number 4]',
116+
'[keyword i32.atomic.rmw8.xchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
117+
'[keyword i32.atomic.rmw16.xchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
118+
'[keyword i64.atomic.rmw.xchg] [keyword offset]=[number 32] [keyword align]=[number 4]',
119+
'[keyword i64.atomic.rmw8.xchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
120+
'[keyword i64.atomic.rmw16.xchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
121+
'[keyword i64.atomic.rmw32.xchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
122+
'[keyword i32.atomic.rmw.cmpxchg] [keyword offset]=[number 32] [keyword align]=[number 4]',
123+
'[keyword i32.atomic.rmw8.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
124+
'[keyword i32.atomic.rmw16.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
125+
'[keyword i64.atomic.rmw.cmpxchg] [keyword offset]=[number 32] [keyword align]=[number 4]',
126+
'[keyword i64.atomic.rmw8.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
127+
'[keyword i64.atomic.rmw16.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]',
128+
'[keyword i64.atomic.rmw32.cmpxchg_u] [keyword offset]=[number 32] [keyword align]=[number 4]');
35129
})();

mode/wast/wast.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
CodeMirror.defineSimpleMode('wast', {
1515
start: [
1616
{regex: /[+\-]?(?:nan(?::0x[0-9a-fA-F]+)?|infinity|inf|0x[0-9a-fA-F]+\.?[0-9a-fA-F]*p[+\/-]?\d+|\d+(?:\.\d*)?[eE][+\-]?\d*|\d+\.\d*|0x[0-9a-fA-F]+|\d+)/, token: "number"},
17-
{regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call_indirect|call|drop|end|return|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_(s|u)))|i64\.(load32_(s|u)|store16)|(i32|i64|f32|f64)\.(load|store)|(i32|i64|f32|f64)\.const|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|(g|l)(t|e)|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(add|and|clz|ctz|(div|rem)_(s|u)|eqz?|(g|l)(e|t)_(s|u)|mul|ne|popcnt|or|rot(l|r)|sh(l|r_(s|u))|sub|xor)|i64\.extend_(s|u)_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_(s|u)|f(32|64)\.convert_i(32|64)_(s|u)|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory\.(size|grow)|type|func|param|result|local|global|module|table|memory|start|elem|data|align|offset|import|export/, token: "keyword"},
18-
{regex: /\b(anyfunc|i32|i64|f32|f64)\b/, token: "atom"},
17+
{regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call_indirect|call|drop|end|return|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_[su]))|i64\.(load32_[su]|store32)|[fi](32|64)\.(const|load|store)|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(a[dn]d|c[lt]z|(div|rem)_[su]|eqz?|[gl][te]_[su]|mul|ne|popcnt|rot[lr]|sh(l|r_[su])|sub|x?or)|i64\.extend_[su]_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_[su]|f(32|64)\.convert_i(32|64)_[su]|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory\.(size|grow)|type|func|param|result|local|global|module|table|memory|start|elem|data|align|offset|import|export|atomic\.notify|i64\.atomic\.(load32_u|store32|rmw32\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)|i(32|64)\.atomic\.(wait|load((8|16)_u)?|store(8|16)?|rmw(\.(a[dn]d|sub|x?or|(cmp)?xchg)|(8|16)\.(a[dn]d|sub|x?or|(cmp)?xchg)_u))/, token: "keyword"},
18+
{regex: /\b(anyfunc|[fi](32|64))\b/, token: "atom"},
1919
{regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/, token: "variable-2"},
2020
{regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"},
2121
{regex: /\(;.*?/, token: "comment", next: "comment"},

0 commit comments

Comments
 (0)