# Interface: com.pnfsoftware.jeb.core.units.code.asm.decompiler.IERoutineContext
- Super interfaces: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IOptimizerTarget`

Routine \(local\) IR context. Every method being decompiled is having an associated IR context. The  routine context is also a factory for local IR objects, such as IR statements.

## Abstract Method: acquireNativeItem
- parameter: `t`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeItem`

Description: 
parameter: t: 

## Abstract Method: addNote
- parameter: `note`, type: `java.lang.String`
- return type: `boolean`

Description: 
parameter: note: 
return: 

## Abstract Method: buildCfg
- parameter: `statements`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`

Description: Build an IR\-CFG using the provided list of statements, and set the resulting CFG as the  current CFG for this converted routine. The current conversion lists will be used.
parameter: statements: input list of [IEStatement](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement.md)s
return: the newly created CFG

## Abstract Method: buildCfg
- parameter: `statements`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `subroutineCallNotBreaking`, type: `boolean`
- parameter: `assignToContext`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`

Description: Build an IR\-CFG from a list of statements. The first statement is the input statement. Note  that the resulting CFG may not contain all provided IR statements; only reachable IR  statements are present. The resulting CFG is gap\-less.
parameter: statements: list of statements
parameter: subroutineCallNotBreaking: if true, [IECall](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECall.md)\-like statements do not necessarily             break a basic block \(to be used solely in latest pipeline stages\)
return: a CFG; note that `getCfg()` is not updated; to update the CFG reference stored          in this context, use `setCfg()`

## Abstract Method: buildEmptyState
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.EState`

Description: Initialize a state to emulate this routine. The variables map is uninitialized.
return: 

## Abstract Method: convertIntermediateOffset
- parameter: `offset`, type: `int`
- return type: `java.lang.Long`

Description: Conversion FROM IR offset TO native address.
parameter: offset: IR offset
return: physical address or null on error

## Abstract Method: convertNativeAddress
- parameter: `address`, type: `long`
- return type: `java.lang.Long`

Description: Conversion FROM native address to IR offset. The IR offset is an int, but returned as a long  to conveniently manipulate it with IInstruction.
parameter: address: physical address
return: IR offset or null on error

## Abstract Method: copyFinder
- parameter: `entry`, type: `com.pnfsoftware.jeb.core.units.code.asm.type.StorageEntry`
- parameter: `filters`, type: `java.util.Collection<java.lang.Integer>`
- parameter: `irOffset`, type: `java.lang.Long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.EVarCopyFinder`


## Abstract Method: copyPairOfVariables
- parameter: `lo`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- parameter: `hi`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Create a copy variable for a pair of variable.  

  Not all variables can be copied. Currently, copies are limited to registers variables.
parameter: lo: an [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)\-register
parameter: hi: an [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)\-register
return: 

## Abstract Method: copyTruncatedVariable
- parameter: `var`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- parameter: `lowPartBitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.util.base.Couple<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar,com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`

Description: Create a truncated copy of a variable.  

  Not all variables can be copied. Currently, copies are limited to registers variables.
parameter: var: an [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)\-register
parameter: lowPartBitsize: 
return: null on error, else, a tuple containing the copy variables: low part \(truncated LSB\),          and high part \(remainder MSB\)

## Abstract Method: copyVariable
- parameter: `var`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Create the copy of a variable.  

  Not all variables can be copied. Currently, copies are limited to registers variables.
parameter: var: an [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)\-register
return: null on error, else, the copied variable

## Abstract Method: createAssign
- parameter: `dst`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `src`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign`


## Abstract Method: createAssignIf
- parameter: `assignTpl`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign`
- parameter: `predicate`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign`


## Abstract Method: createBranchAssign
- parameter: `dst`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `src`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `subroutineCall`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign`


## Abstract Method: createBuiltinMethodCall
- parameter: `name`, type: `java.lang.String`
- parameter: `retexp`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `argexps`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric[]`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECall`

Description: Create a `Call` to a built\-in method reference.
parameter: name: built\-in method name, supported values: `strcpy`, `memcpy`,             `memset`
parameter: retexp: the optional return value
parameter: argexps: the list of IR arguments
return: a call IR expression, null on error

## Abstract Method: createCall
- parameter: `callsite`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `retloc`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `returns`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`
- parameter: `params`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`
- parameter: `stackPointerDelta`, type: `int`
- parameter: `spoiledExpressions`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`
- parameter: `prototype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardPrototype`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECall`


## Abstract Method: createCall
- parameter: `callsite`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `targetCandidates`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`
- parameter: `prototype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardPrototype`
- parameter: `varArgTypes`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardType>`
- parameter: `failsafePrototype`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECall`


