+ if (sy->ops[sy->ops_count-1].paren == 'f') {
+ /* was a function call */
+ ast_block *params;
+ ast_expression *fun;
+ ast_call *call;
+ sy->ops_count--;
+ if (sy->out_count < 2) {
+ parseerror(parser, "internal error: function call needs function and parameter list...");
+ return false;
+ }
+ sy->out_count -= 2;
+ fun = sy->out[sy->out_count+0].out;
+ params = sy->out[sy->out_count+1].block;
+ if (!params) {
+ parseerror(parser, "function call needs a parameter-list as 2nd operand");
+ return false;
+ }
+ if (fun->expression.vtype != TYPE_FUNCTION) {
+ parseerror(parser, "not a function");
+ return false;
+ }
+ call = ast_call_new(sy->ops[sy->ops_count].ctx, fun);
+ if (!call) {
+ parseerror(parser, "out of memory");
+ return false;
+ }
+ MEM_VECTOR_MOVE(params, exprs, call, params);
+ ast_delete(params);
+ sy->out[sy->out_count++] = syexp(call->expression.node.context, (ast_expression*)call);
+ break;
+ }