- if (ctx->accessExpr() != nullptr) {\r
- // TODO: access chain\r
- for (auto sub : ctx->accessExpr()->accessSubExpr()) {\r
- if (sub->accessMember() != nullptr) {\r
+ if (ctx->accessExpr() != nullptr)\r
+ {\r
+ auto firstSub = ctx->accessExpr()->accessSubExpr(0);\r
+ if (firstSub->accessMember() != nullptr)\r
+ {\r
+ result.type = ExprType::Dot;\r
+ result._dot.expr = std::make_unique<Expr>(getExpr(ctx->accessExpr()->nonAccessExpr()));\r
+ result._dot.ident.name = firstSub->accessMember()->identifierExpr()->varName()->NAME()->toString();\r
+ }\r
+ else\r
+ {\r
+ result.type = ExprType::Brackets;\r
+ result._brackets.lexpr = std::make_unique<Expr>(getExpr(ctx->accessExpr()->nonAccessExpr()));\r
+ result._brackets.rexpr = std::make_unique<Expr>(getExpr(firstSub->accessBrackets()->expr()));\r
+ }\r
+ for (int i = 1; i < ctx->accessExpr()->accessSubExpr().size(); i++)\r
+ {\r
+ Expr tmp = result;\r
+ auto sub = ctx->accessExpr()->accessSubExpr(i);\r
+ if (sub->accessMember() != nullptr)\r
+ {\r