Class IRGenerationContext
java.lang.Object
org.ek9lang.compiler.phase7.generation.IRGenerationContext
Central state management for IR generation, following the proven SymbolsAndScopes pattern.
This context provides stack-based scope management that eliminates parameter threading throughout the IR generation process. It manages the transient stack of scope contexts, provides debug information management, and handles instruction building coordination.
Like SymbolsAndScopes, this class provides the shared state management that allows focused helpers to work together cleanly without complex parameter passing.
-
Constructor Summary
ConstructorsConstructorDescriptionIRGenerationContext
(IRContext irContext) Create a new IR generation context with existing IRContext. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addInstruction
(IRInstr instruction) Add instruction to current instruction list.void
addInstructions
(List<IRInstr> instructions) Add multiple instructions to current instruction list.void
Clear current instruction list.Create BasicDetails using current stack context.createBasicDetails
(String scopeId) Create BasicDetails with custom scope ID but current debug info.createDebugInfo
(org.antlr.v4.runtime.Token token) Create debug info from an ANTLR token.createDebugInfo
(org.antlr.v4.runtime.tree.ParseTree ctx) Create debug info from a parse context.createDebugInfo
(Ek9Token token) Create debug info from a token.createDebugInfo
(IToken token) Create debug info from an EK9 IToken.createVariableDetails
(String variableName) Create VariableDetails using current stack context.createVariableDetails
(String variableName, String scopeId) Create VariableDetails with custom scope ID.Get current debug info from the stack.Get current frame type.Get current scope ID from the stack.void
enterMethodScope
(String scopeId, DebugInfo debugInfo, IRFrameType frameType) Enter a method/function scope with fresh IRContext for counter isolation.void
enterScope
(String scopeId, DebugInfo debugInfo, IRFrameType frameType) Enter a new IR scope context.void
enterScope
(String scopeId, DebugInfo debugInfo, IRFrameType frameType, boolean hasLeftHandSide) Enter a new IR scope with left-hand side indication.void
enterScope
(String scopeId, DebugInfo debugInfo, IRFrameType frameType, boolean hasLeftHandSide, Object contextData) Enter a new IR scope with full parameters.void
enterScope
(String scopeId, DebugInfo debugInfo, IRFrameType frameType, Object contextData) Enter a new IR scope with context data.void
Exit the current IR scope.Get current instruction list and clear it.Navigate back up stack to find aggregate frame.findFrameOfType
(IRFrameType frameType) Navigate back up stack to find frame of specific type.Navigate back up stack to find method or function frame.generateBlockLabel
(String prefix) Generate a unique block label.generateLabelName
(String prefix) Generate a unique label name.generateScopeId
(String prefix) Generate a unique scope identifier.Generate a unique temporary variable name.Get the compiler flags from IRContext.Get current instruction list without clearing.Get current IRContext from stack frame (traverses up to find method-level IRContext).Get the underlying IR context.Get the IR generation stack (for advanced operations).Get the parsed module from IRContext.int
Get current stack depth (for debugging).boolean
Check if current scope has left-hand side.boolean
isInFrameType
(IRFrameType frameType) Check if we're currently in a specific frame type.boolean
needsResultVariable
(String returnType) Check if we need a result variable for the current context.
-
Constructor Details
-
IRGenerationContext
Create a new IR generation context with existing IRContext. This preserves the original IRContext state including prefix counters.
-
-
Method Details
-
enterScope
Enter a new IR scope context. -
enterMethodScope
Enter a method/function scope with fresh IRContext for counter isolation. Creates new IRContext via copy constructor to ensure fresh temp var and label counters. -
enterScope
public void enterScope(String scopeId, DebugInfo debugInfo, IRFrameType frameType, boolean hasLeftHandSide) Enter a new IR scope with left-hand side indication. -
enterScope
public void enterScope(String scopeId, DebugInfo debugInfo, IRFrameType frameType, Object contextData) Enter a new IR scope with context data. -
enterScope
public void enterScope(String scopeId, DebugInfo debugInfo, IRFrameType frameType, boolean hasLeftHandSide, Object contextData) Enter a new IR scope with full parameters. -
exitScope
public void exitScope()Exit the current IR scope. -
currentScopeId
Get current scope ID from the stack. -
currentDebugInfo
-
hasLeftHandSide
public boolean hasLeftHandSide()Check if current scope has left-hand side. -
currentFrameType
Get current frame type. -
createDebugInfo
Create debug info from a parse context. -
createDebugInfo
-
createDebugInfo
Create debug info from an ANTLR token. -
createDebugInfo
-
getCurrentIRContext
Get current IRContext from stack frame (traverses up to find method-level IRContext). Always creates a fresh IRContext for proper counter isolation if none exists. -
generateTempName
Generate a unique temporary variable name. -
generateScopeId
-
generateBlockLabel
-
generateLabelName
-
createBasicDetails
Create BasicDetails using current stack context. -
createBasicDetails
Create BasicDetails with custom scope ID but current debug info. -
createVariableDetails
Create VariableDetails using current stack context. -
createVariableDetails
Create VariableDetails with custom scope ID. -
addInstruction
Add instruction to current instruction list. -
addInstructions
-
extractInstructions
-
getCurrentInstructions
-
clearInstructions
public void clearInstructions()Clear current instruction list. -
needsResultVariable
Check if we need a result variable for the current context. -
findFrameOfType
Navigate back up stack to find frame of specific type. -
findMethodOrFunctionFrame
Navigate back up stack to find method or function frame. -
findAggregateFrame
Navigate back up stack to find aggregate frame. -
isInFrameType
Check if we're currently in a specific frame type. -
getParsedModule
Get the parsed module from IRContext. -
getCompilerFlags
Get the compiler flags from IRContext. -
getIRContext
Get the underlying IR context. -
getIRGenerationStack
Get the IR generation stack (for advanced operations). -
getStackDepth
public int getStackDepth()Get current stack depth (for debugging).
-