LLVMValueRef gen_mod_assign(struct node *ast) { LLVMValueRef result; result = gen_mod(ast); check_store(result, lvalue(ast->one)); return result; }
static bool special_case_operator(compile_t* c, ast_t* ast, LLVMValueRef *value, bool short_circuit, bool native128) { AST_GET_CHILDREN(ast, positional, named, postfix); AST_GET_CHILDREN(postfix, left, method); ast_t* right = ast_child(positional); const char* name = ast_name(method); *value = NULL; if(name == c->str_add) *value = gen_add(c, left, right); else if(name == c->str_sub) *value = gen_sub(c, left, right); else if((name == c->str_mul) && native128) *value = gen_mul(c, left, right); else if((name == c->str_div) && native128) *value = gen_div(c, left, right); else if((name == c->str_mod) && native128) *value = gen_mod(c, left, right); else if(name == c->str_neg) *value = gen_neg(c, left); else if((name == c->str_and) && short_circuit) *value = gen_and_sc(c, left, right); else if((name == c->str_or) && short_circuit) *value = gen_or_sc(c, left, right); else if((name == c->str_and) && !short_circuit) *value = gen_and(c, left, right); else if((name == c->str_or) && !short_circuit) *value = gen_or(c, left, right); else if(name == c->str_xor) *value = gen_xor(c, left, right); else if(name == c->str_not) *value = gen_not(c, left); else if(name == c->str_shl) *value = gen_shl(c, left, right); else if(name == c->str_shr) *value = gen_shr(c, left, right); else if(name == c->str_eq) *value = gen_eq(c, left, right); else if(name == c->str_ne) *value = gen_ne(c, left, right); else if(name == c->str_lt) *value = gen_lt(c, left, right); else if(name == c->str_le) *value = gen_le(c, left, right); else if(name == c->str_ge) *value = gen_ge(c, left, right); else if(name == c->str_gt) *value = gen_gt(c, left, right); else return false; return true; }