|
hoshi-lang dev
Yet another programming language
|
#include <IR.h>

Classes | |
| struct | LoopContext |
Public Types | |
| enum class | ExtractType { All , First , Last } |
Public Member Functions | |
| IRBuilder ()=delete | |
| IRBuilder (std::shared_ptr< compilerContext > compilerCtx, std::shared_ptr< IRModule > currentModule, std::shared_ptr< IRFunctionDefinition > currentFunction) | |
| void | setDebugInfo (const IRDebugInfo &debugInfo) |
| const IRDebugInfo & | getCurrentDebugInfo () |
| void | pushLoopContext (yoi::indexT breakTarget, yoi::indexT continueTarget) |
| void | popLoopContext () |
| yoi::indexT | saveState () |
| void | discardState () |
| void | restoreState () |
| void | restoreStateTemporarily () |
| void | commitState () |
| void | discardStateUntil (yoi::indexT stateIndex) |
| void | pushTempVar (const std::shared_ptr< IRValueType > &type) |
| yoi::indexT | createCodeBlock () |
| std::shared_ptr< IRFunctionDefinition > | irFuncDefinition () |
| IRCodeBlock & | getCurrentCodeBlock () |
| yoi::indexT | getCurrentCodeBlockIndex () |
| yoi::indexT | switchCodeBlock (yoi::indexT index) |
| IRCodeBlock & | getCodeBlock (yoi::indexT index) |
| void | yield () |
| void | insert (const IR &ir, yoi::indexT insertionPoint=0xffffffff) |
| yoi::IROperand | createLocalVar (const yoi::wstr &varName, const std::shared_ptr< IRValueType > &type) |
| IRValueType | getLocalVar (yoi::indexT index) |
| std::shared_ptr< IRValueType > & | getLhsFromTempVarStack () |
| std::shared_ptr< IRValueType > & | getRhsFromTempVarStack () |
| void | basicCast (const std::shared_ptr< IRValueType > &valType, yoi::indexT insertionPoint, bool lhs=false) |
| void | popOp () |
| void | uniqueArithmeticOp (IR::Opcode op) |
| void | arithmeticOp (IR::Opcode op) |
| bool | hasTerminated () |
| void | jumpOp (yoi::indexT target) |
| void | jumpIfOp (IR::Opcode op, yoi::indexT target) |
| void | pushOp (IR::Opcode op, const yoi::IROperand &constV) |
| void | loadOp (IR::Opcode op, const yoi::IROperand &source, const std::shared_ptr< IRValueType > &expectedType, yoi::indexT moduleIndex=-1) |
| void | loadFieldOp (yoi::vec< yoi::IROperand > &accessors, const std::shared_ptr< IRValueType > &expectedType) |
| void | loadMemberOp (const yoi::IROperand &memberIndex, const std::shared_ptr< IRValueType > &memberType) |
| void | storeOp (IR::Opcode op, const yoi::IROperand &operand, yoi::indexT moduleIndex=-1) |
| void | storeMemberOp (const yoi::IROperand &memberIndex) |
| void | storeFieldOp (yoi::vec< yoi::IROperand > &accessors) |
| void | invokeOp (yoi::indexT funcIndex, yoi::indexT funcArgsCount, const std::shared_ptr< IRValueType > &returnType, bool externalInvocation=false, yoi::indexT moduleIndex=-1) |
| Invoke a function with the given arguments. | |
| void | invokeDanglingOp (yoi::indexT funcIndex, yoi::indexT funcArgsCount, const std::shared_ptr< IRValueType > &returnType, bool externalInvocation=false, yoi::indexT moduleIndex=-1) |
| invoke a function with the given arguments, but the last param will be taken as the first param. | |
| void | invokeMethodOp (yoi::indexT funcIndex, yoi::indexT methodArgsCount, const std::shared_ptr< IRValueType > &returnType, bool isStatic, bool externalInvocation=false, yoi::indexT moduleIndex=-1) |
| void | invokeVirtualOp (yoi::indexT funcIndex, yoi::indexT interfaceIndex, yoi::indexT methodArgsCount, const std::shared_ptr< IRValueType > &returnType, bool externalInvocation=false, yoi::indexT moduleIndex=-1) |
| void | invokeImportedOp (yoi::indexT libIndex, yoi::indexT funcIndex, yoi::indexT funcArgsCount, const std::shared_ptr< IRValueType > &returnType) |
| void | retOp (bool returnWithNone=false) |
| void | newStructOp (yoi::indexT structIndex, bool isExternal=false, yoi::indexT moduleIndex=-1) |
| void | newDataStructOp (yoi::indexT structIndex, bool isExternal=false, yoi::indexT moduleIndex=-1) |
| void | initializeFieldsOp (yoi::indexT parameterCount) |
| void | newInterfaceOp (yoi::indexT interfaceIndex, bool isExternal=false, yoi::indexT moduleIndex=-1) |
| void | constructInterfaceImplOp (const std::pair< yoi::indexT, yoi::indexT > &interfaceId, yoi::indexT interfaceImplIndex, bool isExternal=false, yoi::indexT moduleIndex=-1) |
| void | newArrayOp (const std::shared_ptr< IRValueType > &elementType, const yoi::vec< yoi::indexT > &dimensions, yoi::indexT onstackElementCount) |
| void | newDynamicArrayOp (const std::shared_ptr< IRValueType > &elementType, yoi::indexT initializerSize=0) |
| void | arrayLengthOp () |
| void | interfaceOfOp () |
| void | typeIdOp (const std::shared_ptr< IRValueType > &type) |
| void | typeIdOp () |
| void | dynCastOp (const std::shared_ptr< IRValueType > &type) |
| void | pointerCastOp () |
| void | breakOp () |
| void | continueOp () |
| void | bindElementsOp (yoi::indexT extractElementCount, ExtractType extractType) |
| void | bindFieldsOp (yoi::indexT extractFieldCount, ExtractType extractType) |
| void | yieldOp (bool yieldNone=false) |
| void | resumeOp () |
| yoi::indexT | getCurrentInsertionPoint () |
| void | popFromTempVarStack () |
Private Attributes | |
| std::shared_ptr< compilerContext > | compilerCtx |
| std::shared_ptr< IRModule > | currentModule |
| std::shared_ptr< IRFunctionDefinition > | currentFunction |
| std::vector< std::shared_ptr< IRCodeBlock > > | codeBlocks |
| std::vector< std::shared_ptr< yoi::IRValueType > > | tempVarStack |
| yoi::indexT | currentCodeBlockIndex |
| yoi::vec< std::tuple< yoi::indexT, yoi::indexT, yoi::indexT > > | codeBlockInsertionStates |
| yoi::vec< IR > | tempStateCodeBlock |
| yoi::vec< std::shared_ptr< yoi::IRValueType > > | tempStateTempVarStack |
| IRDebugInfo | currentDebugInfo |
| yoi::vec< LoopContext > | loopContext |
|
strong |
|
delete |
| IRBuilder | ( | std::shared_ptr< compilerContext > | compilerCtx, |
| std::shared_ptr< IRModule > | currentModule, | ||
| std::shared_ptr< IRFunctionDefinition > | currentFunction | ||
| ) |
| void arithmeticOp | ( | IR::Opcode | op | ) |
Definition at line 242 of file IR.cpp.
References IR::add, IR::bitwise_and, IR::bitwise_not, IR::bitwise_or, IR::bitwise_xor, IRDebugInfo::column, IRBuilder::compilerCtx, IRBuilder::currentDebugInfo, IR::div, IR::equal, IR::greater_equal, IR::greater_than, IRBuilder::insert(), IR::left_shift, IR::less_equal, IR::less_than, IRDebugInfo::line, IR::mod, IR::mul, IR::not_equal, yoi::panic(), IR::right_shift, IR::sub, IRBuilder::tempVarStack, yoi::wstring2string(), and yoi::yoi_assert().
Referenced by visitor::handleSubscript(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| void arrayLengthOp | ( | ) |
Definition at line 1339 of file IR.cpp.
References IR::array_length.
Referenced by visitor::visit().

| void basicCast | ( | const std::shared_ptr< IRValueType > & | valType, |
| yoi::indexT | insertionPoint, | ||
| bool | lhs = false |
||
| ) |
Definition at line 169 of file IR.cpp.
References IR::basic_cast_bool, IR::basic_cast_char, IR::basic_cast_deci, IR::basic_cast_int, IR::basic_cast_short, IR::basic_cast_unsigned, IRValueType::booleanObject, IRValueType::characterObject, IRDebugInfo::column, IRBuilder::compilerCtx, IRBuilder::currentDebugInfo, IRValueType::decimalObject, IRBuilder::insert(), IRValueType::integerObject, IRDebugInfo::line, yoi::managedPtr(), yoi::panic(), IR::pointer_cast, IRValueType::pointerObject, IRValueType::shortObject, IRValueType::stringObject, IRBuilder::tempVarStack, IRValueType::unsignedObject, and yoi::yoi_assert().
Referenced by visitor::emitBasicCastInBasicArithOpByLhsAndRhs(), visitor::emitBasicCastTo(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| void bindElementsOp | ( | yoi::indexT | extractElementCount, |
| ExtractType | extractType | ||
| ) |
Extract elements from an array or a dynamic array, push them to the temp var stack, and dereference the array object.
| extractElementCount | The number of elements to extract. |
| extractType | The type of extraction, either all, first, or last. |
Definition at line 1499 of file IR.cpp.
References IR::bind_elements_post, IR::bind_elements_pred, IROperand::index, and yoi::managedPtr().
Referenced by visitor::visit().


| void bindFieldsOp | ( | yoi::indexT | extractFieldCount, |
| ExtractType | extractType | ||
| ) |
Extract fields from a struct, push them to the temp var stack, and dereference the struct object.
| extractFieldCount | The number of fields to extract. |
| extractType | The type of extraction, either all, first, or last. |
Definition at line 1511 of file IR.cpp.
References IR::bind_fields_post, IR::bind_fields_pred, and IROperand::index.
Referenced by visitor::visit().

| void breakOp | ( | ) |
Definition at line 1489 of file IR.cpp.
References yoi::yoi_assert().
Referenced by visitor::visit().


| void commitState | ( | ) |
Definition at line 1444 of file IR.cpp.
References IROperand::type.
Referenced by visitor::handleSubscript(), and visitor::visit().

| void constructInterfaceImplOp | ( | const std::pair< yoi::indexT, yoi::indexT > & | interfaceId, |
| yoi::indexT | interfaceImplIndex, | ||
| bool | isExternal = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 471 of file IR.cpp.
References IR::construct_interface_impl, IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IRValueType::interfaceObject, yoi::managedPtr(), and IRBuilder::tempVarStack.
Referenced by visitor::createCallableInstanceForFunction(), visitor::tryCastTo(), visitor::visit(), visitor::visit(), and visitor::visitExtern().


| void continueOp | ( | ) |
Definition at line 1494 of file IR.cpp.
References yoi::yoi_assert().
Referenced by visitor::visit().


| yoi::indexT createCodeBlock | ( | ) |
Definition at line 123 of file IR.cpp.
References IRBuilder::codeBlocks.
Referenced by visitor::createCallableImplementationForFunction(), IRLinker::createEntryFunction(), visitor::createLambdaUnnamedStruct(), visitor::getGeneratorContext(), visitor::setupTemporaryConceptEvaluationEnvironment(), visitor::specializeFunctionTemplate(), visitor::specializeInterfaceImplementation(), visitor::specializeStructMethodDefinition(), visitor::specializeStructMethodTemplate(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().

| yoi::IROperand createLocalVar | ( | const yoi::wstr & | varName, |
| const std::shared_ptr< IRValueType > & | type | ||
| ) |
Definition at line 142 of file IR.cpp.
References IRBuilder::currentFunction, and IROperand::localVar.
| void discardState | ( | ) |
Definition at line 1169 of file IR.cpp.
References IRBuilder::codeBlockInsertionStates, IRDebugInfo::column, IRBuilder::currentDebugInfo, IRDebugInfo::line, and yoi::yoi_assert().
Referenced by visitor::handleBinaryOperatorOverload(), visitor::handleInvocationExtern(), visitor::handleSubscript(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visitExtern().


| void discardStateUntil | ( | yoi::indexT | stateIndex | ) |
Definition at line 1456 of file IR.cpp.
Referenced by visitor::visit().

| void dynCastOp | ( | const std::shared_ptr< IRValueType > & | type | ) |
Definition at line 1247 of file IR.cpp.
References IR::dyn_cast_any, and IROperand::index.
Referenced by visitor::visit().

| IRCodeBlock & getCodeBlock | ( | yoi::indexT | index | ) |
Definition at line 128 of file IR.cpp.
References IRBuilder::codeBlocks.
Referenced by visitor::visit().

| IRCodeBlock & getCurrentCodeBlock | ( | ) |
Definition at line 138 of file IR.cpp.
References IRBuilder::codeBlocks, and IRBuilder::currentCodeBlockIndex.
Referenced by IRBuilder::getCurrentInsertionPoint(), and IRBuilder::insert().

| yoi::indexT getCurrentCodeBlockIndex | ( | ) |
Definition at line 498 of file IR.cpp.
References IRBuilder::currentCodeBlockIndex.
| const IRDebugInfo & getCurrentDebugInfo | ( | ) |
Definition at line 1207 of file IR.cpp.
References IRBuilder::currentDebugInfo.
Referenced by visitor::createCallableImplementationForFunction(), visitor::getTypeSpecUniqueNameStr(), visitor::handleBinaryOperatorOverload(), visitor::handleUnaryOperatorOverload(), visitor::setupTemporaryConceptEvaluationEnvironment(), and visitor::tryCastTo().

| yoi::indexT getCurrentInsertionPoint | ( | ) |
Definition at line 484 of file IR.cpp.
References IRBuilder::getCurrentCodeBlock(), and IRCodeBlock::getIRArray().
Referenced by visitor::emitBasicCastTo(), visitor::handleBinaryOperatorOverload(), visitor::handleUnaryOperatorOverload(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visitExtern(), and visitor::visitExtern().


| std::shared_ptr< IRValueType > & getLhsFromTempVarStack | ( | ) |
Definition at line 159 of file IR.cpp.
References IRDebugInfo::column, IRBuilder::currentDebugInfo, IRDebugInfo::line, IRBuilder::tempVarStack, and yoi::yoi_assert().
Referenced by visitor::emitBasicCastInBasicArithOpByLhsAndRhs(), visitor::handleBinaryOperatorOverload(), visitor::handleSubscript(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| IRValueType getLocalVar | ( | yoi::indexT | index | ) |
| std::shared_ptr< IRValueType > & getRhsFromTempVarStack | ( | ) |
Definition at line 164 of file IR.cpp.
References IRDebugInfo::column, IRBuilder::currentDebugInfo, IRDebugInfo::line, IRBuilder::tempVarStack, and yoi::yoi_assert().
Referenced by visitor::createCallableImplementationForLambda(), visitor::createCallableInstanceForFunction(), visitor::createLambdaUnnamedStruct(), visitor::emitBasicCastInBasicArithOpByLhsAndRhs(), visitor::emitBasicCastTo(), visitor::evaluateArguments(), visitor::handleBinaryOperatorOverload(), visitor::handleSubscript(), visitor::handleUnaryOperatorOverload(), visitor::parseTypeSpec(), visitor::tryCastTo(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visitExtern().


| bool hasTerminated | ( | ) |
Definition at line 1462 of file IR.cpp.
References IR::jump, IR::ret, and IR::ret_none.
Referenced by IRBuilder::jumpIfOp(), IRBuilder::jumpOp(), and IRBuilder::retOp().

| void initializeFieldsOp | ( | yoi::indexT | parameterCount | ) |
Definition at line 1673 of file IR.cpp.
References IROperand::index, and IR::initialize_field.
Referenced by visitor::constructDataStruct().

| void insert | ( | const IR & | ir, |
| yoi::indexT | insertionPoint = 0xffffffff |
||
| ) |
Definition at line 147 of file IR.cpp.
References IRBuilder::getCurrentCodeBlock(), and IRCodeBlock::getIRArray().
Referenced by IRBuilder::arithmeticOp(), IRBuilder::basicCast(), IRBuilder::constructInterfaceImplOp(), IRBuilder::invokeDanglingOp(), IRBuilder::invokeMethodOp(), IRBuilder::invokeOp(), IRBuilder::invokeVirtualOp(), IRBuilder::jumpIfOp(), IRBuilder::jumpOp(), IRBuilder::loadMemberOp(), IRBuilder::loadOp(), IRBuilder::newArrayOp(), IRBuilder::newDataStructOp(), IRBuilder::newStructOp(), IRBuilder::popOp(), IRBuilder::pushOp(), IRBuilder::retOp(), IRBuilder::storeMemberOp(), IRBuilder::storeOp(), IRBuilder::uniqueArithmeticOp(), visitor::visit(), and visitor::visit().


| void interfaceOfOp | ( | ) |
Definition at line 1345 of file IR.cpp.
References IR::interfaceof.
Referenced by visitor::visit().

| void invokeDanglingOp | ( | yoi::indexT | funcIndex, |
| yoi::indexT | funcArgsCount, | ||
| const std::shared_ptr< IRValueType > & | returnType, | ||
| bool | externalInvocation = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
invoke a function with the given arguments, but the last param will be taken as the first param.
| funcIndex | The index of function in irModule->functionTable |
| funcArgsCount | The number of arguments of invocation. |
| returnType | The return type of the function. Need for push the return value type to tempVarStack. |
| externalInvocation | If true, the function is invoked from an external module. |
| moduleIndex | The index of the module that the function is imported from. |
Definition at line 1530 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IR::invoke_dangling, and IRBuilder::tempVarStack.
Referenced by visitor::createCallableInstanceForFunction(), and visitor::tryCastTo().


| void invokeImportedOp | ( | yoi::indexT | libIndex, |
| yoi::indexT | funcIndex, | ||
| yoi::indexT | funcArgsCount, | ||
| const std::shared_ptr< IRValueType > & | returnType | ||
| ) |
Definition at line 1070 of file IR.cpp.
References IROperand::index, IR::invoke_imported, and yoi::managedPtr().
Referenced by visitor::visit(), and visitor::visitExtern().


| void invokeMethodOp | ( | yoi::indexT | funcIndex, |
| yoi::indexT | methodArgsCount, | ||
| const std::shared_ptr< IRValueType > & | returnType, | ||
| bool | isStatic, | ||
| bool | externalInvocation = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 398 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IR::invoke, IR::pop, and IRBuilder::tempVarStack.
Referenced by visitor::createLambdaUnnamedStruct(), visitor::handleBinaryOperatorOverload(), visitor::handleInvocationExtern(), visitor::handleSubscript(), visitor::handleUnaryOperatorOverload(), and visitor::visit().


| void invokeOp | ( | yoi::indexT | funcIndex, |
| yoi::indexT | funcArgsCount, | ||
| const std::shared_ptr< IRValueType > & | returnType, | ||
| bool | externalInvocation = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Invoke a function with the given arguments.
| funcIndex | The index of function in irModule->functionTable |
| funcArgsCount | The number of arguments of invocation. |
| returnType | The return type of the function. Need for push the return value type to tempVarStack. |
| externalInvocation | If true, the function is invoked from an external module. |
Definition at line 382 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IR::invoke, and IRBuilder::tempVarStack.
Referenced by visitor::createCallableImplementationForFunction(), IRLinker::createEntryFunction(), and visitor::handleInvocationExtern().


| void invokeVirtualOp | ( | yoi::indexT | funcIndex, |
| yoi::indexT | interfaceIndex, | ||
| yoi::indexT | methodArgsCount, | ||
| const std::shared_ptr< IRValueType > & | returnType, | ||
| bool | externalInvocation = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 420 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IR::invoke_virtual, and IRBuilder::tempVarStack.
Referenced by visitor::handleBinaryOperatorOverload(), visitor::handleInvocationExtern(), and visitor::handleUnaryOperatorOverload().


| std::shared_ptr< IRFunctionDefinition > irFuncDefinition | ( | ) |
Definition at line 502 of file IR.cpp.
References IRBuilder::currentFunction.
Referenced by visitor::isVisitingGlobalScope(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().

| void jumpIfOp | ( | IR::Opcode | op, |
| yoi::indexT | target | ||
| ) |
Definition at line 292 of file IR.cpp.
References IRValueType::booleanObject, IROperand::codeBlock, IRBuilder::currentDebugInfo, IRBuilder::hasTerminated(), IRBuilder::insert(), IRBuilder::tempVarStack, and yoi::yoi_assert().
Referenced by visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| void jumpOp | ( | yoi::indexT | target | ) |
Definition at line 286 of file IR.cpp.
References IROperand::codeBlock, IRBuilder::currentDebugInfo, IRBuilder::hasTerminated(), IRBuilder::insert(), and IR::jump.
Referenced by visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| void loadFieldOp | ( | yoi::vec< yoi::IROperand > & | accessors, |
| const std::shared_ptr< IRValueType > & | expectedType | ||
| ) |
Definition at line 1680 of file IR.cpp.
References IR::load_field.
Referenced by visitor::visit().

| void loadMemberOp | ( | const yoi::IROperand & | memberIndex, |
| const std::shared_ptr< IRValueType > & | memberType | ||
| ) |
Definition at line 344 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::insert(), IR::load_member, and IRBuilder::tempVarStack.
Referenced by visitor::getGeneratorContext(), visitor::visit(), and visitor::visit().


| void loadOp | ( | IR::Opcode | op, |
| const yoi::IROperand & | source, | ||
| const std::shared_ptr< IRValueType > & | expectedType, | ||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 329 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IR::load_element, IR::load_local, IR::load_member, and IRBuilder::tempVarStack.
Referenced by visitor::createCallableImplementationForFunction(), visitor::createLambdaUnnamedStruct(), visitor::getGeneratorContext(), visitor::handleSubscript(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visitExtern().


| void newArrayOp | ( | const std::shared_ptr< IRValueType > & | elementType, |
| const yoi::vec< yoi::indexT > & | dimensions, | ||
| yoi::indexT | onstackElementCount | ||
| ) |
Definition at line 1106 of file IR.cpp.
References IRValueType::booleanObject, IRValueType::characterObject, IRDebugInfo::column, IRBuilder::currentDebugInfo, IRValueType::decimalObject, IROperand::index, IRBuilder::insert(), IRValueType::integerObject, IRValueType::interfaceObject, IRDebugInfo::line, yoi::managedPtr(), IR::new_array_bool, IR::new_array_char, IR::new_array_deci, IR::new_array_int, IR::new_array_interface, IR::new_array_short, IR::new_array_str, IR::new_array_struct, IR::new_array_unsigned, IR::nop, yoi::panic(), IRValueType::shortObject, IRValueType::stringObject, IRValueType::structObject, IRBuilder::tempVarStack, IRValueType::unsignedObject, and yoi::wstring2string().
Referenced by visitor::handleInvocationExtern(), visitor::tryCastTo(), visitor::visit(), and visitor::visitExtern().


| void newDataStructOp | ( | yoi::indexT | structIndex, |
| bool | isExternal = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 462 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IRValueType::datastructObject, IROperand::index, IRBuilder::insert(), yoi::managedPtr(), IR::new_datastruct, and IRBuilder::tempVarStack.
Referenced by visitor::constructDataStruct().


| void newDynamicArrayOp | ( | const std::shared_ptr< IRValueType > & | elementType, |
| yoi::indexT | initializerSize = 0 |
||
| ) |
Definition at line 1282 of file IR.cpp.
References IRValueType::booleanObject, IRValueType::characterObject, IRValueType::decimalObject, IROperand::index, IRValueType::integerObject, IRValueType::interfaceObject, yoi::managedPtr(), IR::new_dynamic_array_bool, IR::new_dynamic_array_char, IR::new_dynamic_array_deci, IR::new_dynamic_array_int, IR::new_dynamic_array_interface, IR::new_dynamic_array_short, IR::new_dynamic_array_str, IR::new_dynamic_array_struct, IR::new_dynamic_array_unsigned, IR::nop, yoi::panic(), IRValueType::shortObject, IRValueType::stringObject, IRValueType::structObject, IRValueType::unsignedObject, and yoi::wstring2string().
Referenced by visitor::tryCastTo(), and visitor::visit().


| void newInterfaceOp | ( | yoi::indexT | interfaceIndex, |
| bool | isExternal = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
| void newStructOp | ( | yoi::indexT | structIndex, |
| bool | isExternal = false, |
||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 453 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), yoi::managedPtr(), IR::new_struct, IRValueType::structObject, and IRBuilder::tempVarStack.
Referenced by visitor::createCallableInstanceForFunction(), visitor::createLambdaUnnamedStruct(), visitor::tryCastTo(), visitor::visit(), and visitor::visitExtern().


| void pointerCastOp | ( | ) |
Definition at line 1276 of file IR.cpp.
References yoi::managedPtr(), IR::pointer_cast, and IRValueType::pointerObject.

| void popFromTempVarStack | ( | ) |
Definition at line 488 of file IR.cpp.
References IRBuilder::tempVarStack.
Referenced by visitor::tryCastTo(), visitor::visit(), visitor::visit(), and visitor::visitExtern().

| void popLoopContext | ( | ) |
Definition at line 1485 of file IR.cpp.
Referenced by visitor::visit(), and visitor::visit().

| void popOp | ( | ) |
Definition at line 1189 of file IR.cpp.
References IRValueType::bracedInitalizerList, IRBuilder::currentDebugInfo, IRBuilder::insert(), IR::pop, and IRBuilder::tempVarStack.
Referenced by visitor::handleSubscript(), visitor::visit(), and visitor::visit().


| void pushLoopContext | ( | yoi::indexT | breakTarget, |
| yoi::indexT | continueTarget | ||
| ) |
Definition at line 1524 of file IR.cpp.
Referenced by visitor::visit(), and visitor::visit().

| void pushOp | ( | IR::Opcode | op, |
| const yoi::IROperand & | constV | ||
| ) |
Definition at line 303 of file IR.cpp.
References IROperand::boolean, IROperand::character, IRDebugInfo::column, IRBuilder::compilerCtx, IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::decimal, IROperand::index, IRBuilder::insert(), IROperand::integer, IRDebugInfo::line, yoi::managedPtr(), yoi::panic(), IRValueType::pointerObject, IR::push_null, IROperand::shortInt, IROperand::stringLiteral, IRBuilder::tempVarStack, IROperand::type, and IROperand::unsignedInt.
Referenced by IRLinker::createEntryFunction(), visitor::handleSubscript(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| void pushTempVar | ( | const std::shared_ptr< IRValueType > & | type | ) |
Definition at line 1185 of file IR.cpp.
References IRBuilder::tempVarStack.
Referenced by visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().

| void restoreState | ( | ) |
Definition at line 1174 of file IR.cpp.
References IRBuilder::codeBlockInsertionStates, IRBuilder::codeBlocks, IRDebugInfo::column, IRBuilder::currentCodeBlockIndex, IRBuilder::currentDebugInfo, IRDebugInfo::line, IRBuilder::tempVarStack, and yoi::yoi_assert().
Referenced by visitor::evaluateConstraint(), visitor::handleBinaryOperatorOverload(), visitor::handleInvocationExtern(), visitor::parseTypeSpec(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visitExtern().


| void restoreStateTemporarily | ( | ) |
Definition at line 1433 of file IR.cpp.
References yoi::yoi_assert().
Referenced by visitor::handleSubscript(), and visitor::visit().


| void resumeOp | ( | ) |
Takes the raw LLVM context pointer and resume the control flow from the yield point.
Definition at line 1693 of file IR.cpp.
References IR::resume.
Referenced by visitor::getGeneratorContext().

| void retOp | ( | bool | returnWithNone = false | ) |
Definition at line 438 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::hasTerminated(), IRBuilder::insert(), IR::ret, IR::ret_none, and IRBuilder::tempVarStack.
Referenced by visitor::createCallableImplementationForFunction(), IRLinker::createEntryFunction(), visitor::createLambdaUnnamedStruct(), visitor::getGeneratorContext(), visitor::visit(), and visitor::visit().


| yoi::indexT saveState | ( | ) |
Definition at line 1164 of file IR.cpp.
References IRBuilder::codeBlockInsertionStates, IRBuilder::codeBlocks, IRBuilder::currentCodeBlockIndex, and IRBuilder::tempVarStack.
Referenced by visitor::evaluateConstraint(), visitor::handleInvocationExtern(), visitor::handleSubscript(), visitor::parseTypeSpec(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visitExtern().

| void setDebugInfo | ( | const IRDebugInfo & | debugInfo | ) |
Definition at line 1202 of file IR.cpp.
References IRBuilder::currentDebugInfo, yoi::set_current_file_path(), and IRDebugInfo::sourceFile.
Referenced by visitor::createLambdaUnnamedStruct(), visitor::specializeFunctionTemplate(), visitor::specializeInterfaceImplementation(), visitor::specializeStructMethodDefinition(), visitor::specializeStructMethodTemplate(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().


| void storeFieldOp | ( | yoi::vec< yoi::IROperand > & | accessors | ) |
Definition at line 1687 of file IR.cpp.
References IR::store_field.
Referenced by visitor::visit().

| void storeMemberOp | ( | const yoi::IROperand & | memberIndex | ) |
Definition at line 375 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::insert(), IR::store_member, and IRBuilder::tempVarStack.
Referenced by visitor::createLambdaUnnamedStruct(), visitor::getGeneratorContext(), and visitor::visit().


| void storeOp | ( | IR::Opcode | op, |
| const yoi::IROperand & | operand, | ||
| yoi::indexT | moduleIndex = -1 |
||
| ) |
Definition at line 350 of file IR.cpp.
References IRDebugInfo::column, IRBuilder::currentDebugInfo, IRBuilder::currentModule, IROperand::index, IRBuilder::insert(), IRDebugInfo::line, yoi::panic(), IR::store_element, IR::store_field, IR::store_global, IR::store_local, IR::store_member, and IRBuilder::tempVarStack.
Referenced by visitor::createCallableImplementationForFunction(), visitor::handleSubscript(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visitExtern().


| yoi::indexT switchCodeBlock | ( | yoi::indexT | index | ) |
Switch to the specified code block.
| index | the index of the code block to switch to |
Definition at line 492 of file IR.cpp.
References IRBuilder::currentCodeBlockIndex.
Referenced by visitor::createCallableImplementationForFunction(), IRLinker::createEntryFunction(), visitor::createLambdaUnnamedStruct(), visitor::getGeneratorContext(), visitor::setupTemporaryConceptEvaluationEnvironment(), visitor::specializeFunctionTemplate(), visitor::specializeInterfaceImplementation(), visitor::specializeStructMethodDefinition(), visitor::specializeStructMethodTemplate(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), visitor::visit(), and visitor::visit().

| void typeIdOp | ( | const std::shared_ptr< IRValueType > & | type | ) |
Definition at line 1222 of file IR.cpp.
References IROperand::index, IRValueType::integerObject, yoi::managedPtr(), and IR::typeid_object_non_stack.
Referenced by visitor::visit(), and visitor::visit().


| void uniqueArithmeticOp | ( | IR::Opcode | op | ) |
Definition at line 233 of file IR.cpp.
References IRBuilder::currentDebugInfo, IRBuilder::insert(), and IRBuilder::tempVarStack.
Referenced by visitor::visit().


| void yield | ( | ) |
Definition at line 132 of file IR.cpp.
References IRCodeBlock::codeBlock, IRBuilder::codeBlocks, and IRBuilder::currentFunction.
Referenced by visitor::createCallableImplementationForFunction(), IRLinker::createEntryFunction(), visitor::createLambdaUnnamedStruct(), visitor::getGeneratorContext(), visitor::specializeFunctionTemplate(), visitor::specializeInterfaceImplementation(), visitor::specializeStructMethodDefinition(), visitor::specializeStructMethodTemplate(), visitor::visit(), visitor::visit(), and visitor::visit().

| void yieldOp | ( | bool | yieldNone = false | ) |
Takes the value from the temp var stack and also the raw LLVM context pointer and return the control flow to the caller.
| yieldNone | If true, yield None instead of the value from the temp var stack. |
Definition at line 1698 of file IR.cpp.
References IR::yield.
Referenced by visitor::visit().

|
private |
Definition at line 884 of file IR.h.
Referenced by IRBuilder::discardState(), IRBuilder::restoreState(), and IRBuilder::saveState().
|
private |
Definition at line 881 of file IR.h.
Referenced by IRBuilder::createCodeBlock(), IRBuilder::getCodeBlock(), IRBuilder::getCurrentCodeBlock(), IRBuilder::restoreState(), IRBuilder::saveState(), and IRBuilder::yield().
|
private |
Definition at line 878 of file IR.h.
Referenced by IRBuilder::arithmeticOp(), IRBuilder::basicCast(), and IRBuilder::pushOp().
|
private |
Definition at line 883 of file IR.h.
Referenced by IRBuilder::getCurrentCodeBlock(), IRBuilder::getCurrentCodeBlockIndex(), IRBuilder::restoreState(), IRBuilder::saveState(), and IRBuilder::switchCodeBlock().
|
private |
Definition at line 887 of file IR.h.
Referenced by IRBuilder::arithmeticOp(), IRBuilder::basicCast(), IRBuilder::constructInterfaceImplOp(), IRBuilder::discardState(), IRBuilder::getCurrentDebugInfo(), IRBuilder::getLhsFromTempVarStack(), IRBuilder::getRhsFromTempVarStack(), IRBuilder::invokeDanglingOp(), IRBuilder::invokeMethodOp(), IRBuilder::invokeOp(), IRBuilder::invokeVirtualOp(), IRBuilder::jumpIfOp(), IRBuilder::jumpOp(), IRBuilder::loadMemberOp(), IRBuilder::loadOp(), IRBuilder::newArrayOp(), IRBuilder::newDataStructOp(), IRBuilder::newStructOp(), IRBuilder::popOp(), IRBuilder::pushOp(), IRBuilder::restoreState(), IRBuilder::retOp(), IRBuilder::setDebugInfo(), IRBuilder::storeMemberOp(), IRBuilder::storeOp(), and IRBuilder::uniqueArithmeticOp().
|
private |
Definition at line 880 of file IR.h.
Referenced by IRBuilder::createLocalVar(), IRBuilder::irFuncDefinition(), and IRBuilder::yield().
|
private |
Definition at line 879 of file IR.h.
Referenced by IRBuilder::constructInterfaceImplOp(), IRBuilder::invokeDanglingOp(), IRBuilder::invokeMethodOp(), IRBuilder::invokeOp(), IRBuilder::invokeVirtualOp(), IRBuilder::loadOp(), IRBuilder::newDataStructOp(), IRBuilder::newStructOp(), IRBuilder::pushOp(), and IRBuilder::storeOp().
|
private |
|
private |
|
private |
Definition at line 882 of file IR.h.
Referenced by IRBuilder::arithmeticOp(), IRBuilder::basicCast(), IRBuilder::constructInterfaceImplOp(), IRBuilder::getLhsFromTempVarStack(), IRBuilder::getRhsFromTempVarStack(), IRBuilder::invokeDanglingOp(), IRBuilder::invokeMethodOp(), IRBuilder::invokeOp(), IRBuilder::invokeVirtualOp(), IRBuilder::jumpIfOp(), IRBuilder::loadMemberOp(), IRBuilder::loadOp(), IRBuilder::newArrayOp(), IRBuilder::newDataStructOp(), IRBuilder::newStructOp(), IRBuilder::popFromTempVarStack(), IRBuilder::popOp(), IRBuilder::pushOp(), IRBuilder::pushTempVar(), IRBuilder::restoreState(), IRBuilder::retOp(), IRBuilder::saveState(), IRBuilder::storeMemberOp(), IRBuilder::storeOp(), and IRBuilder::uniqueArithmeticOp().