From 5c9437d3110d9396aad6822475eeeda82358aa37 Mon Sep 17 00:00:00 2001 From: lviguier Date: Thu, 7 Aug 2025 11:52:51 +0200 Subject: [PATCH] JSInterp: fix switch with condition inside branches --- TestHScript.hx | 18 +++++++++++------- hscript/JsInterp.hx | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/TestHScript.hx b/TestHScript.hx index 52bfef2a..6b1749f6 100644 --- a/TestHScript.hx +++ b/TestHScript.hx @@ -125,15 +125,19 @@ class TestHScript extends TestCase { assertScript("var f:(x:Int)->(Int, Int)->Int = (x:Int) -> (y:Int, z:Int) -> x + y + z; f(3)(1, 2)", 6, null, true); assertScript("var a = 10; var b = 5; a - -b", 15); assertScript("var a = 10; var b = 5; a - b / 2", 7.5); - assertScript("var a; a", null); - assertScript("var a = 1, b = 5; a + b;", 6); - assertScript("var a, b = 5; if (a == null) a = 2; a + b;", 7); - assertScript("var a:Int; a", null, null, true); - assertScript("var a:Int = 1, b:Int = 5; a + b;", 6, null, true); - assertScript("var a:Int, b:Int = 5; if (a == null) a = 2; a + b;", 7, null, true); + assertScript("var a; a", null); + assertScript("var a = 1, b = 5; a + b;", 6); + assertScript("var a, b = 5; if (a == null) a = 2; a + b;", 7); + assertScript("var a:Int; a", null, null, true); + assertScript("var a:Int = 1, b:Int = 5; a + b;", 6, null, true); + assertScript("var a:Int, b:Int = 5; if (a == null) a = 2; a + b;", 7, null, true); assertScript("false && xxx", false); assertScript("true || xxx", true); assertScript("[for( x in arr ) switch( x ) { case 1: 55; case 3: 66; default: 0; }].join(':')",'55:0:66',{ arr : [1,2,3] }); + assertScript("switch( x ) { case 1: 55; case 3: 66; default: 0; }",66 ,{ x : 3 }); + assertScript("var a = 1; switch( b ) { default: a = 2; }; a", 2, { b : 2 }); + assertScript("var a = 1; switch( b ) { case 2: a = 100; default: a = 2; }; a", 100, { b : 2 }); + assertScript("var a = 3; switch( b ) { case 2: if (a == 1) { a = 100; } else { a = 99; }; default: a = 2; }; a", 99, { b : 2 }); } function testNullFieldAccess():Void { @@ -256,4 +260,4 @@ class TestHScript extends TestCase { #end } -} +} diff --git a/hscript/JsInterp.hx b/hscript/JsInterp.hx index aa50e862..bdd83fed 100644 --- a/hscript/JsInterp.hx +++ b/hscript/JsInterp.hx @@ -275,7 +275,7 @@ class JsInterp extends Interp { case EIf(cond,e1,e2): return 'if( ${exprCond(cond)} ) ${exprJS(e1)}'+(e2 == null ? "" : 'else ${exprJS(e2)}'); case ETernary(cond, e1, e2): - return '(${exprCond(cond)} ? ${exprValue(e1)} : ${exprValue(e2)})'; + return '(${exprCond(cond)} ? ${exprValue(e1)} : ${e2 == null ? 'undefined' : exprValue(e2)})'; case EWhile(cond, e): return 'while( ${exprValue(cond)} ) ${exprJS(e)}'; case EFor(v, it, e):