a5b0e07d50b19d300c81f7b3a8c8e50be457ba18
Replace linear scan of all string_bytes with a string_table that only contains explicitly registered strings (via identAsString and strLitAsString). This prevents false deduplication against multiline string content that upstream's hash table would never match. Also handle embedded null bytes in strLitAsString: when decoded string contains \x00, skip dedup and don't add trailing null, matching upstream AstGen.zig:11560. Fix c_include extended instruction small field to 0xAAAA (undefined) matching upstream addExtendedPayload. Passes corpus tests for test_all.zig, build.zig, tokenizer_test.zig. 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%