Skip to content

Commit 2b00673

Browse files
authored
fix: commenting issues on gas lexer (#1247)
Fixes commenting issues in the GAS lexer and adds tests. - Adds tests for `gas` - Changes comment regex in 3 states: `directive-args`, `instruction-args`, `whitespace` **Fixes #447** `@|!` - Adds comment prefixes ARM `@` Motorola 68k `|` SuperH `!` **Fixes #1246** `\n` -> `\n?` - makes trailing newline optional so final-line comments are highlighted `.*?` -> `.*` - removed unnecessary lazy quantifier <img width="751" height="304" alt="image" src="https://github.com/user-attachments/assets/9fd38bf2-6ee7-4656-9ecd-a161d57a7714" />
1 parent 8d04def commit 2b00673

3 files changed

Lines changed: 85 additions & 3 deletions

File tree

lexers/embedded/gas.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
<token type="Text"/>
5757
<pop depth="1"/>
5858
</rule>
59-
<rule pattern="([;#]|//).*?\n">
59+
<rule pattern="([;#@|!]|//).*\n?">
6060
<token type="CommentSingle"/>
6161
<pop depth="1"/>
6262
</rule>
@@ -114,7 +114,7 @@
114114
<token type="Text"/>
115115
<pop depth="1"/>
116116
</rule>
117-
<rule pattern="([;#]|//).*?\n">
117+
<rule pattern="([;#@|!]|//).*\n?">
118118
<token type="CommentSingle"/>
119119
<pop depth="1"/>
120120
</rule>
@@ -139,7 +139,7 @@
139139
<rule pattern="\s+">
140140
<token type="Text"/>
141141
</rule>
142-
<rule pattern="([;#]|//).*?\n">
142+
<rule pattern="([;#@|!]|//).*\n?">
143143
<token type="CommentSingle"/>
144144
</rule>
145145
<rule pattern="/[*][\w\W]*?[*]/">

lexers/testdata/gas.actual

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Returns bit 5 of a number.
2+
.globl _start
3+
.section .text
4+
_start:
5+
mov $0, %rdi # zero rdi
6+
mov $0b00100011, %rcx // input value
7+
test $0b00010000, %rcx /* bit mask, set zero flag */
8+
jz final ! if zero jump out
9+
mov $1, %rdi @ else, the test wasn't zero, set output to 1
10+
11+
final:
12+
mov $60, %rax | set exit syscall
13+
syscall # make syscall

lexers/testdata/gas.expected

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
[
2+
{"type":"CommentSingle","value":"# Returns bit 5 of a number.\n"},
3+
{"type":"NameAttribute","value":".globl"},
4+
{"type":"Text","value":" "},
5+
{"type":"NameConstant","value":"_start"},
6+
{"type":"Text","value":"\n"},
7+
{"type":"NameAttribute","value":".section"},
8+
{"type":"Text","value":" "},
9+
{"type":"NameConstant","value":".text"},
10+
{"type":"Text","value":"\n"},
11+
{"type":"NameLabel","value":"_start:"},
12+
{"type":"Text","value":"\n "},
13+
{"type":"NameFunction","value":"mov"},
14+
{"type":"Text","value":" "},
15+
{"type":"NameConstant","value":"$0"},
16+
{"type":"Punctuation","value":","},
17+
{"type":"Text","value":" "},
18+
{"type":"NameVariable","value":"%rdi"},
19+
{"type":"Text","value":" "},
20+
{"type":"CommentSingle","value":"# zero rdi\n"},
21+
{"type":"Text","value":" "},
22+
{"type":"NameFunction","value":"mov"},
23+
{"type":"Text","value":" "},
24+
{"type":"NameConstant","value":"$0b00100011"},
25+
{"type":"Punctuation","value":","},
26+
{"type":"Text","value":" "},
27+
{"type":"NameVariable","value":"%rcx"},
28+
{"type":"Text","value":" "},
29+
{"type":"CommentSingle","value":"// input value\n"},
30+
{"type":"Text","value":" "},
31+
{"type":"NameFunction","value":"test"},
32+
{"type":"Text","value":" "},
33+
{"type":"NameConstant","value":"$0b00010000"},
34+
{"type":"Punctuation","value":","},
35+
{"type":"Text","value":" "},
36+
{"type":"NameVariable","value":"%rcx"},
37+
{"type":"Text","value":" "},
38+
{"type":"CommentMultiline","value":"/* bit mask, set zero flag */"},
39+
{"type":"Text","value":"\n "},
40+
{"type":"NameFunction","value":"jz"},
41+
{"type":"Text","value":" "},
42+
{"type":"NameConstant","value":"final"},
43+
{"type":"Text","value":" "},
44+
{"type":"CommentSingle","value":"! if zero jump out\n"},
45+
{"type":"Text","value":" "},
46+
{"type":"NameFunction","value":"mov"},
47+
{"type":"Text","value":" "},
48+
{"type":"NameConstant","value":"$1"},
49+
{"type":"Punctuation","value":","},
50+
{"type":"Text","value":" "},
51+
{"type":"NameVariable","value":"%rdi"},
52+
{"type":"Text","value":" "},
53+
{"type":"CommentSingle","value":"@ else, the test wasn't zero, set output to 1\n"},
54+
{"type":"Text","value":"\n"},
55+
{"type":"NameLabel","value":"final:"},
56+
{"type":"Text","value":"\n "},
57+
{"type":"NameFunction","value":"mov"},
58+
{"type":"Text","value":" "},
59+
{"type":"NameConstant","value":"$60"},
60+
{"type":"Punctuation","value":","},
61+
{"type":"Text","value":" "},
62+
{"type":"NameVariable","value":"%rax"},
63+
{"type":"Text","value":" "},
64+
{"type":"CommentSingle","value":"| set exit syscall\n"},
65+
{"type":"Text","value":" "},
66+
{"type":"NameFunction","value":"syscall"},
67+
{"type":"Text","value":" "},
68+
{"type":"CommentSingle","value":"# make syscall"}
69+
]

0 commit comments

Comments
 (0)