-TypeInfo typeExpr(const Program & p, const std::vector<string> & globalNamespace, Expr e)\r
+TypeInfo typeExpr(const Program & p, const std::vector<std::string> & globalNamespace, std::shared_ptr<Context> globalCtx, Expr e)\r
- TypeInfo tiCaller = typeExpr(p, globalNamespace, *e._method.expr);\r
+ TypeInfo tiCaller = typeExpr(p, globalNamespace, globalCtx, *e._method.expr);\r
auto m = findStructMethod(p, e._method.methodName, tiCaller);\r
if (!m.has_value())\r
throw "Unknown method";\r
auto m = findStructMethod(p, e._method.methodName, tiCaller);\r
if (!m.has_value())\r
throw "Unknown method";\r
- result = typeExpr(p, globalNamespace, *e._paren.expr);\r
+ result = typeExpr(p, globalNamespace, globalCtx, *e._paren.expr);\r
- typeExpr(p, globalNamespace, *e._dot.expr), e._dot.identifier);\r
+ typeExpr(p, globalNamespace, globalCtx, *e._dot.expr), e._dot.identifier);\r
if (!sm.has_value())\r
throw "Unknown struct member";\r
result = typeType(p, sm.value().type);\r
break;\r
}\r
case ExprType::PrefixOp:\r
if (!sm.has_value())\r
throw "Unknown struct member";\r
result = typeType(p, sm.value().type);\r
break;\r
}\r
case ExprType::PrefixOp:\r
- result = typeExpr(p, globalNamespace, *e._prefixOp.expr);\r
+ result = typeExpr(p, globalNamespace, globalCtx, *e._prefixOp.expr);\r
- result = typeExpr(p, globalNamespace, *e._postfixOp.expr);\r
+ result = typeExpr(p, globalNamespace, globalCtx, *e._postfixOp.expr);\r
- result = typeExpr(p, globalNamespace, *e._binaryOp.lexpr);\r
+ result = typeExpr(p, globalNamespace, globalCtx, *e._binaryOp.lexpr);\r
- result = typeExpr(p, globalNamespace, *e._ternaryOp.rexprTrue);\r
+ result = typeExpr(p, globalNamespace, globalCtx, *e._ternaryOp.rexprTrue);\r
- TypeInfo ti = typeExpr(p, globalNamespace, *e._brackets.lexpr);\r
+ TypeInfo ti = typeExpr(p, globalNamespace, globalCtx, *e._brackets.lexpr);\r
namespacePrefixes.insert(namespacePrefixes.end(),\r
e._identifier.namespacePrefixes.begin(),\r
e._identifier.namespacePrefixes.end());\r
namespacePrefixes.insert(namespacePrefixes.end(),\r
e._identifier.namespacePrefixes.begin(),\r
e._identifier.namespacePrefixes.end());\r
if (!v.has_value())\r
throw "Unknown variable";\r
result = typeType(p, v.value().type);\r
if (!v.has_value())\r
throw "Unknown variable";\r
result = typeType(p, v.value().type);\r