mirror of
https://onedev.site.tesses.net/crosslang
synced 2026-02-09 01:25:45 +00:00
Fix classes and add instance info
This commit is contained in:
9
.vscode/settings.json
vendored
9
.vscode/settings.json
vendored
@@ -75,7 +75,14 @@
|
|||||||
"thread": "cpp",
|
"thread": "cpp",
|
||||||
"bitset": "cpp",
|
"bitset": "cpp",
|
||||||
"regex": "cpp",
|
"regex": "cpp",
|
||||||
"cstdbool": "cpp"
|
"cstdbool": "cpp",
|
||||||
|
"complex": "cpp",
|
||||||
|
"set": "cpp",
|
||||||
|
"unordered_set": "cpp",
|
||||||
|
"future": "cpp",
|
||||||
|
"queue": "cpp",
|
||||||
|
"stack": "cpp",
|
||||||
|
"stdfloat": "cpp"
|
||||||
},
|
},
|
||||||
"clangd.fallbackFlags": [
|
"clangd.fallbackFlags": [
|
||||||
"-Iinclude"
|
"-Iinclude"
|
||||||
|
|||||||
@@ -223,7 +223,7 @@ namespace Tesses::CrossLang
|
|||||||
|
|
||||||
}
|
}
|
||||||
this->EnsureSymbol(">");
|
this->EnsureSymbol(">");
|
||||||
if(tagName != "if" && tagName != "true" && tagName != "false" && tagName != "for" && tagName != "while" && tagName != "do" && tagName != "each" && tagName != "null")
|
if(tagName != "if" && tagName != "true" && tagName != "false" && tagName != "for" && tagName != "while" && tagName != "do" && tagName != "each" && tagName != "null" && tagName != "return")
|
||||||
{
|
{
|
||||||
std::string myVal = "</";
|
std::string myVal = "</";
|
||||||
myVal += tagName;
|
myVal += tagName;
|
||||||
@@ -363,6 +363,13 @@ namespace Tesses::CrossLang
|
|||||||
nodes.push_back(AdvancedSyntaxNode::Create(ScopeNode,false,_nodes));
|
nodes.push_back(AdvancedSyntaxNode::Create(ScopeNode,false,_nodes));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
else if(tagName == "return")
|
||||||
|
{
|
||||||
|
EnsureSymbol(">");
|
||||||
|
std::vector<SyntaxNode> _nodes;
|
||||||
|
parseFn(_nodes,"return");
|
||||||
|
nodes.push_back(AdvancedSyntaxNode::Create(ScopeNode,false,_nodes));
|
||||||
|
}
|
||||||
else if(tagName == "while")
|
else if(tagName == "while")
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -448,6 +455,7 @@ namespace Tesses::CrossLang
|
|||||||
|
|
||||||
nodes.push_back(AdvancedSyntaxNode::Create(EachStatement,false,{item,list,body}));
|
nodes.push_back(AdvancedSyntaxNode::Create(EachStatement,false,{item,list,body}));
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::string s = "<";
|
std::string s = "<";
|
||||||
@@ -1476,6 +1484,7 @@ namespace Tesses::CrossLang
|
|||||||
EnsureSymbol(":");
|
EnsureSymbol(":");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IsIdentifier("return"))
|
if(IsIdentifier("return"))
|
||||||
{
|
{
|
||||||
SyntaxNode v = Undefined();
|
SyntaxNode v = Undefined();
|
||||||
@@ -1486,6 +1495,22 @@ namespace Tesses::CrossLang
|
|||||||
}
|
}
|
||||||
return AdvancedSyntaxNode::Create(ReturnStatement,false,{v});
|
return AdvancedSyntaxNode::Create(ReturnStatement,false,{v});
|
||||||
}
|
}
|
||||||
|
if(IsSymbol("<",false) && this->i+1 < this->tokens.size() && this->tokens[this->i+1].type == LexTokenType::Identifier && this->tokens[this->i+1].text == "return")
|
||||||
|
{
|
||||||
|
this->i++;
|
||||||
|
uint32_t htmlId = NewId();
|
||||||
|
std::string compHtml = "__compGenHtml";
|
||||||
|
compHtml.append(std::to_string(htmlId));
|
||||||
|
std::vector<SyntaxNode> syntaxNode = {
|
||||||
|
compHtml
|
||||||
|
};
|
||||||
|
ParseHtml(syntaxNode,compHtml);
|
||||||
|
|
||||||
|
auto thytoken = AdvancedSyntaxNode::Create(HtmlRootExpression,true,syntaxNode);
|
||||||
|
|
||||||
|
return AdvancedSyntaxNode::Create(ReturnStatement,false,{thytoken});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if(IsIdentifier("yield"))
|
if(IsIdentifier("yield"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -48,6 +48,33 @@ namespace Tesses::CrossLang
|
|||||||
ls.GetGC()->BarrierEnd();
|
ls.GetGC()->BarrierEnd();
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
static TList* ClassInstanceToList(GCList& ls, TClassObject* co)
|
||||||
|
{
|
||||||
|
TList* list=TList::Create(ls);
|
||||||
|
ls.GetGC()->BarrierBegin();
|
||||||
|
for(auto& item : co->entries)
|
||||||
|
{
|
||||||
|
if(item.modifier == TClassModifier::Public)
|
||||||
|
{
|
||||||
|
list->Add(TDictionary::Create(ls, {
|
||||||
|
TDItem(
|
||||||
|
"Name", item.name
|
||||||
|
),
|
||||||
|
TDItem(
|
||||||
|
"IsFunction", !item.canSet
|
||||||
|
),
|
||||||
|
TDItem(
|
||||||
|
"Owner", item.owner
|
||||||
|
),
|
||||||
|
TDItem(
|
||||||
|
"Value", item.value
|
||||||
|
)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ls.GetGC()->BarrierEnd();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
TObject GetClassInfo(GCList& ls,TFile* f, uint32_t index)
|
TObject GetClassInfo(GCList& ls,TFile* f, uint32_t index)
|
||||||
{
|
{
|
||||||
return TDictionary::Create(ls,{
|
return TDictionary::Create(ls,{
|
||||||
@@ -233,6 +260,24 @@ namespace Tesses::CrossLang
|
|||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
cls->DeclareFunction(gc, "GetInstanceInfo", "Get the instance specific info, including current values", {}, [](GCList& ls, std::vector<TObject> args)->TObject {
|
||||||
|
TClassObject* co;
|
||||||
|
if(GetArgumentHeap(args, 0, co))
|
||||||
|
{
|
||||||
|
return TDictionary::Create(ls,
|
||||||
|
{
|
||||||
|
TDItem("Name", co->name),
|
||||||
|
TDItem("File", co->file),
|
||||||
|
TDItem("ClassIndex", (int64_t)co->classIndex),
|
||||||
|
TDItem("InheritList", VectorOfStringToList(ls, co->inherit_tree)),
|
||||||
|
TDItem("Entries", ClassInstanceToList(ls,co))
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
});
|
||||||
|
|
||||||
gc->BarrierEnd();
|
gc->BarrierEnd();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ namespace Tesses::CrossLang
|
|||||||
{
|
{
|
||||||
obj->inherit_tree.push_back(JoinPeriod(clsCur->inherits));
|
obj->inherit_tree.push_back(JoinPeriod(clsCur->inherits));
|
||||||
size_t idx;
|
size_t idx;
|
||||||
if(rEnv->TryFindClass(clsCur->name,idx))
|
if(rEnv->TryFindClass(clsCur->inherits,idx))
|
||||||
{
|
{
|
||||||
auto file = rEnv->classes[idx].first;
|
auto file = rEnv->classes[idx].first;
|
||||||
clsCur = &rEnv->classes[idx].first->classes.at(rEnv->classes[idx].second);
|
clsCur = &rEnv->classes[idx].first->classes.at(rEnv->classes[idx].second);
|
||||||
|
|||||||
Reference in New Issue
Block a user