static bool special_case_call(compile_t* c, ast_t* ast, LLVMValueRef* value) { AST_GET_CHILDREN(ast, positional, named, postfix); if((ast_id(postfix) != TK_FUNREF) || (ast_id(named) != TK_NONE)) return false; AST_GET_CHILDREN(postfix, receiver, method); ast_t* receiver_type = ast_type(receiver); if(ast_id(receiver_type) != TK_NOMINAL) return false; AST_GET_CHILDREN(receiver_type, package, id); if(ast_name(package) != c->str_builtin) return false; const char* name = ast_name(id); if(name == c->str_Bool) return special_case_operator(c, ast, value, true, true); if((name == c->str_I8) || (name == c->str_I16) || (name == c->str_I32) || (name == c->str_I64) || (name == c->str_ILong) || (name == c->str_ISize) || (name == c->str_U8) || (name == c->str_U16) || (name == c->str_U32) || (name == c->str_U64) || (name == c->str_ULong) || (name == c->str_USize) || (name == c->str_F32) || (name == c->str_F64) ) { return special_case_operator(c, ast, value, false, true); } if((name == c->str_I128) || (name == c->str_U128)) { bool native128; os_is_target(OS_NATIVE128_NAME, c->opt->release, &native128); return special_case_operator(c, ast, value, false, native128); } if(name == c->str_Platform) { *value = special_case_platform(c, ast); return true; } return false; }
static bool special_case_call(compile_t* c, ast_t* ast, LLVMValueRef* value) { AST_GET_CHILDREN(ast, postfix, positional, named, question); if((ast_id(postfix) != TK_FUNREF) || (ast_id(named) != TK_NONE)) return false; AST_GET_CHILDREN(postfix, receiver, method); ast_t* receiver_type = deferred_reify(c->frame->reify, ast_type(receiver), c->opt); const char* name = NULL; if(ast_id(receiver_type) == TK_NOMINAL) { AST_GET_CHILDREN(receiver_type, package, id); if(ast_name(package) == c->str_builtin) name = ast_name(id); } ast_free_unattached(receiver_type); if(name == NULL) return false; if(name == c->str_Bool) return special_case_operator(c, ast, value, true, true); if((name == c->str_I8) || (name == c->str_I16) || (name == c->str_I32) || (name == c->str_I64) || (name == c->str_ILong) || (name == c->str_ISize) || (name == c->str_U8) || (name == c->str_U16) || (name == c->str_U32) || (name == c->str_U64) || (name == c->str_ULong) || (name == c->str_USize) || (name == c->str_F32) || (name == c->str_F64) ) { return special_case_operator(c, ast, value, false, true); } if((name == c->str_I128) || (name == c->str_U128)) { bool native128 = target_is_native128(c->opt->triple); return special_case_operator(c, ast, value, false, native128); } if(name == c->str_Platform) { *value = special_case_platform(c, ast); return true; } return false; }