]> luflow.net public git repositories - flow-web.git/blob - static/highlight/es/languages/wasm.js
Initial commit.
[flow-web.git] / static / highlight / es / languages / wasm.js
1 /*! `wasm` grammar compiled for Highlight.js 11.11.1 */
2 var hljsGrammar = (function () {
3 'use strict';
4
5 /*
6 Language: WebAssembly
7 Website: https://webassembly.org
8 Description: Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.
9 Category: web, common
10 Audit: 2020
11 */
12
13 /** @type LanguageFn */
14 function wasm(hljs) {
15 hljs.regex;
16 const BLOCK_COMMENT = hljs.COMMENT(/\(;/, /;\)/);
17 BLOCK_COMMENT.contains.push("self");
18 const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);
19
20 const KWS = [
21 "anyfunc",
22 "block",
23 "br",
24 "br_if",
25 "br_table",
26 "call",
27 "call_indirect",
28 "data",
29 "drop",
30 "elem",
31 "else",
32 "end",
33 "export",
34 "func",
35 "global.get",
36 "global.set",
37 "local.get",
38 "local.set",
39 "local.tee",
40 "get_global",
41 "get_local",
42 "global",
43 "if",
44 "import",
45 "local",
46 "loop",
47 "memory",
48 "memory.grow",
49 "memory.size",
50 "module",
51 "mut",
52 "nop",
53 "offset",
54 "param",
55 "result",
56 "return",
57 "select",
58 "set_global",
59 "set_local",
60 "start",
61 "table",
62 "tee_local",
63 "then",
64 "type",
65 "unreachable"
66 ];
67
68 const FUNCTION_REFERENCE = {
69 begin: [
70 /(?:func|call|call_indirect)/,
71 /\s+/,
72 /\$[^\s)]+/
73 ],
74 className: {
75 1: "keyword",
76 3: "title.function"
77 }
78 };
79
80 const ARGUMENT = {
81 className: "variable",
82 begin: /\$[\w_]+/
83 };
84
85 const PARENS = {
86 match: /(\((?!;)|\))+/,
87 className: "punctuation",
88 relevance: 0
89 };
90
91 const NUMBER = {
92 className: "number",
93 relevance: 0,
94 // borrowed from Prism, TODO: split out into variants
95 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/
96 };
97
98 const TYPE = {
99 // look-ahead prevents us from gobbling up opcodes
100 match: /(i32|i64|f32|f64)(?!\.)/,
101 className: "type"
102 };
103
104 const MATH_OPERATIONS = {
105 className: "keyword",
106 // borrowed from Prism, TODO: split out into variants
107 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/
108 };
109
110 const OFFSET_ALIGN = {
111 match: [
112 /(?:offset|align)/,
113 /\s*/,
114 /=/
115 ],
116 className: {
117 1: "keyword",
118 3: "operator"
119 }
120 };
121
122 return {
123 name: 'WebAssembly',
124 keywords: {
125 $pattern: /[\w.]+/,
126 keyword: KWS
127 },
128 contains: [
129 LINE_COMMENT,
130 BLOCK_COMMENT,
131 OFFSET_ALIGN,
132 ARGUMENT,
133 PARENS,
134 FUNCTION_REFERENCE,
135 hljs.QUOTE_STRING_MODE,
136 TYPE,
137 MATH_OPERATIONS,
138 NUMBER
139 ]
140 };
141 }
142
143 return wasm;
144
145 })();
146 ;
147 export default hljsGrammar;