Skip to content

Commit 21b14f3

Browse files
committed
enh(cpp) add C++26 keywords, #embed, and compiler-builtin types
1 parent 224d7fe commit 21b14f3

6 files changed

+24
-6
lines changed

CHANGES.md

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ Core Grammars:
6060
- fix(yaml) - Fixed wrong escaping behavior in single quoted strings [guuido]
6161
- enh(nim) - Add `concept` and `defer` to list of Nim keywords [Jake Leahy]
6262
- fix(cpp) - Exclude keywords from highlighting as function calls [Eisenwave]
63+
- enh(cpp) add C++26 keywords, `#embed`, and compiler-builtin types [Eisenwave]
6364

6465
New Grammars:
6566

src/languages/cpp.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export default function(hljs) {
9999
begin: /#\s*[a-z]+\b/,
100100
end: /$/,
101101
keywords: { keyword:
102-
'if else elif endif define undef warning error line '
102+
'if else elif embed endif define undef warning error line '
103103
+ 'pragma _Pragma ifdef ifndef include' },
104104
contains: [
105105
{
@@ -151,6 +151,7 @@ export default function(hljs) {
151151
'constexpr',
152152
'constinit',
153153
'continue',
154+
'contract_assert',
154155
'decltype',
155156
'default',
156157
'delete',
@@ -181,8 +182,10 @@ export default function(hljs) {
181182
'or',
182183
'or_eq',
183184
'override',
185+
'pre',
184186
'private',
185187
'protected',
188+
'post',
186189
'public',
187190
'reflexpr',
188191
'register',
@@ -212,7 +215,9 @@ export default function(hljs) {
212215
'volatile',
213216
'while',
214217
'xor',
215-
'xor_eq'
218+
'xor_eq',
219+
'_Atomic',
220+
'_BitInt'
216221
];
217222

218223
// https://en.cppreference.com/w/cpp/keyword

test/markup/cpp/function-declarations.expect.txt

+4
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@
2323
<span class="hljs-function"><span class="hljs-keyword">explicit</span> <span class="hljs-title">A</span><span class="hljs-params">()</span>: a(<span class="hljs-number">10</span>) {</span>}
2424

2525
<span class="hljs-function"><span class="hljs-keyword">extern</span> <span class="hljs-type">void</span> <span class="hljs-title">f</span><span class="hljs-params">(<span class="hljs-type">int</span>)</span>, <span class="hljs-title">g</span><span class="hljs-params">(<span class="hljs-type">char</span>)</span></span>;
26+
27+
<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">throwing</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> <span class="hljs-keyword">noexcept</span>(<span class="hljs-literal">false</span>)</span>;
28+
<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">deleted</span><span class="hljs-params">()</span> </span>= <span class="hljs-keyword">delete</span>(<span class="hljs-string">&quot;reason&quot;</span>);
29+
<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">contracts</span><span class="hljs-params">(<span class="hljs-type">int</span> x)</span> <span class="hljs-keyword">pre</span>(x &gt; <span class="hljs-number">10</span>) <span class="hljs-keyword">post</span>(r : r != <span class="hljs-number">0</span>)</span>;

test/markup/cpp/function-declarations.txt

+4
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@ void A(): a(10) {}
2323
explicit A(): a(10) {}
2424

2525
extern void f(int), g(char);
26+
27+
void throwing(int x) noexcept(false);
28+
void deleted() = delete("reason");
29+
void contracts(int x) pre(x > 10) post(r : r != 0);

test/markup/cpp/function-like-keywords.expect.txt

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
<span class="hljs-keyword">for</span> (;;) {}
99

10-
<span class="hljs-function"><span class="hljs-type">void</span> <span class="hljs-title">f</span><span class="hljs-params">()</span> </span>= <span class="hljs-keyword">delete</span>(<span class="hljs-string">&quot;reason&quot;</span>);
11-
1210
<span class="hljs-keyword">static_assert</span>(<span class="hljs-literal">true</span>);
11+
<span class="hljs-keyword">contract_assert</span>(<span class="hljs-literal">false</span>);
12+
13+
<span class="hljs-keyword">_BitInt</span>(<span class="hljs-number">64</span>) x;
14+
<span class="hljs-keyword">_Atomic</span>(<span class="hljs-type">int</span>) y;

test/markup/cpp/function-like-keywords.txt

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ while (ch) {}
77

88
for (;;) {}
99

10-
void f() = delete("reason");
11-
1210
static_assert(true);
11+
contract_assert(false);
12+
13+
_BitInt(64) x;
14+
_Atomic(int) y;

0 commit comments

Comments
 (0)