From a5a57e3d8ba03f94923c5fc0d4d830331c01aaed Mon Sep 17 00:00:00 2001 From: Selfhosting Dev Date: Sat, 20 Sep 2025 01:55:45 +0900 Subject: [PATCH] macro(if normalize): add return-if golden; llvm: extend PHI hygiene smoke to if-return and type_is cases --- apps/tests/macro_golden_if_return.nyash | 4 +++ .../test/golden/macro/if_return.expanded.json | 10 ++++++ .../macro/if_return_user_macro_golden.sh | 32 +++++++++++++++++++ .../test/smoke/llvm/ir_phi_hygiene_ifcases.sh | 3 +- 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 apps/tests/macro_golden_if_return.nyash create mode 100644 tools/test/golden/macro/if_return.expanded.json create mode 100644 tools/test/golden/macro/if_return_user_macro_golden.sh diff --git a/apps/tests/macro_golden_if_return.nyash b/apps/tests/macro_golden_if_return.nyash new file mode 100644 index 00000000..1c02ba45 --- /dev/null +++ b/apps/tests/macro_golden_if_return.nyash @@ -0,0 +1,4 @@ +function main() { + return if (1 < 2) { 10 } else { 20 } +} + diff --git a/tools/test/golden/macro/if_return.expanded.json b/tools/test/golden/macro/if_return.expanded.json new file mode 100644 index 00000000..16f1f98b --- /dev/null +++ b/tools/test/golden/macro/if_return.expanded.json @@ -0,0 +1,10 @@ +{"kind":"Program","statements":[ + {"kind":"FunctionDeclaration","name":"main","params":[],"body":[ + {"kind":"If","condition":{"kind":"BinaryOp","op":"<","left":{"kind":"Literal","value":{"type":"int","value":1}},"right":{"kind":"Literal","value":{"type":"int","value":2}}},"then":[ + {"kind":"Return","value":{"kind":"Literal","value":{"type":"int","value":10}}} + ],"else":[ + {"kind":"Return","value":{"kind":"Literal","value":{"type":"int","value":20}}} + ]} + ],"static":false,"override":false} +]} + diff --git a/tools/test/golden/macro/if_return_user_macro_golden.sh b/tools/test/golden/macro/if_return_user_macro_golden.sh new file mode 100644 index 00000000..383f845a --- /dev/null +++ b/tools/test/golden/macro/if_return_user_macro_golden.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -euo pipefail + +root=$(cd "$(dirname "$0")"/../../../.. && pwd) +bin="$root/target/release/nyash" +src="apps/tests/macro_golden_if_return.nyash" +golden="$root/tools/test/golden/macro/if_return.expanded.json" + +if [ ! -x "$bin" ]; then + echo "nyash binary not found at $bin; build first (cargo build --release)" >&2 + exit 1 +fi + +export NYASH_MACRO_ENABLE=1 +export NYASH_MACRO_PATHS="apps/macros/examples/if_match_normalize_macro.nyash" + +normalize_json() { + python3 -c 'import sys,json; print(json.dumps(json.loads(sys.stdin.read()), sort_keys=True, separators=(",",":")))' +} + +out_raw=$("$bin" --dump-expanded-ast-json "$src") +out_norm=$(printf '%s' "$out_raw" | normalize_json) +gold_norm=$(normalize_json < "$golden") + +if [ "$out_norm" != "$gold_norm" ]; then + echo "Golden mismatch (if-return normalization)" >&2 + diff -u <(echo "$out_norm") <(echo "$gold_norm") || true + exit 2 +fi + +echo "[OK] golden if-return normalization matched" + diff --git a/tools/test/smoke/llvm/ir_phi_hygiene_ifcases.sh b/tools/test/smoke/llvm/ir_phi_hygiene_ifcases.sh index 3ded18b3..fa7cc9ad 100644 --- a/tools/test/smoke/llvm/ir_phi_hygiene_ifcases.sh +++ b/tools/test/smoke/llvm/ir_phi_hygiene_ifcases.sh @@ -42,10 +42,11 @@ check_case() { check_case "apps/tests/macro_golden_if_assign.nyash" check_case "apps/tests/macro_golden_if_print.nyash" +check_case "apps/tests/macro_golden_if_return.nyash" +check_case "apps/tests/macro_golden_type_is_basic.nyash" if [ "$fails" -ne 0 ]; then exit 2 fi echo "[OK] LLVM PHI hygiene for If-cases passed" exit 0 -