isStaticArray ? atoi(m->INT_LIT()->toString().c_str()) : -1\r
);\r
}\r
+ if (ctx->genericInstantiation() != nullptr)\r
+ {\r
+ for (auto g : ctx->genericInstantiation()->type())\r
+ {\r
+ result.genericInstantiation.push_back(getType(g));\r
+ }\r
+ }\r
return result;\r
}\r
Variable getVariable(TocParser::VarContext * ctx)\r
Function result;\r
result.name = ctx->funcName()->NAME()->toString();\r
result.returnType = getType(ctx->type());\r
+ if (ctx->genericDecl() != nullptr)\r
+ {\r
+ for (auto t : ctx->genericDecl()->typeName())\r
+ {\r
+ result.genericTypeNames.push_back(t->getText());\r
+ }\r
+ }\r
+\r
if (!ctx->parameter()->var().empty())\r
{\r
for (auto p : ctx->parameter()->var())\r
result.parameters.push_back(getVariable(p));\r
}\r
- result.body = getBody(ctx->body(), parent);\r
+\r
+ if (ctx->body() != nullptr)\r
+ {\r
+ result.body = getBody(ctx->body(), parent);\r
+ result.defined = true;\r
+ }\r
+ else\r
+ {\r
+ result.defined = false;\r
+ }\r
return result;\r
}\r
Struct getStruct(TocParser::StructDeclContext * ctx, std::shared_ptr<Context> parent)\r
{\r
Struct result;\r
result.name = ctx->structName()->NAME()->toString();\r
+ if (ctx->genericDecl() != nullptr)\r
+ {\r
+ for (auto t : ctx->genericDecl()->typeName())\r
+ {\r
+ result.genericTypeNames.push_back(t->getText());\r
+ }\r
+ }\r
+\r
for (auto m : ctx->structMember())\r
{\r
if (m->structVar() != nullptr)\r
}\r
if (d->funcDecl() != nullptr)\r
{\r
- result.functions.push_back(getFunction(d->funcDecl()->func(), result.ctx));\r
+ result.ctx->functions.push_back(getFunction(d->funcDecl()->func(), result.ctx));\r
}\r
if (d->structDecl() != nullptr)\r
{\r
- result.structs.push_back(getStruct(d->structDecl(), result.ctx));\r
+ result.ctx->structs.push_back(getStruct(d->structDecl(), result.ctx));\r
}\r
if (d->namespaceDecl() != nullptr)\r
{\r
}\r
if (d->funcDecl() != nullptr)\r
{\r
- result.functions.push_back(getFunction(d->funcDecl()->func(), result.ctx));\r
+ result.ctx->functions.push_back(getFunction(d->funcDecl()->func(), result.ctx));\r
}\r
if (d->structDecl() != nullptr)\r
{\r
- result.structs.push_back(getStruct(d->structDecl(), result.ctx));\r
+ result.ctx->structs.push_back(getStruct(d->structDecl(), result.ctx));\r
}\r
if (d->namespaceDecl() != nullptr)\r
{\r
for (auto n : ctx->namespaceSpecifier())\r
result._func.namespacePrefixes.push_back(n->typeName()->getText());\r
result._func.functionName = ctx->funcName()->NAME()->toString();\r
+ if (ctx->genericInstantiation() != nullptr)\r
+ {\r
+ for (auto g : ctx->genericInstantiation()->type())\r
+ {\r
+ result._func.genericInstantiation.push_back(getType(g));\r
+ }\r
+ }\r
for (auto e : ctx->expr())\r
result._func.arguments.push_back(getExpr(e));\r
return result;\r
result.type = ExprType::Method;\r
result._method.expr = std::make_unique<Expr>(getExpr(ctx->expr(0)));\r
result._method.methodName = ctx->funcName()->NAME()->toString();\r
+ if (ctx->genericInstantiation() != nullptr)\r
+ {\r
+ for (auto g : ctx->genericInstantiation()->type())\r
+ {\r
+ result._method.genericInstantiation.push_back(getType(g));\r
+ }\r
+ }\r
for (int i = 1; i < ctx->expr().size(); i++)\r
result._method.arguments.push_back(getExpr(ctx->expr(i)));\r
return result;\r
result._lit.type = LitType::Decimal;\r
result._lit._decimal = atof(ctx->literal()->DECIMAL_LIT()->toString().c_str());\r
}\r
- else if (ctx->literal()->STRING_LIT() != nullptr)\r
+ else if (ctx->literal()->StringLit() != nullptr)\r
{\r
result._lit.type = LitType::String;\r
- result._lit._string = ctx->literal()->STRING_LIT()->toString();\r
+ result._lit._string = ctx->literal()->StringLit()->toString();\r
}\r
else if (ctx->literal()->BOOL_LIT() != nullptr)\r
{\r
result.type = ExprType::Dot;\r
result._dot.expr = std::make_unique<Expr>(getExpr(ctx->expr()));\r
result._dot.identifier = ctx->varName()->getText();\r
+ result._dot.isPointer = ctx->arrow() != nullptr;\r
return result;\r
}\r
Expr getExpr(TocParser::PrefixOpExprContext * ctx)\r