5fe9d921f9fd8aeef76ed1c6ce764674664a5d8b
Rewrite globalVarDecl to properly handle extern/export/pub/threadlocal variables with type/align/linksection/addrspace bodies. Port the full Declaration extra data layout from upstream AstGen.zig:13883, including lib_name, type_body, and special bodies fields. Add extractVarDecl to decode all VarDecl node types (global, local, simple, aligned) and computeVarDeclId to select the correct Declaration.Flags.Id. Fix firstToken to scan backwards for modifier tokens (extern, export, pub, threadlocal, comptime) on var decl nodes, matching upstream Ast.zig:634-643. Test added: extern var. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
About
zig0 aspires to be an interpreter of zig 0.15.1 written in C.
This is written with help from LLM:
- Lexer:
- Datastructures 100% human.
- Helper functions 100% human.
- Lexing functions 50/50 human/bot.
- Parser:
- Datastructures 100% human.
- Helper functions 50/50.
- Parser functions 5/95 human/bot.
- AstGen: TBD.
Testing
Quick test:
zig build fmt test
Full test and static analysis with all supported compilers and valgrind (run before commit, takes a while):
zig build -Dvalgrind
Debugging tips
Test runs infinitely? Build the test program executable:
$ zig build test -Dno-exec
And then run it, capturing the stack trace:
gdb -batch \
-ex "python import threading; threading.Timer(1.0, lambda: gdb.post_event(lambda: gdb.execute('interrupt'))).start()" \
-ex run \
-ex "bt full" \
-ex quit \
zig-out/bin/test
You are welcome to replace -ex "bt full" with anything other of interest.
Languages
Zig
96.3%
C
2.7%
C++
0.6%
Python
0.1%