annotate .cms/lib/codemirror/mode/wast/wast.js @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 (function(mod) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 if (typeof exports == "object" && typeof module == "object") // CommonJS
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 mod(require("../../lib/codemirror"), require("../../addon/mode/simple"));
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 else if (typeof define == "function" && define.amd) // AMD
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 define(["../../lib/codemirror", "../../addon/mode/simple"], mod);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 else // Plain browser env
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 mod(CodeMirror);
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 })(function(CodeMirror) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 "use strict";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 var kKeywords = [
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 "align",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 "block",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 "br(_if|_table|_on_(cast|data|func|i31|null))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 "call(_indirect|_ref)?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 "current_memory",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 "\\bdata\\b",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 "catch(_all)?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 "delegate",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 "drop",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 "elem",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 "else",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 "end",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 "export",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 "\\bextern\\b",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 "\\bfunc\\b",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 "global(\\.(get|set))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 "if",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 "import",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 "local(\\.(get|set|tee))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 "loop",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 "module",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 "mut",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 "nop",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 "offset",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 "param",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 "result",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 "rethrow",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 "return(_call(_indirect|_ref)?)?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 "select",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 "start",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 "table(\\.(size|get|set|size|grow|fill|init|copy))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 "then",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 "throw",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 "try",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 "type",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 "unreachable",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 "unwind",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 // Numeric opcodes.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 "i(32|64)\\.(store(8|16)|(load(8|16)_[su]))",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 "i64\\.(load32_[su]|store32)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 "[fi](32|64)\\.(const|load|store)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 "f(32|64)\\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 "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)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 "i64\\.extend_[su]_i32",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 "i32\\.wrap_i64",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 "i(32|64)\\.trunc_f(32|64)_[su]",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 "f(32|64)\\.convert_i(32|64)_[su]",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 "f64\\.promote_f32",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 "f32\\.demote_f64",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 "f32\\.reinterpret_i32",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 "i32\\.reinterpret_f32",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 "f64\\.reinterpret_i64",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 "i64\\.reinterpret_f64",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 // Atomics.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 "memory(\\.((atomic\\.(notify|wait(32|64)))|grow|size))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 "i64\.atomic\\.(load32_u|store32|rmw32\\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 "i(32|64)\\.atomic\\.(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))",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 // SIMD.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 "v128\\.load(8x8|16x4|32x2)_[su]",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 "v128\\.load(8|16|32|64)_splat",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 "v128\\.(load|store)(8|16|32|64)_lane",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 "v128\\.load(32|64)_zero",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 "v128\.(load|store|const|not|andnot|and|or|xor|bitselect|any_true)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 "i(8x16|16x8)\\.(extract_lane_[su]|(add|sub)_sat_[su]|avgr_u)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 "i(8x16|16x8|32x4|64x2)\\.(neg|add|sub|abs|shl|shr_[su]|all_true|bitmask|eq|ne|[lg][te]_s)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 "(i(8x16|16x8|32x4|64x2)|f(32x4|64x2))\.(splat|replace_lane)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 "i(8x16|16x8|32x4)\\.(([lg][te]_u)|((min|max)_[su]))",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 "f(32x4|64x2)\\.(neg|add|sub|abs|nearest|eq|ne|[lg][te]|sqrt|mul|div|min|max|ceil|floor|trunc)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 "[fi](32x4|64x2)\\.extract_lane",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 "i8x16\\.(shuffle|swizzle|popcnt|narrow_i16x8_[su])",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 "i16x8\\.(narrow_i32x4_[su]|mul|extadd_pairwise_i8x16_[su]|q15mulr_sat_s)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 "i16x8\\.(extend|extmul)_(low|high)_i8x16_[su]",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 "i32x4\\.(mul|dot_i16x8_s|trunc_sat_f64x2_[su]_zero)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 "i32x4\\.((extend|extmul)_(low|high)_i16x8_|trunc_sat_f32x4_|extadd_pairwise_i16x8_)[su]",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 "i64x2\\.(mul|(extend|extmul)_(low|high)_i32x4_[su])",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 "f32x4\\.(convert_i32x4_[su]|demote_f64x2_zero)",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 "f64x2\\.(promote_low_f32x4|convert_low_i32x4_[su])",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 // Reference types, function references, and GC.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 "\\bany\\b",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 "array\\.len",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 "(array|struct)(\\.(new_(default_)?with_rtt|get(_[su])?|set))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 "\\beq\\b",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 "field",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 "i31\\.(new|get_[su])",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 "\\bnull\\b",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 "ref(\\.(([ai]s_(data|func|i31))|cast|eq|func|(is_|as_non_)?null|test))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 "rtt(\\.(canon|sub))?",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 CodeMirror.defineSimpleMode('wast', {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 start: [
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 {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"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 {regex: new RegExp(kKeywords.join('|')), token: "keyword"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 {regex: /\b((any|data|eq|extern|i31|func)ref|[fi](32|64)|i(8|16))\b/, token: "atom"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 {regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/, token: "variable-2"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 {regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 {regex: /\(;.*?/, token: "comment", next: "comment"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 {regex: /;;.*$/, token: "comment"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 {regex: /\(/, indent: true},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 {regex: /\)/, dedent: true},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 ],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 comment: [
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 {regex: /.*?;\)/, token: "comment", next: "start"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 {regex: /.*/, token: "comment"},
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 ],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 meta: {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 dontIndentStates: ['comment'],
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 },
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128 // https://github.com/WebAssembly/design/issues/981 mentions text/webassembly,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 // which seems like a reasonable choice, although it's not standard right now.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 CodeMirror.defineMIME("text/webassembly", "wast");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 });