| 1245 | } |
| 1246 | |
| 1247 | Expression * ast_rpipe ( yyscan_t scanner, Expression * arg, Expression * fncall, const LineInfo & locAt ) { |
| 1248 | if ( fncall->rtti_isCallLikeExpr() ) { |
| 1249 | auto pCall = (ExprLooksLikeCall *) fncall; |
| 1250 | pCall->arguments.insert(pCall->arguments.begin(),arg); |
| 1251 | return fncall; |
| 1252 | } else if ( fncall->rtti_isVar() ) { |
| 1253 | auto pVar = (ExprVar *) fncall; |
| 1254 | auto pCall = yyextra->g_Program->makeCall(pVar->at,pVar->name); |
| 1255 | // GC-managed: no manual delete needed |
| 1256 | pCall->arguments.insert(pCall->arguments.begin(),arg); |
| 1257 | return pCall; |
| 1258 | } else if (fncall->rtti_isNamedCall()) { |
| 1259 | auto pCall = (ExprNamedCall*)fncall; |
| 1260 | pCall->nonNamedArguments.insert(pCall->nonNamedArguments.begin(), arg); |
| 1261 | return fncall; |
| 1262 | } else if (fncall->rtti_isField() ) { |
| 1263 | auto pField = (ExprField*)fncall; |
| 1264 | pField->value = ast_rpipe(scanner, arg, pField->value, locAt); |
| 1265 | return fncall; |
| 1266 | } else if (fncall->rtti_isSafeField() ) { |
| 1267 | auto pField = (ExprSafeField*)fncall; |
| 1268 | pField->value = ast_rpipe(scanner, arg, pField->value, locAt); |
| 1269 | return fncall; |
| 1270 | } else { |
| 1271 | das_yyerror(scanner,"can only rpipe into a function call",locAt,CompilationError::cant_expression); |
| 1272 | return fncall; |
| 1273 | } |
| 1274 | } |
| 1275 | |
| 1276 | Expression * ast_makeGenerator ( yyscan_t, TypeDecl * typeDecl, vector<CaptureEntry> * clist, Expression * subexpr, const LineInfo & locAt, const LineInfo & clistAt ) { |
| 1277 | auto gen = new ExprMakeGenerator(locAt, subexpr); |