fix: clj_ prefix for identifiers + try/catch/finally fixes

- #9: Add clj_ prefix to all mangled identifiers to avoid Nim
  case-insensitive name conflicts (parseQueryString ≡ parse_query_string)
- #11: Fix finally block - discard expression results
- #11: Fix catch handler - use original name for scope tracking
- Fix loop handler - use original name for addToScope
- Update emitter tests for clj_ prefix
This commit is contained in:
2026-05-12 00:48:50 +03:00
parent e36bf4e362
commit fb8928e830
2 changed files with 26 additions and 16 deletions
+7 -7
View File
@@ -43,13 +43,13 @@ suite "Emitter - Basic Values":
registerGlobal("x")
let v = cljSymbol("x")
let code = emitExpr(v)
check code == "x"
check code == "clj_x"
test "emit mangled symbol":
registerGlobal("my-var")
let v = cljSymbol("my-var")
let code = emitExpr(v)
check code == "my_var"
check code == "clj_my_var"
test "emit vector":
let v = cljVector(@[cljInt(1), cljInt(2)])
@@ -70,12 +70,12 @@ suite "Emitter - Special Forms":
test "emit def":
let v = read("(def x 42)")
let code = emitExpr(v)
check "let x" in code
check "let clj_x" in code
test "emit defn":
let v = read("(defn square [x] (* x x))")
let code = emitExpr(v)
check "proc square" in code
check "proc clj_square" in code
test "emit if":
let v = read("(if true 1 2)")
@@ -161,14 +161,14 @@ suite "Emitter - Program":
test "emitProgram with defs and main":
let forms = readAll("(def x 42) (println x)")
let code = emitProgram(forms)
check "let x" in code
check "let clj_x" in code
check "when isMainModule" in code
test "emitProgram multiple defs":
let forms = readAll("(def a 1) (def b 2)")
let code = emitProgram(forms)
check "let a" in code
check "let b" in code
check "let clj_a" in code
check "let clj_b" in code
suite "Emitter - Map Literals":
test "emit empty map":