diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-03-14 22:42:22 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-03-14 22:42:22 +0900 |
| commit | 7435692fec7b82284eac236714931faee8b825d6 (patch) | |
| tree | 241995dc70f4a7e543bff2411e3dedd6300715df /src | |
| parent | f2c1b79720f7d9ccd22d288defc1804e77c10087 (diff) | |
| download | ducc-7435692fec7b82284eac236714931faee8b825d6.tar.gz ducc-7435692fec7b82284eac236714931faee8b825d6.tar.zst ducc-7435692fec7b82284eac236714931faee8b825d6.zip | |
feat: partially implement static_assert (parsing only)
Diffstat (limited to 'src')
| -rw-r--r-- | src/parse.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/parse.c b/src/parse.c index 494e4a2..f703f17 100644 --- a/src/parse.c +++ b/src/parse.c @@ -2607,8 +2607,26 @@ static AstNode* parse_return_stmt(Parser* p) { return ast_new_return_stmt(expr); } +// static_assert-declaration: +// 'static_assert' '(' constant-expr ( ',' string-literal )? ')' ';' +static AstNode* parse_static_assert_declaration(Parser* p) { + expect(p, TokenKind_keyword_static_assert); + expect(p, TokenKind_paren_l); + AstNode* predicate = parse_constant_expr(p); + Token* message = NULL; + if (consume_token_if(p, TokenKind_comma)) { + message = expect(p, TokenKind_literal_str); + } + // TODO: validate the assertion. + (void)predicate; + (void)message; + expect(p, TokenKind_paren_r); + expect(p, TokenKind_semicolon); + return NULL; +} + // external-declaration: -// TODO static_assert-declaration +// static_assert-declaration // TODO attribute-specifier-sequence ';' // TODO attribute-specifier-sequence function-definition-or-declaration-rest // function-definition-or-declaration-rest @@ -2617,6 +2635,10 @@ static AstNode* parse_return_stmt(Parser* p) { // declaration-specifiers init-declarator-list ';' // declaration-specifiers init-declarator-list compound-stmt static AstNode* parse_external_declaration(Parser* p) { + if (peek_token(p)->kind == TokenKind_keyword_static_assert) { + return parse_static_assert_declaration(p); + } + Type* ty = parse_declaration_specifiers(p); if (consume_token_if(p, TokenKind_semicolon)) { // Type declaration. |