## Abstract Method: createCompose
- parameter: `elts`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric[]`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECompose`

Description: Create a composition.
parameter: elts: at least two elements, from lowest\-significant to highest\-significant
return: 

## Abstract Method: createCompose
- parameter: `elts`, type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECompose`

Description: Create a composition.
parameter: elts: at least two elements, from lowest\-significant to highest\-significant
return: 

## Abstract Method: createCond
- parameter: `p`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IECond`


## Abstract Method: createConversionOperation
- parameter: `convOperator`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.OperationType`
- parameter: `src`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `dstSize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEOperation`

Description: Create a conversion operation: an integer truncation, integer extension \(zero or signed\),  float truncation or extension, float\-to\-int and int\-to\-float conversion.
parameter: convOperator: one of for which [OperationType#isConversion()](OperationType#isConversion()) returns true \(eg,             [OperationType#CAST](OperationType#CAST), [OperationType#CAST_S](OperationType#CAST_S),             [OperationType#FP2FP](OperationType#FP2FP), [OperationType#FP2INT](OperationType#FP2INT),             [OperationType#INT2FP](OperationType#INT2FP)\)
parameter: src: operand to be extended, truncated, or converted
parameter: dstSize: resulting bitsize
return: the operation IRE

## Abstract Method: createGroupElt
- parameter: `collection`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGroup`
- parameter: `index`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGroupElt`


## Abstract Method: createImm
- parameter: `v`, type: `long`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Abstract Method: createImm
- parameter: `v`, type: `byte[]`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Abstract Method: createImm
- parameter: `v`, type: `java.math.BigInteger`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Abstract Method: createImm
- parameter: `v`, type: `java.lang.String`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Abstract Method: createImm
- parameter: `v`, type: `float`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Abstract Method: createImm
- parameter: `v`, type: `double`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Abstract Method: createJump
- parameter: `branchAddress`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEJump`


## Abstract Method: createJump
- parameter: `branchAddress`, type: `int`
- parameter: `condition`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEJump`


## Abstract Method: createJumpFar
- parameter: `jumpSite`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEJumpFar`


## Abstract Method: createJumpFar
- parameter: `jumpSite`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `condition`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEJumpFar`


## Abstract Method: createMem
- parameter: `opaddr`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEMem`


## Abstract Method: createMem
- parameter: `segment`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `opaddr`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEMem`


## Abstract Method: createNop
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IENop`


## Abstract Method: createNop
- parameter: `template`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IENop`


## Abstract Method: createOperation
- parameter: `optype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.OperationType`
- parameter: `op1`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEOperation`


## Abstract Method: createOperation
- parameter: `optype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.OperationType`
- parameter: `op1`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `op2`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEOperation`


## Abstract Method: createOperation
- parameter: `functionOptype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.FunctionOptype`
- parameter: `opnds`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric[]`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEOperation`


## Abstract Method: createResizeOperation
- parameter: `opnd`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `bitsize`, type: `int`
- parameter: `signed`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEOperation`

Description: Create a resize operation operation: truncation, zero\-extension, or sign\-extension.
parameter: opnd: the source to be extended \(`dstSize > srcSize`\) or truncated             \(`dstSize < srcSize`\)
parameter: bitsize: the destination size; should be different than the source's
parameter: signed: for extensions, else N/A
return: the operation IRE

## Abstract Method: createReturn
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEReturn`


## Abstract Method: createReturn
- parameter: `value`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEReturn`


## Abstract Method: createReturn
- parameter: `values`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEReturn`


## Abstract Method: createStackReference
- parameter: `stkVarOffset`, type: `long`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardType`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve or create a stack reference, ie a pointer to stack\-memory variable.
parameter: stkVarOffset: stack offset
parameter: type: optional type
return: 

