Skip to content

Commit a2ff7b9

Browse files
committed
LLVMCodeBuilder: Do not recreate list pointers when lists are used
1 parent 66c81b0 commit a2ff7b9

File tree

1 file changed

+34
-10
lines changed

1 file changed

+34
-10
lines changed

src/engine/internal/llvm/llvmcodebuilder.cpp

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,15 +1267,20 @@ CompilerValue *LLVMCodeBuilder::addListContents(List *list)
12671267
{
12681268
LLVMInstruction ins(LLVMInstruction::Type::GetListContents);
12691269
ins.workList = list;
1270-
m_listPtrs[list] = LLVMListPtr();
1270+
1271+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1272+
m_listPtrs[list] = LLVMListPtr();
1273+
12711274
return createOp(ins, Compiler::StaticType::String);
12721275
}
12731276

12741277
CompilerValue *LLVMCodeBuilder::addListItem(List *list, CompilerValue *index)
12751278
{
12761279
LLVMInstruction ins(LLVMInstruction::Type::GetListItem);
12771280
ins.workList = list;
1278-
m_listPtrs[list] = LLVMListPtr();
1281+
1282+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1283+
m_listPtrs[list] = LLVMListPtr();
12791284

12801285
ins.args.push_back({ Compiler::StaticType::Number, static_cast<LLVMRegister *>(index) });
12811286

@@ -1291,23 +1296,32 @@ CompilerValue *LLVMCodeBuilder::addListItemIndex(List *list, CompilerValue *item
12911296
{
12921297
LLVMInstruction ins(LLVMInstruction::Type::GetListItemIndex);
12931298
ins.workList = list;
1294-
m_listPtrs[list] = LLVMListPtr();
1299+
1300+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1301+
m_listPtrs[list] = LLVMListPtr();
1302+
12951303
return createOp(ins, Compiler::StaticType::Number, Compiler::StaticType::Unknown, { item });
12961304
}
12971305

12981306
CompilerValue *LLVMCodeBuilder::addListContains(List *list, CompilerValue *item)
12991307
{
13001308
LLVMInstruction ins(LLVMInstruction::Type::ListContainsItem);
13011309
ins.workList = list;
1302-
m_listPtrs[list] = LLVMListPtr();
1310+
1311+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1312+
m_listPtrs[list] = LLVMListPtr();
1313+
13031314
return createOp(ins, Compiler::StaticType::Bool, Compiler::StaticType::Unknown, { item });
13041315
}
13051316

13061317
CompilerValue *LLVMCodeBuilder::addListSize(List *list)
13071318
{
13081319
LLVMInstruction ins(LLVMInstruction::Type::GetListSize);
13091320
ins.workList = list;
1310-
m_listPtrs[list] = LLVMListPtr();
1321+
1322+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1323+
m_listPtrs[list] = LLVMListPtr();
1324+
13111325
return createOp(ins, Compiler::StaticType::Number);
13121326
}
13131327

@@ -1518,40 +1532,50 @@ void LLVMCodeBuilder::createListClear(List *list)
15181532
{
15191533
LLVMInstruction ins(LLVMInstruction::Type::ClearList);
15201534
ins.workList = list;
1521-
m_listPtrs[list] = LLVMListPtr();
15221535
createOp(ins, Compiler::StaticType::Void);
1536+
1537+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1538+
m_listPtrs[list] = LLVMListPtr();
15231539
}
15241540

15251541
void LLVMCodeBuilder::createListRemove(List *list, CompilerValue *index)
15261542
{
15271543
LLVMInstruction ins(LLVMInstruction::Type::RemoveListItem);
15281544
ins.workList = list;
1529-
m_listPtrs[list] = LLVMListPtr();
15301545
createOp(ins, Compiler::StaticType::Void, Compiler::StaticType::Number, { index });
1546+
1547+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1548+
m_listPtrs[list] = LLVMListPtr();
15311549
}
15321550

15331551
void LLVMCodeBuilder::createListAppend(List *list, CompilerValue *item)
15341552
{
15351553
LLVMInstruction ins(LLVMInstruction::Type::AppendToList);
15361554
ins.workList = list;
1537-
m_listPtrs[list] = LLVMListPtr();
15381555
createOp(ins, Compiler::StaticType::Void, Compiler::StaticType::Unknown, { item });
1556+
1557+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1558+
m_listPtrs[list] = LLVMListPtr();
15391559
}
15401560

15411561
void LLVMCodeBuilder::createListInsert(List *list, CompilerValue *index, CompilerValue *item)
15421562
{
15431563
LLVMInstruction ins(LLVMInstruction::Type::InsertToList);
15441564
ins.workList = list;
1545-
m_listPtrs[list] = LLVMListPtr();
15461565
createOp(ins, Compiler::StaticType::Void, { Compiler::StaticType::Number, Compiler::StaticType::Unknown }, { index, item });
1566+
1567+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1568+
m_listPtrs[list] = LLVMListPtr();
15471569
}
15481570

15491571
void LLVMCodeBuilder::createListReplace(List *list, CompilerValue *index, CompilerValue *item)
15501572
{
15511573
LLVMInstruction ins(LLVMInstruction::Type::ListReplace);
15521574
ins.workList = list;
1553-
m_listPtrs[list] = LLVMListPtr();
15541575
createOp(ins, Compiler::StaticType::Void, { Compiler::StaticType::Number, Compiler::StaticType::Unknown }, { index, item });
1576+
1577+
if (m_listPtrs.find(list) == m_listPtrs.cend())
1578+
m_listPtrs[list] = LLVMListPtr();
15551579
}
15561580

15571581
void LLVMCodeBuilder::beginIfStatement(CompilerValue *cond)

0 commit comments

Comments
 (0)