Skip to content

Commit 8bdee02

Browse files
authored
[HXSL] Enable ability to write to arrays. (#1129)
1 parent 20fa2de commit 8bdee02

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

hxsl/Checker.hx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,9 @@ class Checker {
338338
case TSwiz(e, _):
339339
checkWrite(e);
340340
return;
341+
case TArray(e, _):
342+
checkWrite(e);
343+
return;
341344
default:
342345
}
343346
error("This expression cannot be assigned", e.p);

hxsl/Dce.hx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ class Dce {
149149
writeTo.pop();
150150
if( isAffected.indexOf(v) < 0 )
151151
isAffected.push(v);
152+
case TBinop(OpAssign | OpAssignOp(_), { e : TArray({ e: TVar(v) }, i) }, e):
153+
var v = get(v);
154+
writeTo.push(v);
155+
check(i, writeTo, isAffected);
156+
check(e, writeTo, isAffected);
157+
writeTo.pop();
158+
if ( isAffected.indexOf(v) < 0 )
159+
isAffected.push(v);
152160
case TBlock(el):
153161
var noWrite = [];
154162
for( i in 0...el.length )
@@ -224,7 +232,7 @@ class Dce {
224232
count++;
225233
}
226234
return { e : TBlock(out), p : e.p, t : e.t };
227-
case TVarDecl(v,_) | TBinop(OpAssign | OpAssignOp(_), { e : (TVar(v) | TSwiz( { e : TVar(v) }, _)) }, _) if( !get(v).used ):
235+
case TVarDecl(v,_) | TBinop(OpAssign | OpAssignOp(_), { e : (TVar(v) | TSwiz( { e : TVar(v) }, _) | TArray( { e : TVar(v) }, _)) }, _) if( !get(v).used ):
228236
return { e : TConst(CNull), t : e.t, p : e.p };
229237
case TCall({ e : TGlobal(ChannelRead) }, [_, uv, { e : TConst(CInt(cid)) }]):
230238
var c = channelVars[cid];

0 commit comments

Comments
 (0)