Skip to content

Commit 5e1e37c

Browse files
authored
enh(llvm) Improve number support, add char.escape (#3471)
- Numbers are allowed to have a leading + sign - Hex floats can have a format specified after the 'x' - Strings cannot escape quotes with backslashes, so a '\"' ends a string - Add support for `\00` style `char.escape` inside strings
1 parent 8d38e23 commit 5e1e37c

File tree

7 files changed

+51
-8
lines changed

7 files changed

+51
-8
lines changed

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ Grammars:
77
- fix(angelscript) incomplete int8, int16, int32, int64 highlighting [Melissa Geels][]
88
- enh(ts) modify TypeScript-specific keywords and types list [anydonym][]
99
- fix(brainfuck) fix highlighting of initial ++/-- [Christina Hanson][]
10+
- fix(llvm) escaping in strings and number formats [Flakebi][]
1011

1112
[Wojciech Kania]: https://github.com/wkania
1213
[Melissa Geels]: https://github.com/codecat
1314
[anydonym]: https://github.com/anydonym
1415
[Christina Hanson]: https://github.com/LyricLy
16+
[Flakebi]: https://github.com/Flakebi
1517

1618
## Version 11.4.0
1719

src/languages/llvm.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ export default function(hljs) {
2828
const NUMBER = {
2929
className: 'number',
3030
variants: [
31-
{ begin: /0[xX][a-fA-F0-9]+/ },
32-
{ begin: /-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/ }
31+
{ begin: /[su]?0[xX][KMLHR]?[a-fA-F0-9]+/ },
32+
{ begin: /[-+]?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/ }
3333
],
3434
relevance: 0
3535
};
@@ -109,12 +109,15 @@ export default function(hljs) {
109109
// another language than an actual comment
110110
hljs.COMMENT(/;\s*$/, null, { relevance: 0 }),
111111
hljs.COMMENT(/;/, /$/),
112-
hljs.QUOTE_STRING_MODE,
113112
{
114113
className: 'string',
115-
variants: [
116-
// Double-quoted string
117-
{ begin: /"/, end: /[^\\]"/ },
114+
begin: /"/,
115+
end: /"/,
116+
contains: [
117+
{
118+
className: 'char.escape',
119+
match: /\\\d\d/
120+
}
118121
]
119122
},
120123
FUNCTION,

test/markup/llvm/default.expect.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
<span class="hljs-variable">%struct._IO_marker</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">type</span> { <span class="hljs-variable">%struct._IO_marker</span>*<span class="hljs-punctuation">,</span> <span class="hljs-variable">%struct._IO_FILE</span>*<span class="hljs-punctuation">,</span> <span class="hljs-type">i32</span> }
77
<span class="hljs-variable">%struct.what</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">type</span> { <span class="hljs-type">i8</span><span class="hljs-punctuation">,</span> <span class="hljs-type">i16</span> }
88

9-
<span class="hljs-title">@.str</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">unnamed_addr</span> <span class="hljs-keyword">constant</span> [<span class="hljs-number">6</span> <span class="hljs-keyword">x</span> <span class="hljs-type">i8</span>] <span class="hljs-keyword">c</span><span class="hljs-string">&quot;foo()\00&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">1</span>
9+
<span class="hljs-title">@.str</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">unnamed_addr</span> <span class="hljs-keyword">constant</span> [<span class="hljs-number">6</span> <span class="hljs-keyword">x</span> <span class="hljs-type">i8</span>] <span class="hljs-keyword">c</span><span class="hljs-string">&quot;foo()<span class="hljs-char escape_">\00</span>&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">1</span>
1010
<span class="hljs-title">@e_long</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">common</span> <span class="hljs-keyword">global</span> <span class="hljs-type">i64</span> <span class="hljs-number">0</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">8</span>
1111
<span class="hljs-title">@g_double</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">common</span> <span class="hljs-keyword">global</span> <span class="hljs-keyword">double</span> <span class="hljs-number">0.000000e+00</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">8</span>
12-
<span class="hljs-title">@.str.1</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">unnamed_addr</span> <span class="hljs-keyword">constant</span> [<span class="hljs-number">7</span> <span class="hljs-keyword">x</span> <span class="hljs-type">i8</span>] <span class="hljs-keyword">c</span><span class="hljs-string">&quot;oooooh\00&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">1</span>
12+
<span class="hljs-title">@.str.1</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">private</span> <span class="hljs-keyword">unnamed_addr</span> <span class="hljs-keyword">constant</span> [<span class="hljs-number">7</span> <span class="hljs-keyword">x</span> <span class="hljs-type">i8</span>] <span class="hljs-keyword">c</span><span class="hljs-string">&quot;oooooh<span class="hljs-char escape_">\00</span>&quot;</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">1</span>
1313
<span class="hljs-title">@func_ptr</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">common</span> <span class="hljs-keyword">global</span> <span class="hljs-type">i32</span> (...)* <span class="hljs-keyword">null</span><span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">8</span>
1414
<span class="hljs-title">@stderr</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">external</span> <span class="hljs-keyword">global</span> <span class="hljs-variable">%struct._IO_FILE</span>*<span class="hljs-punctuation">,</span> <span class="hljs-keyword">align</span> <span class="hljs-number">8</span>
1515

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<span class="hljs-keyword">define</span> <span class="hljs-type">i32</span> <span class="hljs-title">@signed_int</span>() {
2+
<span class="hljs-keyword">ret</span> <span class="hljs-type">i32</span> <span class="hljs-number">s0x12a</span>
3+
}
4+
5+
<span class="hljs-keyword">define</span> float <span class="hljs-title">@signed_float</span>() {
6+
<span class="hljs-keyword">ret</span> float <span class="hljs-number">+1.0</span>
7+
}
8+
9+
<span class="hljs-keyword">define</span> float <span class="hljs-title">@float_format</span>() {
10+
<span class="hljs-keyword">ret</span> float <span class="hljs-number">0xK12a</span>
11+
}

test/markup/llvm/numbers.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
define i32 @signed_int() {
2+
ret i32 s0x12a
3+
}
4+
5+
define float @signed_float() {
6+
ret float +1.0
7+
}
8+
9+
define float @float_format() {
10+
ret float 0xK12a
11+
}

test/markup/llvm/string.expect.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<span class="hljs-comment">; Backslashes do not escape quotes, this is a legal string</span>
2+
<span class="hljs-keyword">define</span> void @<span class="hljs-string">&quot;C:\&quot;</span>() {
3+
<span class="hljs-keyword">ret</span> void
4+
}
5+
6+
<span class="hljs-keyword">define</span> void @<span class="hljs-string">&quot;escape_code_<span class="hljs-char escape_">\01</span>23<span class="hljs-char escape_">\04</span>end&quot;</span>() {
7+
<span class="hljs-keyword">ret</span> void
8+
}

test/markup/llvm/string.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
; Backslashes do not escape quotes, this is a legal string
2+
define void @"C:\"() {
3+
ret void
4+
}
5+
6+
define void @"escape_code_\0123\04end"() {
7+
ret void
8+
}

0 commit comments

Comments
 (0)