# Interface: com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEAssign

IR expression representing an assignment. A special case is the assignment to the PC \(see below\). 

 The only valid destination operands of an EAssign are:
 \- `EVar`, including PC
 \- `EMem`
 \- `ESlice(any_of_the_above_recursively_except_PC)`
 \- `ECompose(any_of_the_above_recursively_except_PC)`
 \- `EGroupElt`
 

 Examples of valid destinations:
 \- REG1, REG2
 \- \[REG1\], \[any\_memory\_address\]
 \- ESlice\(REG1\), ESlice\(ESlice\(REG2\)\)
 \- ECompose\(REG1, REG2, REG3\)
 

 The following are illegal destinations:
 \- EImm, ERange or any other irrelevant IRE for a destination\-of\-assignment position
 \- ESlice\(PC, REG1\)
 \- EComposition\(REGX, PC, ...\)

## Method: downgradeCallToBreak
- return type: `boolean`

Description: Downgrade a call\-to\-sub to a simple flow\-breaker. The source cannot be a conditional IR. Important\! The caller is responsible for updating the CFG to maintain consistency with the IR, e.g. the fall\-through edge may have to be removed. 

 On success, all data flow analysis objects are automatically invalidated.
return: success indicator

## Method: duplicateWithNewOperands
- 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`


## Method: evaluate
- parameter: `state`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.EState`
- parameter: `skipPCUpdate`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEImm`


## Method: getBranchDetails
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEBranchDetails`

Description: Retrieve the branching details of a PC\-assign, if any.
return: may be null

## Method: getBranchDetails
- parameter: `createIfNecessary`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEBranchDetails`

Description: Get or create the branching details of a PC\-assign. 

 If a creation is necessary, the newly\-created branch\-details object is attached to this statement \(and it will be returned by subsequent calls to [#getBranchDetails()](#getBranchDetails())\), and all data flow analysis objects are automatically invalidated.
parameter: createIfNecessary: 
return: never null

## Method: getBreakingFlow
- parameter: `instructionAddress`, type: `long`
- parameter: `keepNativeAddresses`, type: `boolean`
- return type: `com.pnfsoftware.jeb.core.units.code.IFlowInformation`

Description: 
parameter: instructionAddress: 
parameter: keepNativeAddresses: 
return: 

## Method: getDstOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: Retrieve the destination operand of this assignment.
return: 

## Method: getLeftOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: Retrieve the destination operand of this assignment.
return: 

## Method: getRightOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: Retrieve the source operand of this assignment.
return: 

## Method: getSrcOperand
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEGeneric`

Description: Retrieve the source operand of this assignment.
return: 

## Method: isBranching
- return type: `boolean`

Description: 
return: 

## Method: isBreakingFlow
- return type: `boolean`

Description: 
return: true if this IR is a simple flow\-breaker PC\-assign

## Method: isRoutineCall
- return type: `boolean`

Description: 
return: true if this IR is a call\-to\-sub PC\-assign

## Method: isTentativeCall
- return type: `boolean`

Description: 
return: true if this IR is a *tentative* call\-to\-sub PC\-assign \(this method will         return false if [#isRoutineCall()](#isRoutineCall()) returns false\)

## Method: setBranchDetails
- parameter: `branchDetails`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.IEBranchDetails`
- return type: `boolean`

Description: Set branching instructions for a PC\-assign. 

 When setting this value, all data flow analysis objects are automatically invalidated.
parameter: branchDetails: 
return: change indicator

## Method: upgradeBreakToCall
- parameter: `instructionAddress`, type: `long`
- return type: `boolean`

Description: Upgrade a flow\-breaker to a call\-to\-sub or potential \(non\-returning\) call\-to\-sub. The source cannot be a conditional IR. If the target is unknown, the PC\-assign may be converted to a potential call; if there there is a single target matching the fall\-through instruction, the PC\-assign may be converted to a call; else the method will fail. 

 On success, all data flow analysis objects are automatically invalidated.
return: success indicator

