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