## Abstract Method: createStackReference
- parameter: `stkVarOffset`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve or create a stack reference, ie a pointer to stack\-memory variable.
parameter: stkVarOffset: stack offset
return: 

## Abstract Method: createSwitch
- parameter: `controlExpression`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `defaultAddress`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IESwitch`


## Abstract Method: createSymbolForField
- parameter: `variable`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeFieldItem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`


## Abstract Method: createSymbolForGlobalVariable
- parameter: `variable`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeDataItem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`


## Abstract Method: createSymbolForRoutine
- parameter: `routine`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeMethodItem`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`


## Abstract Method: createUntranslatedInstruction
- parameter: `nativeAddress`, type: `long`
- parameter: `nativeMnemonic`, type: `java.lang.String`
- parameter: `irOperands`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric[]`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEUntranslatedInstruction`


## Abstract Method: createUntranslatedInstruction
- parameter: `nativeAddress`, type: `long`
- parameter: `nativeMnemonic`, type: `java.lang.String`
- parameter: `irOperands`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEUntranslatedInstruction`


## Abstract Method: createVar
- parameter: `name`, type: `java.lang.String`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Create a special routine\-scope variable. The variable id is in the  \[[SPECIAL](IEVar#IDL_SPECIAL), [SPECIAL\_END](IEVar#IDL_SPECIAL_END)\] range.  

  Clients should avoid using this method. Non\-stack routine\-scope variables created by  third\-party code should generally be in the VIRTUAL range. See the  [#createVirtualVar(String, int)](#createVirtualVar(String, int)) method.
parameter: name: 
parameter: bitsize: 
return: 

## Abstract Method: createVirtualVar
- parameter: `name`, type: `java.lang.String`
- parameter: `bitsize`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Create a virtual routine\-scope variable. The variable id is in the  \[[VIRTUAL](IEVar#IDL_VIRTUAL), [VIRTUAL\_END](IEVar#IDL_VIRTUAL_END)\] range.
parameter: name: 
parameter: bitsize: 
return: 

## Abstract Method: getCfg
- return type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`


## Abstract Method: getConverter
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IEConverter<?>`


## Abstract Method: getCopiesOfVariable
- parameter: `id`, type: `int`
- return type: `java.util.Set<java.lang.Integer>`

Description: Get the set of all variables that are copies or partial copies of the provided input id. The  input id may be of a copy variable itself, in which case, this method is equivalent as  retrieving the copies of its source.  

  The copies returned is a list of vars entirely contained in the input var.
parameter: id: input id
return: a set of id, including self if it was a copy

## Abstract Method: getCopiesUsingVariable
- parameter: `id`, type: `int`
- return type: `java.util.Set<java.lang.Integer>`

Description: Get the set of all variables making use of the provided variable.  

  The copies returned is a list of vars whose overlap with the input var is non\-null.
parameter: id: input id
return: a set of id, including self if it was a copy

## Abstract Method: getData
- parameter: `key`, type: `java.lang.Object`
- return type: `java.lang.Object`

Description: Retrieve a piece of transient data.
parameter: key: 
return: 

## Abstract Method: getDecompiler
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.INativeDecompilerContext`

Description: Convenience method to retrieve a reference to the decompiler that owns this context. That  is, the decompiler that owns the IR converter that originally created this IR context\).
return: a reference to a decompiler \(likely, a [INativeDecompilerUnit](com.pnfsoftware.jeb.core.units.code.asm.decompiler.INativeDecompilerUnit.md)\), or null

## Abstract Method: getDuplicatesForRegister
- parameter: `regId`, type: `int`
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`

Description: Retrieve the list of duplicates \(mirror, secondary dups\) associated to a register.
parameter: regId: id of a register\-EVar
return: a list \(possibly empty\), or null if the id was not a legal register\-EVar id

## Abstract Method: getGlobalContext
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.IEGlobalContext`


## Abstract Method: getInputVariableForRegister
- parameter: `dfa`, type: `com.pnfsoftware.jeb.core.units.code.IDFA<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `nativeRegId`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: 
parameter: dfa: 
parameter: nativeRegId: the id of a native register \(per the processor's register bank definition;             do not confuse this with [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)\-register id\)
return: 

## Abstract Method: getInputVariableForRegister
- parameter: `dfa`, type: `com.pnfsoftware.jeb.core.units.code.IDFA<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `reg`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: 
parameter: dfa: 
parameter: reg: 
return: 

## Abstract Method: getIntermediateOffsetsMappingToNativeAddress
- parameter: `address`, type: `long`
- return type: `java.util.List<java.lang.Long>`


## Abstract Method: getIntermediateOffsetsMappingToNativeAddresses
- parameter: `addresses`, type: `java.util.Collection<java.lang.Long>`
- return type: `java.util.List<java.lang.Long>`


## Abstract Method: getMemoryVariables
- return type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`

Description: Retrieve the list of memory variables used by this context: stack variables and global  variables.
return: 

## Abstract Method: getNativeContext
- return type: `com.pnfsoftware.jeb.core.units.code.asm.INativeContext`


## Abstract Method: getNotes
- return type: `java.util.List<java.lang.String>`

Description: 
return: 

## Abstract Method: getOutputVariableForRegister
- parameter: `dfa`, type: `com.pnfsoftware.jeb.core.units.code.IDFA<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `exitAddress`, type: `long`
- parameter: `nativeRegId`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: 
parameter: dfa: 
parameter: exitAddress: 
parameter: nativeRegId: the id of a native register \(per the processor's register bank definition;             do not confuse this with [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)\-register id\)
return: 

## Abstract Method: getOutputVariableForRegister
- parameter: `dfa`, type: `com.pnfsoftware.jeb.core.units.code.IDFA<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `exitAddress`, type: `long`
- parameter: `reg`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: 
parameter: dfa: 
parameter: exitAddress: 
parameter: reg: 
return: 

## Abstract Method: getProgramCounter
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve the PC variable used by this method.
return: 

## Abstract Method: getProgramCounterId
- return type: `int`

Description: Convenience method.
return: 

## Abstract Method: getPrototype
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardPrototype`

Description: Convenience method.
return: 

## Abstract Method: getRegisterMirror
- parameter: `reg`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve or create the mirror \- that is, the first full copy, in the  \[[IEVar#IDL_MIRROR](IEVar#IDL_MIRROR), [IEVar#IDL_MIRROR_END](IEVar#IDL_MIRROR_END)\[ range \- of the provided register.  

  Note: A register [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md) is global and non\-typeable. A mirror [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md) is local  and typeable.
parameter: reg: a register [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md) \- the method will throw if not
return: the mirror [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md), never null

## Abstract Method: getRoutine
- return type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeMethodItem`


## Abstract Method: getRoutineInputVariables
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric>`

Description: Retrieve the IR expressions holding the routine's parameters. May be used only after a  decompilation has fully completed.
return: 

## Abstract Method: getRoutineVariablesInRange
- parameter: `idStart`, type: `int`
- parameter: `idEnd`, type: `int`
- return type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`

Description: 
parameter: idStart: 
parameter: idEnd: 
return: 

## Abstract Method: getSourceForVariable
- parameter: `id`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.VarSrc`

Description: 
parameter: id: a copy\-var id
return: the source or null \(only copy\-var have sources\)

## Abstract Method: getStackManager
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStackManager`

Description: Retrieve the manager for local IEVars representing physical stack variables \(in the general  sense, ie memory slots\).
return: 

## Abstract Method: getStackPointer
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve the SP variable used by this method.
return: 

## Abstract Method: getStackPointerId
- return type: `int`

Description: Convenience method.
return: 

## Abstract Method: getStackReference
- parameter: `stkVarOffset`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve a stack reference, i.e. a pointer to stack\-memory variable.
parameter: stkVarOffset: stack offset
return: a local symbol var, null if none

## Abstract Method: getStackVariable
- parameter: `offset`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve the stack variable at the provided offset.
parameter: offset: 
return: 

## Abstract Method: getStackVariables
- return type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`

Description: Retrieve the list of memory stack variables used by this context.
return: 

## Abstract Method: getStackVariables
- parameter: `offsetStart`, type: `int`
- parameter: `offsetEnd`, type: `int`
- return type: `java.util.Collection<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar>`

Description: Retrieve all defined stack variables whose \(starting\) offset are included in the provided  range. Note that the last variable may span outside the range.
parameter: offsetStart: 
parameter: offsetEnd: must be greater than the start value
return: 

## Abstract Method: getStatements
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`

Description: Retrieve the raw list of converted IR\-statements. **Beware:** this list gets stale very  quickly, as the decompiler deals with and optimizes an IR\-CFG \(initially built from this  list\), instead.
return: the initial IR\-statements raw list

## Abstract Method: getUnderlyingRegisterId
- parameter: `varid`, type: `int`
- return type: `java.lang.Integer`

Description: Retrieve the id of the underlying IEVar\-register used to hold this variable.
parameter: varid: a variable id, which may or not be a register var
return: an id, null if the input variable does not originate from a register, or if it does          not fit on a single physical register \(which means that if the input varid is for a          copy of a pair of registers, this method will return null\)

## Abstract Method: getVariableById
- parameter: `id`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve a variable \(routine\-scope or global\-scope\) by id.
parameter: id: var id
return: the variable or null

## Abstract Method: getVariableByName
- parameter: `name`, type: `java.lang.String`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Retrieve a routine\-scope variable by name.
parameter: name: var name
return: the variable or null

## Abstract Method: getWildcardTypeManager
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardTypeManager`


## Abstract Method: invalidateDataFlowAnalysis

Description: Invalidate all data flow analysis for the IR\-CFG managed by this context. Convenience method.

## Abstract Method: isAllowUnsafeAnalysis
- return type: `boolean`


## Abstract Method: log
- parameter: `format`, type: `java.lang.String`
- parameter: `args`, type: `java.lang.Object[]`


## Abstract Method: logUnsafeOpt
- parameter: `format`, type: `java.lang.String`
- parameter: `args`, type: `java.lang.Object[]`


## Abstract Method: removeNote
- parameter: `note`, type: `java.lang.String`
- return type: `boolean`

Description: 
parameter: note: 
return: 

## Abstract Method: removeStackReference
- parameter: `stkVarOffset`, type: `long`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Remove a stack reference.
parameter: stkVarOffset: 
return: 

## Abstract Method: retrieveVariableForRegister
- parameter: `reg`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `filters`, type: `java.util.Collection<java.lang.Integer>`
- parameter: `createIfNotFound`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: 
parameter: reg: a physical reg [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md) or slice of physical register [IEVar](com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar.md)
parameter: filters: list of candidates matching var ids
parameter: createIfNotFound: create a copy if not found
return: a copy of the physical input

## Abstract Method: setCfg
- parameter: `cfg`, type: `com.pnfsoftware.jeb.core.units.code.asm.cfg.CFG<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`


## Abstract Method: setCustomPC
- parameter: `PC`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Set a PC override.
parameter: PC: program counter variable

## Abstract Method: setCustomSP
- parameter: `SP`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEVar`

Description: Set a SP override.
parameter: SP: stack pointer variable

## Abstract Method: setData
- parameter: `key`, type: `java.lang.Object`
- parameter: `value`, type: `java.lang.Object`

Description: Store a piece of transient data.
parameter: key: 
parameter: value: 

## Abstract Method: setPrototype
- parameter: `prototype`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardPrototype`

Description: Convenience method.
parameter: prototype: 

## Abstract Method: setRoutine
- parameter: `routine`, type: `com.pnfsoftware.jeb.core.units.code.asm.items.INativeMethodItem`


## Abstract Method: setStatements
- parameter: `statements`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`

Description: Set the converted list of raw IR\-statements. A list of statements can only be assigned once,  else this method will throw [IllegalStateException](java.lang.IllegalStateException) \(however, this method may be called  with the current list\).
parameter: statements: a list of statements coming out of a converter

## Abstract Method: setStatements
- parameter: `statements`, type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEStatement>`
- parameter: `verifyStatements`, type: `boolean`
- parameter: `replaceLeftAssignSlices`, type: `boolean`
- parameter: `buildCfg`, type: `boolean`

Description: Set the converted list of raw IR\-statements.
parameter: statements: a list of statements coming out of a converter
parameter: verifyStatements: optional
parameter: replaceLeftAssignSlices: optional
parameter: buildCfg: optional

## Abstract Method: setTypeForSame
- parameter: `exp`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`
- parameter: `type`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IWildcardType`


## Abstract Method: usesCopyVars
- return type: `boolean`

Description: 
return: 

