Fix assembler hopefully

This commit is contained in:
2025-09-26 23:32:09 -05:00
parent a38451ce69
commit 91622089f7
5 changed files with 32 additions and 19 deletions

View File

@@ -1427,7 +1427,7 @@ class GC {
~GC(); ~GC();
}; };
std::string GetObjectTypeString(TObject obj);
std::string ToString(GC* gc, TObject obj); std::string ToString(GC* gc, TObject obj);
class GCList : public THeapObject class GCList : public THeapObject

View File

@@ -192,6 +192,7 @@ namespace Tesses::CrossLang {
while(!IsSym("}",false)) while(!IsSym("}",false))
{ {
auto name = ReadIdent(); auto name = ReadIdent();
if(name == "add") if(name == "add")
{ {
instrs.push_back(std::make_shared<SimpleChunkInstruction>(ADD)); instrs.push_back(std::make_shared<SimpleChunkInstruction>(ADD));
@@ -541,6 +542,9 @@ namespace Tesses::CrossLang {
auto lblName = lbl_prefix + "_" + ReadIdent(); auto lblName = lbl_prefix + "_" + ReadIdent();
instrs.push_back(std::make_shared<LabelChunkInstruction>(lblName)); instrs.push_back(std::make_shared<LabelChunkInstruction>(lblName));
} }
else {
throw std::runtime_error("NOT IMPLEMENTED: " + name);
}
} }
} }
void EnsureSymbol(std::string txt) void EnsureSymbol(std::string txt)
@@ -1048,7 +1052,8 @@ namespace Tesses::CrossLang {
} }
if(chk) if(chk)
{ {
chunks[chunkId].second.push_back(std::make_shared<ClosureInstruction>(PushChunk(chk->data),chk->scoped)); auto item = std::make_shared<ClosureInstruction>(PushChunk(chk->data),chk->scoped);
chunks[chunkId].second.push_back(item);
} }
if(reso) if(reso)
{ {

View File

@@ -622,6 +622,9 @@ namespace Tesses::CrossLang {
} }
break; break;
default:
printf("ILL: %i\n", (int)code[i-1]);
break;
} }
buffer.push_back('\n'); buffer.push_back('\n');

View File

@@ -946,25 +946,23 @@ namespace Tesses::CrossLang
} }
return nullptr; return nullptr;
} }
std::string GetObjectTypeString(TObject _obj)
static TObject TypeOf(GCList& ls, std::vector<TObject> args)
{ {
if(args.size() < 1) return "Undefined"; if(std::holds_alternative<std::regex>(_obj)) return "Regex";
if(std::holds_alternative<std::regex>(args[0])) return "Regex"; if(std::holds_alternative<Undefined>(_obj)) return "Undefined";
if(std::holds_alternative<Undefined>(args[0])) return "Undefined"; if(std::holds_alternative<std::nullptr_t>(_obj)) return "Null";
if(std::holds_alternative<std::nullptr_t>(args[0])) return "Null"; if(std::holds_alternative<bool>(_obj)) return "Boolean";
if(std::holds_alternative<bool>(args[0])) return "Boolean"; if(std::holds_alternative<int64_t>(_obj)) return "Long";
if(std::holds_alternative<int64_t>(args[0])) return "Long"; if(std::holds_alternative<double>(_obj)) return "Double";
if(std::holds_alternative<double>(args[0])) return "Double"; if(std::holds_alternative<char>(_obj)) return "Char";
if(std::holds_alternative<char>(args[0])) return "Char"; if(std::holds_alternative<MethodInvoker>(_obj)) return "MethodInvoker";
if(std::holds_alternative<MethodInvoker>(args[0])) return "MethodInvoker"; if(std::holds_alternative<std::string>(_obj)) return "String";
if(std::holds_alternative<std::string>(args[0])) return "String";
if(std::holds_alternative<Tesses::Framework::Filesystem::VFSPath>(args[0])) return "Path"; if(std::holds_alternative<Tesses::Framework::Filesystem::VFSPath>(_obj)) return "Path";
if(std::holds_alternative<TDateTime>(args[0])) return "DateTime"; if(std::holds_alternative<TDateTime>(_obj)) return "DateTime";
if(std::holds_alternative<THeapObjectHolder>(args[0])) if(std::holds_alternative<THeapObjectHolder>(_obj))
{ {
auto obj = std::get<THeapObjectHolder>(args[0]).obj; auto obj = std::get<THeapObjectHolder>(_obj).obj;
auto dict = dynamic_cast<TDictionary*>(obj); auto dict = dynamic_cast<TDictionary*>(obj);
auto dynDict = dynamic_cast<TDynamicDictionary*>(obj); auto dynDict = dynamic_cast<TDynamicDictionary*>(obj);
@@ -1052,6 +1050,12 @@ namespace Tesses::CrossLang
return "Object"; return "Object";
} }
static TObject TypeOf(GCList& ls, std::vector<TObject> args)
{
if(args.size() < 1) return "Undefined";
return GetObjectTypeString(args[0]);
}
TObject ByteArray(GCList& ls, std::vector<TObject> args) TObject ByteArray(GCList& ls, std::vector<TObject> args)
{ {
auto res= TByteArray::Create(ls); auto res= TByteArray::Create(ls);

View File

@@ -6192,7 +6192,8 @@ namespace Tesses::CrossLang {
} }
else else
{ {
throw VMException("[DECLAREVARIABLE] Can't pop string.");
throw VMException("[DECLAREVARIABLE] Can't pop string, got type " + GetObjectTypeString(key) + " = " + ToString(gc,key) + ".");
} }
} }
return false; return false;