Fix docker
This commit is contained in:
143
src/vm/vm.cpp
143
src/vm/vm.cpp
@ -191,6 +191,7 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -198,6 +199,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator-",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -238,6 +244,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -245,6 +253,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator*",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -306,6 +319,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -313,6 +328,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator/",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -354,6 +374,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -361,6 +383,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator%",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -393,6 +420,7 @@ namespace Tesses::CrossLang {
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -400,6 +428,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeOne(ls,negfn,left);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator-",{}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,nullptr);
|
||||
@ -442,6 +475,7 @@ namespace Tesses::CrossLang {
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -449,6 +483,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeOne(ls,negfn,left);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator!",{}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc, !ToBool(left));
|
||||
@ -479,6 +518,7 @@ namespace Tesses::CrossLang {
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -486,6 +526,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeOne(ls,negfn,left);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator~",{}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -528,6 +573,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -535,6 +582,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator<",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -577,6 +629,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -584,6 +638,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator>",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -626,6 +685,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -633,6 +694,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator<=",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -675,6 +741,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -682,6 +750,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator>=",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -748,6 +821,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -757,7 +832,16 @@ namespace Tesses::CrossLang {
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
|
||||
}
|
||||
|
||||
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
auto res = dynDict->CallMethod(ls,"operator==",{right});
|
||||
if(!std::holds_alternative<std::nullptr_t>(res) && std::holds_alternative<Undefined>(res))
|
||||
{
|
||||
cse.back()->Push(gc,res);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(std::holds_alternative<THeapObjectHolder>(right))
|
||||
{
|
||||
cse.back()->Push(gc,obj == std::get<THeapObjectHolder>(right).obj);
|
||||
@ -824,6 +908,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -833,6 +919,16 @@ namespace Tesses::CrossLang {
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
|
||||
auto res = dynDict->CallMethod(ls,"operator!=",{right});
|
||||
if(!std::holds_alternative<std::nullptr_t>(res) && std::holds_alternative<Undefined>(res))
|
||||
{
|
||||
cse.back()->Push(gc,res);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(std::holds_alternative<THeapObjectHolder>(right))
|
||||
{
|
||||
cse.back()->Push(gc,obj != std::get<THeapObjectHolder>(right).obj);
|
||||
@ -866,6 +962,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -873,6 +971,12 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator<<",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -901,6 +1005,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -908,6 +1014,12 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator>>",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -936,6 +1048,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -943,6 +1057,12 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator|",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -971,6 +1091,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -978,6 +1100,12 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator^",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -1006,6 +1134,8 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -1013,6 +1143,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator&",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc,Undefined());
|
||||
@ -1130,6 +1265,7 @@ namespace Tesses::CrossLang {
|
||||
{
|
||||
auto obj = std::get<THeapObjectHolder>(left).obj;
|
||||
auto dict = dynamic_cast<TDictionary*>(obj);
|
||||
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
|
||||
if(dict != nullptr)
|
||||
{
|
||||
gc->BarrierBegin();
|
||||
@ -1137,6 +1273,11 @@ namespace Tesses::CrossLang {
|
||||
gc->BarrierEnd();
|
||||
return InvokeTwo(ls,fn,left,right);
|
||||
}
|
||||
else if(dynDict != nullptr)
|
||||
{
|
||||
cse.back()->Push(gc,dynDict->CallMethod(ls,"operator+",{right}));
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
cse.back()->Push(gc, Undefined());
|
||||
|
||||
Reference in New Issue
Block a user