@@ -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
12741277CompilerValue *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
12981306CompilerValue *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
13061317CompilerValue *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
15251541void 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
15331551void 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
15411561void 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
15491571void 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
15571581void LLVMCodeBuilder::beginIfStatement (CompilerValue *cond)
0 commit comments