Skip to content

Commit eed530b

Browse files
authored
JSInterp: fix switch instruction with condition inside it's branches (#149)
1 parent 663a0b5 commit eed530b

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

TestHScript.hx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,19 @@ class TestHScript extends TestCase {
125125
assertScript("var f:(x:Int)->(Int, Int)->Int = (x:Int) -> (y:Int, z:Int) -> x + y + z; f(3)(1, 2)", 6, null, true);
126126
assertScript("var a = 10; var b = 5; a - -b", 15);
127127
assertScript("var a = 10; var b = 5; a - b / 2", 7.5);
128-
assertScript("var a; a", null);
129-
assertScript("var a = 1, b = 5; a + b;", 6);
130-
assertScript("var a, b = 5; if (a == null) a = 2; a + b;", 7);
131-
assertScript("var a:Int; a", null, null, true);
132-
assertScript("var a:Int = 1, b:Int = 5; a + b;", 6, null, true);
133-
assertScript("var a:Int, b:Int = 5; if (a == null) a = 2; a + b;", 7, null, true);
128+
assertScript("var a; a", null);
129+
assertScript("var a = 1, b = 5; a + b;", 6);
130+
assertScript("var a, b = 5; if (a == null) a = 2; a + b;", 7);
131+
assertScript("var a:Int; a", null, null, true);
132+
assertScript("var a:Int = 1, b:Int = 5; a + b;", 6, null, true);
133+
assertScript("var a:Int, b:Int = 5; if (a == null) a = 2; a + b;", 7, null, true);
134134
assertScript("false && xxx", false);
135135
assertScript("true || xxx", true);
136136
assertScript("[for( x in arr ) switch( x ) { case 1: 55; case 3: 66; default: 0; }].join(':')",'55:0:66',{ arr : [1,2,3] });
137+
assertScript("switch( x ) { case 1: 55; case 3: 66; default: 0; }",66 ,{ x : 3 });
138+
assertScript("var a = 1; switch( b ) { default: a = 2; }; a", 2, { b : 2 });
139+
assertScript("var a = 1; switch( b ) { case 2: a = 100; default: a = 2; }; a", 100, { b : 2 });
140+
assertScript("var a = 3; switch( b ) { case 2: if (a == 1) { a = 100; } else { a = 99; }; default: a = 2; }; a", 99, { b : 2 });
137141
}
138142

139143
function testNullFieldAccess():Void {
@@ -256,4 +260,4 @@ class TestHScript extends TestCase {
256260
#end
257261
}
258262

259-
}
263+
}

hscript/JsInterp.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ class JsInterp extends Interp {
275275
case EIf(cond,e1,e2):
276276
return 'if( ${exprCond(cond)} ) ${exprJS(e1)}'+(e2 == null ? "" : 'else ${exprJS(e2)}');
277277
case ETernary(cond, e1, e2):
278-
return '(${exprCond(cond)} ? ${exprValue(e1)} : ${exprValue(e2)})';
278+
return '(${exprCond(cond)} ? ${exprValue(e1)} : ${e2 == null ? 'undefined' : exprValue(e2)})';
279279
case EWhile(cond, e):
280280
return 'while( ${exprValue(cond)} ) ${exprJS(e)}';
281281
case EFor(v, it, e):

0 commit comments

Comments
 (0)