??= op
This commit is contained in:
+2
-1
@@ -162,7 +162,7 @@ class Interp {
|
||||
binops.set("&&", function(e1, e2) return me.expr(e1) == true && me.expr(e2) == true);
|
||||
binops.set("=", assign);
|
||||
binops.set("??", function(e1, e2) {
|
||||
var expr1:Dynamic = me.expr(e1); // I dont think most people have the new haxe syntax so im being safe
|
||||
var expr1:Dynamic = me.expr(e1);
|
||||
return expr1 == null ? me.expr(e2) : expr1;
|
||||
});
|
||||
binops.set("...", function(e1, e2) return new
|
||||
@@ -183,6 +183,7 @@ class Interp {
|
||||
assignOp(">>=", function(v1, v2) return v1 >> v2);
|
||||
assignOp(">>>=", function(v1, v2) return v1 >>> v2);
|
||||
assignOp("is", function(v1, v2) return Std.isOfType(v1, v2));
|
||||
assignOp("??=", function(v1, v2) return v1 == null ? v2 : v1);
|
||||
}
|
||||
|
||||
function setVar(name:String, v:Dynamic) {
|
||||
|
||||
+14
-6
@@ -124,8 +124,8 @@ class Parser {
|
||||
["..."],
|
||||
["&&"],
|
||||
["||"],
|
||||
["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","|=","&=","^=","=>"],
|
||||
["->"],
|
||||
["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","|=","&=","^=","=>","??="],
|
||||
["->", "??"],
|
||||
["is"]
|
||||
];
|
||||
#if haxe3
|
||||
@@ -1749,10 +1749,18 @@ class Parser {
|
||||
case "'".code, '"'.code: return TConst( CString(readString(char)) );
|
||||
case "?".code:
|
||||
char = readChar();
|
||||
if( char == '?'.code )
|
||||
return TOp("??");
|
||||
else if ( char == '.'.code )
|
||||
return TQuestionDot;
|
||||
switch (char) {
|
||||
case '?'.code:
|
||||
var orp = readPos;
|
||||
if (readChar() == '='.code)
|
||||
return TOp("??=");
|
||||
|
||||
this.readPos = orp;
|
||||
return TOp("??");
|
||||
case '.'.code:
|
||||
return TQuestionDot;
|
||||
}
|
||||
|
||||
this.char = char;
|
||||
return TQuestion;
|
||||
case ":".code: return TDoubleDot;
|
||||
|
||||
Reference in New Issue
Block a user