Skip to content

Commit 59b3316

Browse files
authored
Add is operator (HaxeFoundation#129)
1 parent b92fcae commit 59b3316

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

TestHScript.hx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,38 @@ class TestHScript extends TestCase {
131131
assertScript("pt2?.pt?.x", 10, vars);
132132
}
133133

134+
function testIsOperator():Void {
135+
var vars = {
136+
String: String,
137+
Bool: Bool,
138+
Int: Int,
139+
Float: Float,
140+
Dynamic: Dynamic
141+
}
142+
assertScript("10 is Int", true, vars);
143+
assertScript("10.0 is Int", true, vars);
144+
assertScript("10.1 is Int", false, vars);
145+
assertScript("10 is Float", true, vars);
146+
assertScript("10.0 is Float", true, vars);
147+
assertScript("10.1 is Float", true, vars);
148+
assertScript("10 is String", false, vars);
149+
assertScript('"hscript" is String', true, vars);
150+
assertScript('"" is String', true, vars);
151+
assertScript('true is Bool', true, vars);
152+
assertScript('false is Bool', true, vars);
153+
assertScript('0 is Bool', false, vars);
154+
assertScript('1 is Bool', false, vars);
155+
assertScript('1 is Bool', false, vars);
156+
assertScript("10 is Dynamic", true, vars);
157+
assertScript("10.1 is Dynamic", true, vars);
158+
assertScript('"hscript" is Dynamic', true, vars);
159+
assertScript('null is Int', false, vars);
160+
assertScript('null is Float', false, vars);
161+
assertScript('null is String', false, vars);
162+
assertScript('null is Bool', false, vars);
163+
assertScript('null is Dynamic', false, vars);
164+
}
165+
134166
function testMap():Void {
135167
var objKey = { ok:true };
136168
var vars = {

hscript/Interp.hx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class Interp {
116116
binops.set("&&",function(e1,e2) return me.expr(e1) == true && me.expr(e2) == true);
117117
binops.set("=",assign);
118118
binops.set("...",function(e1,e2) return new #if (haxe_211 || haxe3) IntIterator #else IntIter #end(me.expr(e1),me.expr(e2)));
119+
binops.set("is",function(e1,e2) return #if (haxe_ver >= 4.2) Std.isOfType #else Std.is #end (me.expr(e1), me.expr(e2)));
119120
assignOp("+=",function(v1:Dynamic,v2:Dynamic) return v1 + v2);
120121
assignOp("-=",function(v1:Float,v2:Float) return v1 - v2);
121122
assignOp("*=",function(v1:Float,v2:Float) return v1 * v2);

hscript/Parser.hx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,8 @@ class Parser {
804804
return parseExprNext(mk(EUnop(op,false,e1),pmin(e1)));
805805
}
806806
return makeBinop(op,e1,parseExpr());
807+
case TId(op) if ( op == 'is' ):
808+
return makeBinop(op,e1,parseExpr());
807809
case TDot:
808810
var field = getIdent();
809811
return parseExprNext(mk(EField(e1,field),pmin(e1)));

0 commit comments

Comments
 (0)