summaryrefslogtreecommitdiffstats
path: root/assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax
diff options
context:
space:
mode:
Diffstat (limited to 'assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax')
-rw-r--r--assets/syntaxes/02_Extra/Assembly (x86_64).sublime-syntax1367
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