diff --git a/hscript/Interp.hx b/hscript/Interp.hx index 62dde74..3d305e2 100644 --- a/hscript/Interp.hx +++ b/hscript/Interp.hx @@ -110,6 +110,7 @@ class Interp { assignOp("<<=",function(v1,v2) return v1 << v2); assignOp(">>=",function(v1,v2) return v1 >> v2); assignOp(">>>=",function(v1,v2) return v1 >>> v2); + assignOp("??=",function(v1,v2) return v1 ?? v2); } function setVar( name : String, v : Dynamic ) { diff --git a/hscript/Parser.hx b/hscript/Parser.hx index 08e1d2e..3695ef8 100644 --- a/hscript/Parser.hx +++ b/hscript/Parser.hx @@ -118,7 +118,7 @@ class Parser { ["&&"], ["||"], ["??"], - ["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","|=","&=","^=","=>"], + ["=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","??=","|=","&=","^=","=>"], ["->"], ["in","is"] ]; @@ -1570,8 +1570,12 @@ class Parser { char = readChar(); if( char == ".".code ) return TQuestionDot; - if( char == "?".code ) + if( char == "?".code ) { + char = readChar(); + if ( char == "=".code ) + return TOp("??="); return TOp("??"); + } this.char = char; return TQuestion; case ":".code: return TDoubleDot;