zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 1377fae4cd6e32fbd62704169dde59d86d104bb8 (tree)
parent 58702f9648e639b4655114b49e122a96fe011e91
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date:   Mon, 16 Feb 2026 16:18:20 +0000

astgen: fix InternPool.zig — parser fallthrough for struct/enum/union, add @compileLog, fix @"..." escape scanning

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Diffstat:
Mstage0/astgen.c | 46+++++++++++++++++++++++++++++++++++++++++++++-
Mstage0/astgen_test.zig | 2+-
Mstage0/parser.c | 4++--
3 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/stage0/astgen.c b/stage0/astgen.c @@ -1318,8 +1318,11 @@ static uint32_t identAsString(AstGenCtx* ag, uint32_t ident_token) { uint32_t content_start = start + 2; // skip @" uint32_t content_end = content_start; while ( - content_end < ag->tree->source_len && source[content_end] != '"') + content_end < ag->tree->source_len && source[content_end] != '"') { + if (source[content_end] == '\\') + content_end++; // skip escape character content_end++; + } // Check for escapes. bool has_escapes = false; for (uint32_t j = content_start; j < content_end; j++) { @@ -5474,6 +5477,29 @@ static uint32_t builtinCall( return rvalue(gz, rl, result, node); } // clang-format on + // @compileLog — AstGen.zig:9275-9286. + // clang-format off + if (name_len == 10 + && memcmp(source + name_start, "compileLog", 10) == 0) { + // clang-format on + AstData nd = tree->nodes.datas[node]; + uint32_t param_count + = (nd.lhs != 0 ? 1u : 0u) + (nd.rhs != 0 ? 1u : 0u); + ensureExtraCapacity(ag, 1 + param_count); + uint32_t payload_index = ag->extra_len; + ag->extra[ag->extra_len++] + = (uint32_t)((int32_t)node - (int32_t)gz->decl_node_index); + uint32_t args_index = ag->extra_len; + ag->extra_len += param_count; + if (nd.lhs != 0) + ag->extra[args_index++] = expr(gz, scope, nd.lhs); + if (nd.rhs != 0) + ag->extra[args_index++] = expr(gz, scope, nd.rhs); + uint32_t result + = addExtendedPayloadSmall(gz, (uint16_t)ZIR_EXT_COMPILE_LOG, + (uint16_t)param_count, payload_index); + return rvalue(gz, rl, result, node); + } // TODO: handle other 1-arg builtins. SET_ERROR(ag); @@ -5817,6 +5843,24 @@ static uint32_t builtinCallMultiArg(GenZir* gz, Scope* scope, ResultLoc rl, return rvalue(gz, rl, result, node); } // clang-format on + // @compileLog — AstGen.zig:9275-9286. + // clang-format off + if (name_len == 10 + && memcmp(source + name_start, "compileLog", 10) == 0) { + // clang-format on + ensureExtraCapacity(ag, 1 + param_count); + uint32_t payload_index = ag->extra_len; + ag->extra[ag->extra_len++] + = (uint32_t)((int32_t)node - (int32_t)gz->decl_node_index); + uint32_t args_index = ag->extra_len; + ag->extra_len += param_count; + for (uint32_t i = 0; i < param_count; i++) + ag->extra[args_index + i] = expr(gz, scope, params[i]); + uint32_t result + = addExtendedPayloadSmall(gz, (uint16_t)ZIR_EXT_COMPILE_LOG, + (uint16_t)param_count, payload_index); + return rvalue(gz, rl, result, node); + } // TODO: handle other multi-arg builtins. SET_ERROR(ag); diff --git a/stage0/astgen_test.zig b/stage0/astgen_test.zig @@ -1319,7 +1319,7 @@ const corpus_files = .{ "../src/Type.zig", "../src/translate_c.zig", "../src/Compilation.zig", - //"../src/InternPool.zig", + "../src/InternPool.zig", //"../src/Sema.zig", }; diff --git a/stage0/parser.c b/stage0/parser.c @@ -796,8 +796,8 @@ static AstNodeIndex expectStatement(Parser* p, bool allow_defer_var) { return expectIfStatement(p); case TOKEN_KEYWORD_ENUM: case TOKEN_KEYWORD_STRUCT: - case TOKEN_KEYWORD_UNION:; - fail(p, "unsupported statement keyword"); + case TOKEN_KEYWORD_UNION: + // Parse.zig:961-971: fall through to expression parsing. default:; }