123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /*
- Language: WebAssembly
- Website: https://webassembly.org
- Description: Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.
- Category: web, common
- Audit: 2020
- */
- /** @type LanguageFn */
- function wasm(hljs) {
- hljs.regex;
- const BLOCK_COMMENT = hljs.COMMENT(/\(;/, /;\)/);
- BLOCK_COMMENT.contains.push("self");
- const LINE_COMMENT = hljs.COMMENT(/;;/, /$/);
- const KWS = [
- "anyfunc",
- "block",
- "br",
- "br_if",
- "br_table",
- "call",
- "call_indirect",
- "data",
- "drop",
- "elem",
- "else",
- "end",
- "export",
- "func",
- "global.get",
- "global.set",
- "local.get",
- "local.set",
- "local.tee",
- "get_global",
- "get_local",
- "global",
- "if",
- "import",
- "local",
- "loop",
- "memory",
- "memory.grow",
- "memory.size",
- "module",
- "mut",
- "nop",
- "offset",
- "param",
- "result",
- "return",
- "select",
- "set_global",
- "set_local",
- "start",
- "table",
- "tee_local",
- "then",
- "type",
- "unreachable"
- ];
- const FUNCTION_REFERENCE = {
- begin: [
- /(?:func|call|call_indirect)/,
- /\s+/,
- /\$[^\s)]+/
- ],
- className: {
- 1: "keyword",
- 3: "title.function"
- }
- };
- const ARGUMENT = {
- className: "variable",
- begin: /\$[\w_]+/
- };
- const PARENS = {
- match: /(\((?!;)|\))+/,
- className: "punctuation",
- relevance: 0
- };
- const NUMBER = {
- className: "number",
- relevance: 0,
- // borrowed from Prism, TODO: split out into variants
- 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/
- };
- const TYPE = {
- // look-ahead prevents us from gobbling up opcodes
- match: /(i32|i64|f32|f64)(?!\.)/,
- className: "type"
- };
- const MATH_OPERATIONS = {
- className: "keyword",
- // borrowed from Prism, TODO: split out into variants
- 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/
- };
- const OFFSET_ALIGN = {
- match: [
- /(?:offset|align)/,
- /\s*/,
- /=/
- ],
- className: {
- 1: "keyword",
- 3: "operator"
- }
- };
- return {
- name: 'WebAssembly',
- keywords: {
- $pattern: /[\w.]+/,
- keyword: KWS
- },
- contains: [
- LINE_COMMENT,
- BLOCK_COMMENT,
- OFFSET_ALIGN,
- ARGUMENT,
- PARENS,
- FUNCTION_REFERENCE,
- hljs.QUOTE_STRING_MODE,
- TYPE,
- MATH_OPERATIONS,
- NUMBER
- ]
- };
- }
- export { wasm as default };
|