bool expr_call(pass_opt_t* opt, ast_t** astp) { ast_t* ast = *astp; if(!literal_call(ast, opt)) return false; // Type already set by literal handler. Check for infertype, which is a // marker for typechecking default arguments. ast_t* type = ast_type(ast); if((type != NULL) && (ast_id(type) != TK_INFERTYPE)) return true; AST_GET_CHILDREN(ast, positional, namedargs, lhs); switch(ast_id(lhs)) { case TK_NEWREF: case TK_NEWBEREF: case TK_BEREF: case TK_FUNREF: return method_call(opt, ast); case TK_NEWAPP: case TK_BEAPP: case TK_FUNAPP: return partial_application(opt, astp); default: {} } return insert_apply(opt, astp); }
bool expr_call(pass_opt_t* opt, ast_t** astp) { ast_t* ast = *astp; if(!literal_call(ast, opt)) return false; // Type already set by literal handler if(ast_type(ast) != NULL) return true; AST_GET_CHILDREN(ast, positional, namedargs, lhs); switch(ast_id(lhs)) { case TK_NEWREF: case TK_NEWBEREF: case TK_BEREF: case TK_FUNREF: return method_call(opt, ast); case TK_NEWAPP: case TK_BEAPP: case TK_FUNAPP: return partial_application(opt, astp); default: {} } return insert_apply(opt, astp); }