diff options
Diffstat (limited to 'assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax')
-rw-r--r-- | assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax | 1367 |
1 files changed, 1367 insertions, 0 deletions
diff --git a/assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax b/assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax new file mode 100644 index 00000000..1d91df82 --- /dev/null +++ b/assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax @@ -0,0 +1,1367 @@ +%YAML 1.2 +--- +file_extensions: [yasm, nasm, asm, inc, mac] +scope: source.asm.x86_64 + +variables: + num_bin: '(?:[01][01_]*)' + num_oct: '(?:[0-7][0-7_]*)' + num_dec: '(?:[0-9][0-9_]*)' + num_hex: '(?:[[:xdigit:]][[:xdigit:]_]*)' + num_bin_exp: '(?:p[+-]?{{num_dec}})' + num_dec_exp: '(?:e[+-]?{{num_dec}})' + identifier_body: '(?:[[:alnum:]_$#@~.?]*)' + valid_identifier: '(?:[[:alpha:]_?]{{identifier_body}})' + +contexts: + prototype: + - include: comments + + line-continuation: + - match: '(\\)$\n' + captures: + 1: punctuation.separator.continuation.asm.x86_64 + - match: '\\(\s+?)$' + captures: + 1: invalid.illegal.space-after-continuation.asm.x86_64 + line-ending: + - match: '$\n' + pop: true + pop: + - match: '(?=.|$)' + pop: true + pop-if-not-whitespace: + - match: '(?=\S)' + set: pop + + main: + - include: comments + - include: prefixes + - include: data-types + - include: registers + - include: mnemonics + - include: strings + - include: numbers + - include: operators + - include: support + - include: directives + - include: entities + - include: structs + - include: preprocessor + - include: labels + + numbers: + - include: floating-point + - include: integers + floating-point: + # binary + - match: '(?i)\b0[by]{{num_bin}}\.(?:{{num_bin}}?{{num_bin_exp}}?\b)?' + scope: constant.numeric.binary.floating-point.asm.x86_64 + - match: '(?i)\b0[by]{{num_bin}}{{num_bin_exp}}\b' + scope: constant.numeric.binary.floating-point.asm.x86_64 + # octal + - match: '(?i)\b0[oq]{{num_oct}}\.(?:{{num_oct}}?{{num_bin_exp}}?\b)?' + scope: constant.numeric.octal.floating-point.asm.x86_64 + - match: '(?i)\b0[oq]{{num_oct}}{{num_bin_exp}}\b' + scope: constant.numeric.octal.floating-point.asm.x86_64 + # decimal + - match: '(?i)\b(?:0[dt])?{{num_dec}}\.(?:{{num_dec}}?{{num_dec_exp}}?\b)?' + scope: constant.numeric.decimal.floating-point.asm.x86_64 + - match: '(?i)\b{{num_dec}}{{num_dec_exp}}\b' + scope: constant.numeric.decimal.floating-point.asm.x86_64 + #- match: '(?i)\.{{num_dec}}{{num_dec_exp}}?\b' + # scope: invalid.illegal.constant.numeric.decimal.floating-point.asm.x86_64 + - match: '(?i)\b{{num_dec}}p{{num_dec}}?\b' + scope: constant.numeric.decimal.packed-bcd.asm.x86_64 + # hex + - match: '(?i)\b0[xh]{{num_hex}}\.(?:{{num_hex}}?{{num_bin_exp}}?\b)?' + scope: constant.numeric.hex.floating-point.asm.x86_64 + - match: '(?i)\b0[xh]{{num_hex}}{{num_bin_exp}}\b' + scope: constant.numeric.hex.floating-point.asm.x86_64 + - match: '(?i)\$[0-9]\_?{{num_hex}}?\.(?:{{num_hex}}?{{num_bin_exp}}?\b)?' + scope: constant.numeric.hex.floating-point.asm.x86_64 + - match: '(?i)\$[0-9]\_?{{num_hex}}{{num_bin_exp}}\b' + scope: constant.numeric.hex.floating-point.asm.x86_64 + integers: + - match: '(?i)\b(?:(?:0[by]{{num_bin}})|(?:{{num_bin}}[by]))\b' + scope: constant.numeric.binary.asm.x86_64 + - match: '(?i)\b(?:(?:0[oq]{{num_oct}})|(?:{{num_oct}}[oq]))\b' + scope: constant.numeric.octal.asm.x86_64 + - match: '(?i)\b(?:(?:0[dt]{{num_dec}})|(?:{{num_dec}}[dt]?))\b' + scope: constant.numeric.decimal.asm.x86_64 + - match: '(?i)(?:\$[0-9]\_?{{num_hex}}?)\b' + scope: constant.numeric.hex.asm.x86_64 + - match: '(?i)\b(?:(?:0[xh]{{num_hex}})|(?:{{num_hex}}[hxHX]))\b' + scope: constant.numeric.hex.asm.x86_64 + + labels: + # http://www.nasm.us/doc/nasmdoc3.html#section-3.9 + - match: '(\.\.@)({{valid_identifier}})(?:(\:)?|\b)' + captures: + 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64 + 2: entity.name.constant.special.asm.x86_64 + 3: punctuation.separator.asm.x86_64 + - match: '(?:(\.)?|\b)({{valid_identifier}})(?:(\:)?|\b)' + captures: + 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64 + 2: entity.name.constant.asm.x86_64 + 3: punctuation.separator.asm.x86_64 + - match: '(\.)([0-9]+{{identifier_body}})(?:(\:)?|\b)' + captures: + 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64 + 2: entity.name.constant.asm.x86_64 + 3: punctuation.separator.asm.x86_64 + - match: '(?:(\.)?|\b)([0-9$@~]{{identifier_body}})(?:(\:)?|\b)' + captures: + 1: punctuation.separator.asm.x86_64 storage.modifier.asm.x86_64 + 2: invalid.illegal.entity.name.constant.asm.x86_64 + 3: punctuation.separator.asm.x86_64 + - match: '((%)(\d+))' + captures: + 1: invalid.illegal.meta.preprocessor.asm.x86_64 + #1: meta.preprocessor.asm.x86_64 + 2: punctuation.definition.variable.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 3: variable.other.preprocessor.asm.x86_64 + - match: '((%%)({{valid_identifier}})(?:(\:)?|\b))' + captures: + 1: invalid.illegal.meta.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 3: entity.name.constant.special.asm.x86_64 + 4: punctuation.separator.asm.x86_64 + + data-types: + # Initialized & uninitialized data: http://www.nasm.us/doc/nasmdoc3.html#section-3.2.1 + - match: '(?i)\b(?:s?byte|(?:[doqtyz]|dq|s[dq]?)?word|(?:d|res)[bdoqtwyz]|ddq)\b' + scope: storage.type.asm.x86_64 + - match: '(?i)\b(?:incbin|equ|times)\b' + scope: support.function.asm.x86_64 + + prefixes: + - match: '(?i)\b(?:strict|nosplit|near|far|abs|rel)\b' + scope: storage.modifier.asm.x86_64 + - match: '(?i)\b(?:[ao](?:16|32|64))\b' + scope: storage.modifier.prefix.asm.x86_64 + - match: '(?i)\b(?:rep(?:n?[ez])?|lock|xacquire|xrelease|(?:no)?bnd)\b' + scope: storage.modifier.prefix.asm.x86_64 + - match: '{(vex[23]|evex)}' + captures: + 1: storage.modifier.prefix.vex.asm.x86_64 + - match: '{(k[1-7])}' + captures: + 1: storage.modifier.opmask.asm.x86_64 + - match: '{(1to(?:8|16))}' + captures: + 1: storage.modifier.precision.asm.x86_64 + - match: '{(z|(?:r[nudz]-)?sae)}' + captures: + 1: storage.modifier.rounding.asm.x86_64 + + support: + # http://www.nasm.us/doc/nasmdoc7.html#section-7.4.6 + - match: '\.\.(?:start|imagebase|tlvp|got(?:pc(?:rel)?|(?:tp)?off)?|plt|sym|tlsie)\b' + scope: support.constant.asm.x86_64 + - match: '\b__(?:utf(?:(?:16|32)(?:[lb]e)?)|float(?:8|16|32|64|80[me]|128[lh])|Infinity|[QS]?NaN)__\b' + scope: support.function.asm.x86_64 + # http://www.nasm.us/doc/nasmdoc4.html#section-4.11 + - match: '\b__NASM_(?:MAJOR|(?:SUB)?MINOR|SNAPSHOT|VER(?:SION_ID)?)__\b' + scope: support.function.asm.x86_64 + - match: '\b___NASM_PATCHLEVEL__\b' + scope: support.function.asm.x86_64 + - match: '\b__(?:FILE|LINE|BITS|OUTPUT_FORMAT)__\b' + scope: support.function.asm.x86_64 + - match: '\b__(?:(?:UTC_)?(?:DATE|TIME)(?:_NUM)?|POSIX_TIME)__\b' + scope: support.function.asm.x86_64 + - match: '\b__USE_(?:ALTREG|SMARTALIGN|FP|IFUNC)__\b' + scope: support.function.asm.x86_64 + - match: '\b__PASS__\b' + scope: invalid.deprecated.support.constant.altreg.asm.x86_64 + - match: '(?i)\balignmode\b' + scope: support.function.smartalign.asm.x86_64 + push: + - include: line-continuation + - include: line-ending + - match: '\b(?:generic|nop|k7|k8|p6)\b' + scope: support.constant.smartalign.asm.x86_64 + pop: true + - match: '\w+' + scope: invalid.illegal.constant.smartalign.asm.x86_64 + pop: true + - match: '\b__ALIGNMODE__\b' + scope: support.constant.smartalign.asm.x86_64 + - match: '\b(?:Inf|[QS]?NaN)\b' + scope: support.constant.fp.asm.x86_64 + - match: '\b(?:float(?:8|16|32|64|80[me]|128[lh]))\b' + scope: support.function.fp.asm.x86_64 + - match: '(?i)\bilog2(?:[ewfc]|[fc]w)?\b' + scope: support.function.ifunc.asm.x86_64 + + directives: + - match: '(?i)\b(?:ideal|jumps|p[345]86|end)\b' + scope: invalid.deprecated.tasm.asm.x86_64 + - match: '(?i)\b(?:bits|use(?:16|32|64)|org|uppercase|safeseh|osabi)\b' + scope: support.function.directive.asm.x86_64 + - match: '(?i)\b(default)(?:\s+(rel|abs|(?:no)?bnd))?\b' + captures: + 1: support.function.directive.asm.x86_64 + 2: support.constant.directive.asm.x86_64 + - match: '(?i)\b(?:section|segment)\b' + scope: support.function.directive.asm.x86_64 + push: [section-parameters, section-name] + - match: '(?i)\bgroup\b' + scope: support.function.directive.asm.x86_64 + push: section-name + - match: '\b(?:__SECT__|__NASMDEFSEG|_?_GLOBAL_OFFSET_TABLE_)\b' + scope: support.constant.directive.asm.x86_64 + - match: '(?i)\b(?:absolute|common)\b' + scope: support.function.directive.asm.x86_64 + - match: '(?i)\b(?:subsections_via_symbols|no_dead_strip)\b' + scope: support.function.directive.macho.asm.x86_64 + - match: '(?i)import\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '{{valid_identifier}}' + scope: entity.name.function.asm.x86_64 + set: + - match: '{{valid_identifier}}' + scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64 + set: + - match: '{{valid_identifier}}' + scope: variable.function.asm.x86_64 + set: + - include: comments + - match: '{{valid_identifier}}' + scope: invalid.illegal.asm.x86_64 + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - match: '(?i)export\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '{{valid_identifier}}' + scope: entity.name.constant.asm.x86_64 + set: + - match: '{{valid_identifier}}' + scope: variable.function.asm.x86_64 + set: export-parameters + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - match: '(?i)global\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '(?<=\:)(?:function|data|export)\b' + scope: storage.type.directive.asm.x86_64 + - match: '\b(?:default|internal|hidden|protected|proc|data)\b' + scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64 + - include: line-continuation + - include: line-ending + - include: preprocessor-macro-parameter + - include: main + - match: '(?i)extern\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '(?<=\:)(?:import)\b' + scope: storage.type.directive.asm.x86_64 + - match: '\b(?:proc|data)\b' + scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64 + - include: line-continuation + - include: line-ending + - include: preprocessor-macro-parameter + - include: main + - match: '(?i)library\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '{{valid_identifier}}' + scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64 + pop: true + - include: line-continuation + - include: line-ending + - include: pop-if-not-whitespace + - match: '(?i)module\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '\$?{{valid_identifier}}' + scope: entity.name.namespace.asm.x86_64 + pop: true + - include: line-continuation + - include: line-ending + - include: pop-if-not-whitespace + - match: '(?i)\bcpu\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '(?i)\b(?:(?:80|[1-6])86|pentium|ppro|p[234]|katmai|willamette|prescott|(?:x|ia)64)\b' + scope: support.constant.directive.asm.x86_64 + pop: true + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: main + - match: '(?i)\bfloat\b' + scope: support.function.directive.asm.x86_64 + push: + - match: '(?i)\b(?:(?:no)?daz|near|up|down|zero|default)\b' + scope: support.constant.directive.asm.x86_64 + pop: true + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: main + - match: '(?i)(\[)\s*(warning)\b' + captures: + 2: support.function.directive.asm.x86_64 + push: + - match: '(?i)([+\-*])|(error)\s*(=)\s*' + captures: + 1: keyword.control.warning.asm.x86_64 + 2: support.constant.directive.warning.asm.x86_64 + 3: keyword.operator.assignment.asm.x86_64 + push: + - match: '(?i)\b(other|macro-(?:params|selfref|defaults)|orphan-labels|number-overflow|gnu-elf-extensions|float-(?:overflow|denorm|underflow|toolong)|user|lock|hle|bnd|zext-reloc|ptr|(?:bad|unknown|not-my)-pragma|unknown-warning|all)(?=\]|\s)' + scope: support.constant.directive.warning.asm.x86_64 + pop: true + - match: '\S+(?=\])' + scope: invalid.illegal.support.constant.directive.warning.asm.x86_64 + pop: true + - match: '\S+' + scope: invalid.illegal.support.constant.directive.warning.asm.x86_64 + pop: true + - match: '(?i)\b(?:all|error)\b' + scope: support.constant.directive.warning.asm.x86_64 + - match: ']' + pop: true + - include: line-continuation + - include: line-ending + - match: '(?i)(\[)\s*(map)\b' + captures: + 2: support.function.directive.asm.x86_64 + push: + - match: '(?i)\b(?:all|brief|sections|segments|symbols)\b' + scope: support.constant.directive.map.asm.x86_64 + - match: '(?i)\b(?:std(?:out|err))\b' + scope: meta.path.asm.x86_64 support.constant.directive.map.asm.x86_64 + - match: '{{valid_identifier}}' + scope: meta.path.asm.x86_64 string.unquoted.asm.x86_64 + - match: ']' + pop: true + - include: line-continuation + - include: line-ending + section-parameters: + - match: '=' + scope: keyword.operator.assignment.asm.x86_64 + - match: '(?i)\b(?:(?:v)?start|align|absolute)\b' + scope: variable.parameter.directive.asm.x86_64 + - match: '(?i)\b(?:(?:prog|no)bits|private|public|common|stack|code|text|data|bss|rdata|info)\b' + scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64 + - match: '(?i)\b(?:mixed|zerofill|no_dead_strip|live_support|strip_static_syms)\b' + scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.macho.asm.x86_64 + - match: '(?i)\b(?:(?:no)?(?:alloc|exec|write)|tls)\b' + scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.elf.asm.x86_64 + - match: '(?i)\b(?:(?:v)?follows)\b' + scope: variable.parameter.directive.asm.x86_64 + push: + - match: '=' + scope: keyword.operator.assignment.asm.x86_64 + set: [pop, section-name] + - include: line-continuation + - include: line-ending + - match: '(?i)\b(?:class|overlay)\b' + scope: variable.parameter.directive.asm.x86_64 + push: + - match: '=' + scope: keyword.operator.assignment.asm.x86_64 + - match: '{{valid_identifier}}' + scope: entity.name.class.asm.x86_64 string.unquoted.asm.x86_64 + pop: true + - include: line-continuation + - include: line-ending + - include: line-continuation + - include: line-ending + - include: main + section-name: + - match: '(?:\.|\b)(?:text|bss|(?:[rpx]|ro)?data|code)\b' + scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.asm.x86_64 + pop: true + - match: '\b__(?:text|const|data|bss|TEXT|CONST|DATA|BSS)\b' + scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.macho.asm.x86_64 + pop: true + - match: '(?:\.)(?:[lt](?:data|bss)|lrodata|comment)\b' + scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 support.constant.section.elf.asm.x86_64 + pop: true + - match: '(?:\.|\b){{valid_identifier}}\b' + scope: entity.name.section.asm.x86_64 string.unquoted.asm.x86_64 + pop: true + - match: '(?=`|''|")' + set: + - meta_scope: entity.name.section.asm.x86_64 + - include: strings + - include: pop + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + export-parameters: + - match: '=' + scope: keyword.operator.assignment.asm.x86_64 + - match: '(?i)\b(?:resident|nodata)\b' + scope: storage.modifier.directive.asm.x86_64 variable.parameter.directive.asm.x86_64 + - match: '(?i)\b(?:parm)\b' + scope: variable.parameter.directive.asm.x86_64 + - include: primitive-directive-end + - include: line-continuation + - include: line-ending + - include: main + + operators: + - match: '[+\-*/]' + scope: keyword.operator.arithmetic.asm.x86_64 + - match: '(%%|%)[[:space:]]' + captures: + 1: keyword.operator.arithmetic.asm.x86_64 + - match: '[|&^~!]|<<|>>' + scope: keyword.operator.bitwise.asm.x86_64 + - match: '(?i)\b(seg|wrt)\b' + scope: keyword.operator.word.asm.x86_64 + - match: ',' + scope: operator.separator.asm.x86_64 + + structs: + - match: '(?i)\bstruc\b' + scope: support.function.asm.x86_64 meta.struct.asm.x86_64 + push: + - meta_content_scope: meta.struct.asm.x86_64.1 + - match: '{{valid_identifier}}' + scope: entity.name.struct.asm.x86_64 + set: + - meta_scope: meta.struct.asm.x86_64 + - match: '(?i)\bendstruc\b' + scope: support.function.asm.x86_64 meta.struct.asm.x86_64 + pop: true + - include: main + - match: '\w' + scope: invalid.illegal.entity.name.struct.asm.x86_64 + - match: '(?i)\bendstruc\b' + scope: invalid.illegal.support.function.asm.x86_64 meta.struct.asm.x86_64 + - match: '(?i)\bistruc\b' + scope: support.function.asm.x86_64 meta.struct.asm.x86_64 + push: + - meta_content_scope: meta.struct.asm.x86_64.1 + - match: '{{valid_identifier}}' + scope: variable.other.asm.x86_64 + set: + - meta_scope: meta.struct.asm.x86_64 + - match: '(?i)\bat\b' + scope: support.function.asm.x86_64 meta.struct.asm.x86_64 + - match: '(?i)\biend\b' + scope: support.function.asm.x86_64 meta.struct.asm.x86_64 + pop: true + - include: main + - match: '\w' + scope: invalid.illegal.variable.struct.asm.x86_64 + - match: '(?i)\biend\b' + scope: invalid.illegal.support.function.asm.x86_64 meta.struct.asm.x86_64 + - match: '(?i)\balignb?\b' + scope: support.function.asm.x86_64 + - match: '(?i)\b(sectalign)\s+(on|off)?' + captures: + 1: support.function.asm.x86_64 + 2: support.constant.asm.x86_64 + + entities: + - match: '\$@feat\.00\b' + scope: variable.language.sseh.asm.x86_64 + - match: '(\$)(?:\w+)\b' + scope: variable.other.asm.x86_64 + captures: + 1: punctuation.definition.variable.asm.x86_64 + - match: '\${3,}' + scope: invalid.illegal.variable.language.asm.x86_64 + - match: '\$' + scope: variable.language.asm.x86_64 + + comments: + - match: (?:(;)|(?:^|\s)(#)\s).*$ + scope: comment.line.asm.x86_64 + captures: + 1: punctuation.definition.comment.asm.x86_64 + 2: punctuation.definition.comment.asm.x86_64 + - match: /\* + scope: punctuation.definition.comment.asm.x86_64 + push: + - meta_scope: comment.block.asm.x86_64 + - match: \*/ + scope: punctuation.definition.comment.asm.x86_64 + pop: true + + preprocessor: # http://www.nasm.us/doc/nasmdoc4.html + - include: preprocessor-macro-multiline + - include: preprocessor-macro-define + - include: preprocessor-macro-indirection + - include: preprocessor-conditions + - include: preprocessor-other + # single-line macro + preprocessor-macro-define: + - match: '^\s*((%)x?i?define)\b' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-comments + - match: '(?:{{valid_identifier}})(?=\()' + scope: entity.name.function.preprocessor.asm.x86_64 + set: + - match: '\(' + scope: punctuation.section.group.begin.asm.x86_64 + set: preprocessor-macro-params + - match: '{{valid_identifier}}' + scope: entity.name.constant.preprocessor.asm.x86_64 + set: preprocessor-macro-definition + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - match: '^\s*((%)(?:include|depend))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: preprocessor-macro-definition + - match: '^\s*((%)use)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64 + - include: strings + - include: line-ending + - include: preprocessor-macro-indirection + - match: '^\s*((%)(?:assign|i?deftok|strcat|strlen|substr|pathsearch|push|pop|repl|line|clear))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-macro-indirection + - include: preprocessor-conditions-constant + - match: '^\s*((%)(?:arg|local))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - match: '({{valid_identifier}})(\:)(?=\w+)' + captures: + 1: meta.preprocessor.asm.x86_64 variable.parameter.macro.asm.x86_64 + 2: punctuation.separator.asm.x86_64 + - match: '\,' + scope: punctuation.separator.asm.x86_64 + - include: data-types + - match: '\w+\b' + scope: invalid.illegal.storage.type.asm.x86_64 + - include: line-continuation + - include: line-ending + - match: '^\s*((%)stacksize)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - match: '\b(flat(?:64)?|large|small)\b' + scope: support.constant.macro.asm.x86_64 + - match: '\w+\b' + scope: invalid.illegal.storage.type.asm.x86_64 + - include: line-continuation + - include: line-ending + - match: '^\s*((%)i?defstr)\s+(?:({{valid_identifier}})|(%%)({{valid_identifier}}))\b' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.assign.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + 3: entity.name.constant.preprocessor.asm.x86_64 + 4: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 5: entity.name.constant.special.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64 + - include: preprocessor-macro-indirection + - include: line-ending + - match: '^\s*((%)(?:warning|error|fatal|pragma))(?=\s|$)' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.assign.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + 3: entity.name.constant.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 string.unquoted.asm.x86_64 + - include: strings + - include: preprocessor-macro-indirection + - include: line-ending + preprocessor-macro-params-illegal: + - meta_scope: invalid.illegal.asm.x86_64 + - include: preprocessor-macro-params + preprocessor-macro-params: + - meta_scope: meta.preprocessor.macro.parameters.asm.x86_64 meta.group.asm.x86_64 + - match: '{{valid_identifier}}' + scope: variable.parameter.asm.x86_64 + - match: '\)' + scope: punctuation.section.group.end.asm.x86_64 + set: preprocessor-macro-definition + - match: ',' + scope: punctuation.separator.asm.x86_64 + push: + - match: '{{valid_identifier}}' + scope: variable.parameter.asm.x86_64 + pop: true + - include: line-continuation + - include: preprocessor-comments + - match: '\.\.\.' + scope: keyword.operator.variadic.asm.x86_64 + - match: '(?=\))' + pop: true + - match: '(/\*).*(\*/)' + scope: comment.block.asm.x86_64 + captures: + 1: punctuation.definition.comment.asm.x86_64 + 2: punctuation.definition.comment.asm.x86_64 + - match: '\S+' + scope: invalid.illegal.unexpected-character.asm.x86_64 + - include: line-continuation + - include: preprocessor-comments + - match: '\.\.\.' + scope: keyword.operator.variadic.asm.x86_64 + - match: '(/\*).*(\*/)' + scope: comment.block.asm.x86_64 + captures: + 1: punctuation.definition.comment.asm.x86_64 + 2: punctuation.definition.comment.asm.x86_64 + - match: '$\n' + scope: invalid.illegal.unexpected-end-of-line.asm.x86_64 + preprocessor-macro-definition: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-comments + - include: line-continuation + - include: line-ending + - include: main + preprocessor-macro-indirection: + - match: '((%)(\[))' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + 3: meta.brackets.asm.x86_64 punctuation.section.brackets.begin.asm.x86_64 + push: + - meta_scope: meta.brackets.asm.x86_64 meta.preprocessor.macro.asm.x86_64 + - include: line-continuation + - include: line-ending + - include: main + - match: '\]' + scope: punctuation.section.brackets.end.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + pop: true + - match: '((%)\+)\s+' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + - match: '((%)(\?\??))' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + 3: variable.language.preprocessor.asm.x86_64 + - match: '((%\$+)({{valid_identifier}})(?:(\:)?|\b))' + captures: + 1: meta.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 3: entity.name.constant.special.asm.x86_64 + 4: punctuation.separator.asm.x86_64 + - match: '((%)(\!))' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + 3: punctuation.definition.variable.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.asm.x86_64 keyword.operator.preprocessor.asm.x86_64 variable.parameter.preprocessor.environment.asm.x86_64 + - match: '{{valid_identifier}}' + scope: variable.parameter.preprocessor.environment.unquoted.asm.x86_64 + pop: true + - match: '(?=`|''|")' + set: + - meta_scope: variable.parameter.preprocessor.environment.quoted.asm.x86_64 + - include: strings + - include: pop + - include: pop + preprocessor-conditions: # also see preprocessor-macro-conditions-multiline + - match: '^\s*((%)ifn?(?:idni?|id|num|str|token|empty|env)?)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: preprocessor-conditions-content-block + - match: '^\s*((%)ifn?(?:def|ctx))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: [preprocessor-conditions-content-block, preprocessor-conditions-constant] + - match: '^\s*((%)rep)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: preprocessor-conditions-content-block + - match: '^\s*((%)ifn?macro)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: [preprocessor-conditions-content-block, preprocessor-macro-arguments-signature] + - include: preprocessor-conditions-parity + preprocessor-conditions-constant: + - meta_content_scope: meta.preprocessor.asm.x86_64 + - match: '(?:{{valid_identifier}})(?=\()' + scope: entity.name.constant.preprocessor.asm.x86_64 + set: + - match: '\(' + scope: punctuation.section.group.begin.asm.x86_64 + set: preprocessor-macro-params-illegal + - match: '{{valid_identifier}}\b' + scope: meta.preprocessor.asm.x86_64 entity.name.constant.preprocessor.asm.x86_64 + pop: true + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + - include: main + preprocessor-conditions-content-block: + - meta_content_scope: meta.block.preprocessor.asm.x86_64 + - include: preprocessor-conditions-content-block-common + - include: main + preprocessor-conditions-content-block-common: + - match: '^\s*((%)(?:elifn?(?:idni?|id|num|str|token|empty|env)?|else|exitrep))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + - match: '^\s*((%)(?:elifn?(?:def|ctx)))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: preprocessor-conditions-constant + - match: '^\s*((%)elifn?macro)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: preprocessor-macro-arguments-signature + - match: '^\s*((%)(?:end(?:if|rep)))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + pop: true + preprocessor-conditions-parity: + - match: '^\s*((%)(?:elifn?(?:macro|def|ctx|idni?|id|num|str|token|empty|env)?|else|(?:end(?:if|rep))|exitrep))\b' + captures: + 1: invalid.illegal.meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + preprocessor-other: + - include: preprocessor-macro-indirection + - match: '^\s*((%)undef)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_scope: meta.preprocessor.asm.x86_64 + - include: line-continuation + - include: line-ending + - include: preprocessor-comments + - match: '{{valid_identifier}}' + scope: entity.name.constant.preprocessor.asm.x86_64 + pop: true + - match: '^\s*((%)unmacro)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: preprocessor-macro-arguments-signature + preprocessor-macro-arguments-signature: + - meta_scope: meta.preprocessor.asm.x86_64 + - include: preprocessor-comments + - match: '({{valid_identifier}})(?:\s+(?:(\d+(?:(-)(?:\d+|\*))?)(\+)?(\.nolist\b)?))' + captures: + 1: entity.name.function.preprocessor.asm.x86_64 + 2: variable.parameter.preprocessor.asm.x86_64 + 3: keyword.operator.preprocessor.range.asm.x86_64 + 4: storage.modifier.preprocessor.greedy.asm.x86_64 + 5: storage.modifier.preprocessor.listing.asm.x86_64 + pop: true + - include: line-continuation + - include: pop-if-not-whitespace + - include: line-ending + # multi-line macro + preprocessor-macro-multiline: + - match: '^\s*((%)i?macro)\b' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.define.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-comments + - match: '(?:{{valid_identifier}})(?=\()' + scope: entity.name.constant.preprocessor.asm.x86_64 + set: + - meta_content_scope: invalid.illegal.asm.x86_64 + - match: '\(' + scope: punctuation.section.group.begin.asm.x86_64 + set: preprocessor-macro-params-illegal + - match: '({{valid_identifier}})(?:\s+(?:(\d+(?:(-)(?:\d+|\*))?)(\+)?(\.nolist\b)?))' + captures: + 1: entity.name.function.preprocessor.asm.x86_64 + 2: variable.parameter.preprocessor.asm.x86_64 + 3: keyword.operator.preprocessor.range.asm.x86_64 + 4: storage.modifier.preprocessor.greedy.asm.x86_64 + 5: storage.modifier.preprocessor.listing.asm.x86_64 + set: preprocessor-macro-definition-multiline-with-parameters + - match: '^\s*((%)endmacro)\b' + captures: + 1: invalid.illegal.meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + preprocessor-macro-parameter: + - match: '((%)(\-?\d+))' + captures: + 1: meta.preprocessor.asm.x86_64 + 2: punctuation.definition.variable.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 3: variable.other.preprocessor.asm.x86_64 + preprocessor-macro-definition-multiline-with-parameters: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-comments + - include: preprocessor-macro-parameter + - include: preprocessor-macro-indirection + - include: preprocessor-macro-conditions-multiline + - include: preprocessor-macro-definition-multiline + preprocessor-macro-definition-multiline: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-comments + - match: '^\s*((%)endmacro)\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.import.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + pop: true + - match: '((%%)({{valid_identifier}})(?:(\:)?|\b))' + captures: + 1: meta.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 3: entity.name.constant.special.asm.x86_64 + 4: punctuation.separator.asm.x86_64 + - match: '((%)({))' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + 3: meta.braces.asm.x86_64 punctuation.section.braces.begin.asm.x86_64 + push: + - meta_scope: meta.braces.asm.x86_64 meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-macro-indirection + - match: ':' + scope: punctuation.separator.asm.x86_64 + - match: '}' + scope: punctuation.section.braces.end.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + pop: true + - match: '^\s*((%)(?:rotate))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.operator.word.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + - match: '^\s*((%)(?:include|depend))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + set: preprocessor-macro-definition-multiline-with-parameters + - match: '^\s*((%)(?:pathsearch))\b' + captures: + 1: meta.preprocessor.asm.x86_64 keyword.control.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + set: [preprocessor-macro-definition-multiline-with-parameters, preprocessor-conditions-constant] + - match: '^\s*((%)x?i?define)\b' + captures: + 1: meta.preprocessor.macro.asm.x86_64 keyword.control.import.preprocessor.asm.x86_64 + 2: punctuation.definition.keyword.preprocessor.asm.x86_64 + push: + - meta_content_scope: meta.preprocessor.macro.asm.x86_64 + - include: preprocessor-comments + - match: '(?:{{valid_identifier}})(?=\()' + scope: entit |