CodeBlock* VariableEntry::codeGen(){ CodeBlock* var_block = new CodeBlock(); if(initVal() != NULL){ var_block->append(initVal()->codeGen()); ICode::ICodeType store_type = ICode::ICodeType::STI; ICode get_addr; if(varKind() == VariableEntry::VarKind::GLOBAL_VAR){ ICode::ICodeType mov_type = ICode::ICodeType::MOVI; get_addr = ICode(mov_type,new Value(offSet(),Type::TypeTag::INT),&mem_register_); } else { ICode::ICodeType add_type = ICode::ICodeType::ADD; get_addr = ICode(add_type,&MemoryMgr::basePointerRegister(),new Value(offSet(),Type::TypeTag::INT),&mem_register_); } if(type()->tag() == Type::TypeTag::BOOL){ CodeBlock* true_block = new CodeBlock(); ICode store_true_val(store_type,new Value(1,Type::TypeTag::UINT),&mem_register_); ICode jmp_end(ICode::ICodeType::JMP,endLabel()); true_block->setStartLabel(trueLabel()); true_block->append(get_addr); true_block->append(store_true_val); true_block->append(jmp_end); CodeBlock* false_block = new CodeBlock(); ICode store_false_val(store_type,new Value(0,Type::TypeTag::UINT),&mem_register_); false_block->setStartLabel(falseLabel()); false_block->append(get_addr); false_block->append(store_false_val); false_block->setEndLabel(endLabel()); var_block->append(true_block); var_block->append(false_block); } else { if(initVal()->reg().isFloat()){ store_type = ICode::ICodeType::STF; } ICode store_val(store_type,&initVal()->reg(),&mem_register_); var_block->append(get_addr); var_block->append(store_val); } } ICode incr_stack(ICode::ICodeType::ADD,&MemoryMgr::stackPointerRegister(),new Value(1,Type::TypeTag::INT),&MemoryMgr::stackPointerRegister()); var_block->append(incr_stack); return var_block; }
/* uninstall hook and clean up */ void WINAPI undo_it(void) { if (ff_info.atom_str) { UnregisterHotKey(NULL, ff_info.atom_str); GlobalDeleteAtom(ff_info.atom_str); } if (TrueSHGetFolderPathW) { Mhook_Unhook((PVOID*)&TrueSHGetFolderPathW); } if (TrueSHGetSpecialFolderPathW) { Mhook_Unhook((PVOID*)&TrueSHGetSpecialFolderPathW); } if (TrueSHGetSpecialFolderLocation) { Mhook_Unhook((PVOID*)&TrueSHGetSpecialFolderLocation); } jmp_end(); safe_end(); return; }