Skip to content

Commit

Permalink
Really fixed arrays of dynarrays this time.
Browse files Browse the repository at this point in the history
  • Loading branch information
Doom2fan authored and madame-rachelle committed Jun 7, 2019
1 parent 08cda06 commit 4161ef7
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions src/scripting/backend/codegen.cpp
Expand Up @@ -7424,7 +7424,6 @@ ExpEmit FxArrayElement::Emit(VMFunctionBuilder *build)
{
bool ismeta = Array->ExprType == EFX_ClassMember && static_cast<FxClassMember*>(Array)->membervar->Flags & VARF_Meta;

arrayvar.Free(build);
start = ExpEmit(build, REGT_POINTER);
build->Emit(OP_LP, start.RegNum, arrayvar.RegNum, build->GetConstantInt(0));

Expand All @@ -7444,18 +7443,18 @@ ExpEmit FxArrayElement::Emit(VMFunctionBuilder *build)
arraymemberbase->membervar = origmembervar;
arraymemberbase->AddressRequested = origaddrreq;
Array->ValueType = origvaluetype;

arrayvar.Free(build);
}
else if (Array->ExprType == EFX_ArrayElement && Array->isStaticArray())
{
bool ismeta = Array->ExprType == EFX_ClassMember && static_cast<FxClassMember*>(Array)->membervar->Flags & VARF_Meta;
bound = ExpEmit(build, REGT_INT);
build->Emit(OP_LW, bound.RegNum, arrayvar.RegNum, build->GetConstantInt(myoffsetof(FArray, Count)));

arrayvar.Free(build);
start = ExpEmit(build, REGT_POINTER);
build->Emit(OP_LP, start.RegNum, arrayvar.RegNum, build->GetConstantInt(0));

bound = ExpEmit(build, REGT_INT);
build->Emit(OP_LW, bound.RegNum, arrayvar.RegNum, build->GetConstantInt(sizeof(void*)));

nestedarray = true;
}
else start = arrayvar;
Expand Down Expand Up @@ -7513,7 +7512,7 @@ ExpEmit FxArrayElement::Emit(VMFunctionBuilder *build)
else
{
ExpEmit indexv(index->Emit(build));
if (SizeAddr != ~0u)
if (SizeAddr != ~0u || nestedarray)
{
build->Emit(OP_BOUND_R, indexv.RegNum, bound.RegNum);
bound.Free(build);
Expand Down

0 comments on commit 4161ef7

Please sign in to comment.