1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | function wasm(hljs) {
|
11 | hljs.regex;
|
12 | const BLOCK_COMMENT = hljs.COMMENT(/\(;/, /;\)/);
|
13 | BLOCK_COMMENT.contains.push("self");
|
14 | const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);
|
15 |
|
16 | const KWS = [
|
17 | "anyfunc",
|
18 | "block",
|
19 | "br",
|
20 | "br_if",
|
21 | "br_table",
|
22 | "call",
|
23 | "call_indirect",
|
24 | "data",
|
25 | "drop",
|
26 | "elem",
|
27 | "else",
|
28 | "end",
|
29 | "export",
|
30 | "func",
|
31 | "global.get",
|
32 | "global.set",
|
33 | "local.get",
|
34 | "local.set",
|
35 | "local.tee",
|
36 | "get_global",
|
37 | "get_local",
|
38 | "global",
|
39 | "if",
|
40 | "import",
|
41 | "local",
|
42 | "loop",
|
43 | "memory",
|
44 | "memory.grow",
|
45 | "memory.size",
|
46 | "module",
|
47 | "mut",
|
48 | "nop",
|
49 | "offset",
|
50 | "param",
|
51 | "result",
|
52 | "return",
|
53 | "select",
|
54 | "set_global",
|
55 | "set_local",
|
56 | "start",
|
57 | "table",
|
58 | "tee_local",
|
59 | "then",
|
60 | "type",
|
61 | "unreachable"
|
62 | ];
|
63 |
|
64 | const FUNCTION_REFERENCE = {
|
65 | begin: [
|
66 | /(?:func|call|call_indirect)/,
|
67 | /\s+/,
|
68 | /\$[^\s)]+/
|
69 | ],
|
70 | className: {
|
71 | 1: "keyword",
|
72 | 3: "title.function"
|
73 | }
|
74 | };
|
75 |
|
76 | const ARGUMENT = {
|
77 | className: "variable",
|
78 | begin: /\$[\w_]+/
|
79 | };
|
80 |
|
81 | const PARENS = {
|
82 | match: /(\((?!;)|\))+/,
|
83 | className: "punctuation",
|
84 | relevance: 0
|
85 | };
|
86 |
|
87 | const NUMBER = {
|
88 | className: "number",
|
89 | relevance: 0,
|
90 |
|
91 | match: /[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/
|
92 | };
|
93 |
|
94 | const TYPE = {
|
95 |
|
96 | match: /(i32|i64|f32|f64)(?!\.)/,
|
97 | className: "type"
|
98 | };
|
99 |
|
100 | const MATH_OPERATIONS = {
|
101 | className: "keyword",
|
102 |
|
103 | match: /\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/
|
104 | };
|
105 |
|
106 | const OFFSET_ALIGN = {
|
107 | match: [
|
108 | /(?:offset|align)/,
|
109 | /\s*/,
|
110 | /=/
|
111 | ],
|
112 | className: {
|
113 | 1: "keyword",
|
114 | 3: "operator"
|
115 | }
|
116 | };
|
117 |
|
118 | return {
|
119 | name: 'WebAssembly',
|
120 | keywords: {
|
121 | $pattern: /[\w.]+/,
|
122 | keyword: KWS
|
123 | },
|
124 | contains: [
|
125 | LINE_COMMENT,
|
126 | BLOCK_COMMENT,
|
127 | OFFSET_ALIGN,
|
128 | ARGUMENT,
|
129 | PARENS,
|
130 | FUNCTION_REFERENCE,
|
131 | hljs.QUOTE_STRING_MODE,
|
132 | TYPE,
|
133 | MATH_OPERATIONS,
|
134 | NUMBER
|
135 | ]
|
136 | };
|
137 | }
|
138 |
|
139 | export { wasm as default };
|