Skip to content

Commit 8f88c6f

Browse files
committed
Fix C++ with trigraphs
1 parent 3b7f21e commit 8f88c6f

File tree

3 files changed

+8
-3
lines changed

3 files changed

+8
-3
lines changed

TestHScript.hx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,13 @@ class TestHScript extends TestCase {
147147
assertScript("pt2null?.pt?.x ?? 5", 5, vars);
148148
assertScript("pt2?.pt ?? 5", pt, vars);
149149
assertScript("pt2?.pt?.x ?? 5", 10, vars);
150+
#if cpp
151+
assertScript('valuenull ??${"="} 5; valuenull', 5, vars);
152+
assertScript('value ??${"="} 5; value', 10, vars);
153+
#else
150154
assertScript("valuenull ??= 5; valuenull", 5, vars);
151155
assertScript("value ??= 5; value", 10, vars);
156+
#end
152157
}
153158

154159
function testIsOperator():Void {

hscript/Interp.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ class Interp {
122122
assignOp("*=",function(v1:Float,v2:Float) return v1 * v2);
123123
assignOp("/=",function(v1:Float,v2:Float) return v1 / v2);
124124
assignOp("%=",function(v1:Float,v2:Float) return v1 % v2);
125-
assignOp("??=",function(v1:Dynamic,v2:Dynamic) if ( v1 == null ) return v1 = v2 else return v1);
125+
assignOp(#if cpp "??"+"=" #else "??=" #end,function(v1:Dynamic,v2:Dynamic) if ( v1 == null ) return v1 = v2 else return v1);
126126
assignOp("&=",function(v1,v2) return v1 & v2);
127127
assignOp("|=",function(v1,v2) return v1 | v2);
128128
assignOp("^=",function(v1,v2) return v1 ^ v2);

hscript/Parser.hx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class Parser {
128128
["..."],
129129
["&&"],
130130
["||"],
131-
["=","+=","-=","*=","/=","%=","??=","<<=",">>=",">>>=","|=","&=","^=","=>"],
131+
["=","+=","-=","*=","/=","%=",#if cpp "??"+"=" #else "??=" #end,"<<=",">>=",">>>=","|=","&=","^=","=>"],
132132
["->"]
133133
];
134134
#if haxe3
@@ -1524,7 +1524,7 @@ class Parser {
15241524
else if ( char == "?".code ) {
15251525
char = readChar();
15261526
if ( char == "=".code )
1527-
return TOp("??=");
1527+
return TOp(#if cpp "??"+"=" #else "??=" #end);
15281528
return TQuestionQuestion;
15291529
}
15301530
this.char = char;

0 commit comments

Comments
 (0)