Motiejus Jakštys 1c1407adb8 astgen: fix double rvalue wrapping for block expressions in exprRl
The exprRl function was wrapping blockExprExpr's return value in an
extra rvalue() call, but blockExprExpr already applies rvalue internally
for labeled blocks when need_result_rvalue=true. The upstream expr()
function at AstGen.zig:991 returns blockExpr's result directly without
extra rvalue wrapping. This could produce duplicate coercion/store
instructions for non-trivial result locations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 22:12:43 +00:00
2026-02-13 11:37:57 +02:00
fmt
2025-01-08 19:04:40 +01:00
2026-02-10 10:03:44 +00:00
2026-02-12 14:08:49 +02:00
2026-02-13 16:26:51 +02:00
2026-02-11 18:14:32 +00:00
2026-02-10 11:35:41 +00:00
2026-02-12 14:06:15 +02:00
2026-02-12 16:13:56 +02:00
2026-02-12 16:13:56 +02:00
2026-02-10 11:35:41 +00:00
2025-07-01 19:48:18 +00:00

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.

Description
Replacing zig1.wasm with a C program (see stage0/).
Readme MIT 388 MiB
Languages
Zig 96.3%
C 2.7%
C++ 0.6%
Python 0.1%