# Class: com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.CUtil

Utility methods to manipulate [AST elements](ICElement).

## Static Method: add
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: add
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `c`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: andB
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: andL
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: canFallthrough
- parameter: `currentStmt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `fallthroughStmt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `ignoreBreak`, type: `boolean`
- return type: `boolean`

Description: Check if the current statement **can** fallthrough to the next statement, i.e. if the first one can redirect execution to the second one \(directly or indirectly\) **when these two statements are next to each other**. If the answer is false, the second statement can not possibly be executed once its predecessor has been executed. 

 **Note**: this is a conservative analysis \(= false is a correct result, while true might indicate an unknown case\). In particular, if the fallthrough statement is a label or a compound statement, the answer is true.
parameter: currentStmt: 
parameter: fallthroughStmt: the statement immediately following the current statement in the block
parameter: ignoreBreak: indicate that the break should be ignored \(in particular, when not in loop            or in a switch context\)
return: 

## Static Method: containsBreak
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`


## Static Method: containsLabel
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`


## Static Method: containsStatement
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `class_`, type: `java.lang.Class<? extends com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement>`
- return type: `boolean`


## Static Method: countAllSubElements
- parameter: `elem`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `int`

Description: Recursively count the total number of sub\-elements in the given element \(see [ICElement#getSubElements()](ICElement#getSubElements())\).

## Static Method: div
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: eq
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: findParent
- parameter: `root`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`

Description: Retrieve the parent of an AST element \(or first parent, if the element is reusable and has potentially multiple parents \- e.g. [ICIdentifier](ICIdentifier)\).
parameter: root: a root element, typically, an [ICMethod](ICMethod)
parameter: elt: the element for which the first parent is to be found
return: the parent or null

## Static Method: flipIfElse
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `of`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperatorFactory`
- return type: `boolean`

Description: Check if a statement is a if\-statement with two blocks, including a default block, and reverse the condition. Effectively, `if(A){X}else{Y}` is transformed to `if(!A){Y}else{X}}`.
parameter: stm: 
parameter: of: 
return: success indicator

## Static Method: format
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `java.lang.String`

Description: Generate a simple deep formatting of the provided element.
parameter: elt: AST element
return: 

## Static Method: ge
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: getBreakingFlowResult
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.CUtil.BreakFlowResult`

Description: Indicate if next instruction will be executed. This is not an in\-depth analysis, meaning that if there if a `if (true) return; b = 2;`, the method will return [BreakFlowStatus#BOTH](BreakFlowStatus#BOTH) \(predicates are not examined, only branches and based on last instruction\).
parameter: e: 
return: 

## Static Method: getConstantAsLong
- parameter: `expr`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICConstant<?>`
- return type: `java.lang.Long`

Description: Retrieve the value associated to an [ICConstant](ICConstant) as a Long.
parameter: expr: 
return: constant value, null if none could be retrieved

## Static Method: getDefinition
- parameter: `element`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICDecl`

Description: Get the [ICDecl](ICDecl) possibly contained in a statement; either the statement itself, or the left\-side of an assignment.
parameter: element: 
return: definition, null if it could not be retrieved

## Static Method: getDefinitionInitialValue
- parameter: `element`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`

Description: Get the initial value of a defined variable, from its definition statement.
parameter: element: 
return: the initial value set to a defined variable, null if none

## Static Method: getFirstRealStatement
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICBlock`
- parameter: `i`, type: `int`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`

Description: Get the next "real" statement to be executed in the block, starting at the given index inclusively. 

 In particular, this method skips over: 
 
- the `do {` part of a do\-while block
-  
- the `while(true) {` part of a while block
-  
- the `if(true) {` part of a conditional statement
-  

 Note: label statements are not skipped over.
parameter: b: 
parameter: i: the index in the block, at which to start the search
return: the next statement to be executed, or null if none were found

## Static Method: getFirstRealStatementEx
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `first`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`

Description: This method does two things: 
 
- locating the statement provided, and skipping over it \(note: if it is a compound statement, the entire compound is skipped\) 
- the next *real* statement that immediately follows is returned \(see [#getFirstRealStatement(ICBlock, int)](#getFirstRealStatement(ICBlock, int))\). 

  Examples:  

```

 stm1;  // first
 while(true) {
   stm2;  // next
   ...
 
```
  Or:  

```

 stm1;  // first
 do {
   stm2;  // next
   ...
 
```
  Or:  

```

 if(...) {
   while(...) {  // first
      ...;
   }
 }
 stm2;  // next
 
```
parameter: m: 
parameter: first: 
return: the next statement to be executed, or null if none were found

## Static Method: getGotoLabel
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICLabel`

Description: Check if the statement is a [ICGoto](ICGoto) to return the label; else, return null.

## Static Method: getIfGotoTarget
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICLabel`

Description: Check if the statement follows the pattern `if(P){goto x;}` and if so, returns `x`.
parameter: stm: 
return: the label pointed by the goto if the statement follows the pattern, null otherwise

## Static Method: getOperation
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `optypes`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType[]`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType`


## Static Method: getOperation
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`
- parameter: `optypes`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType[]`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType`


## Static Method: getParentBlock
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`

Description: Retrieve parent block or null if no parent was found \(or processed statement is the top body of the [ICMethod](ICMethod)\)
parameter: m: method to check
parameter: b: statement to look for parent
return: parent block, null if none were found

## Static Method: getPreviouslyExecutedStatements
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `first`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `java.util.List<com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement>`

Description: Attempt to retrieve the previously executed statements from a given statement. 

 Note that there is no look up for goto and jump so the previous statement of a label will only be the previous instruction as seen in the method. This method returns null when previous statements are too complicated to retrieve.
parameter: m: 
parameter: first: 
return: the possible previously executed statements, null if none were found

## Static Method: gt
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: hasEmptyBranch
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICIfStm`
- return type: `boolean`

Description: Check if a if\-statement has an empty branch \(including the default one\).

## Static Method: hasNoCall
- parameter: `elem`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `boolean`

Description: Check if no [ICCall](ICCall) is done by this [ICElement](ICElement).
parameter: elem: 
return: true if no [ICCall](ICCall) is done, false otherwise

## Static Method: hasNoSideEffects
- parameter: `elem`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `boolean`

Description: Check if an [ICElement](ICElement) can not possibly modify variables. This method is intended to be safe, e.g. it will return false on [ICCall](ICCall).
parameter: elem: 
return: true if no variables would be modified by executing the element, false otherwise

## Static Method: isBreakTo
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `target`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICLabel`
- return type: `boolean`

Description: Check if the statement is a [ICBreak](ICBreak) to the given label.

## Static Method: isBreakingFlow
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.CUtil.BreakFlowStatus`


## Static Method: isClassMethodField
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `boolean`

Description: Check if the element is either an [ICClass](ICClass), an [ICMethod](ICMethod) or an [ICField](ICField)

## Static Method: isContainingLabel
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `targetLabel`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICLabel`
- return type: `boolean`

Description: Check if a statement contains a given label; compound statements are recursively processed to search for the label.

## Static Method: isDeclareAndAssign
- parameter: `element`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `boolean`


## Static Method: isDoWhileTrue
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`

Description: Check if a statement is a do\-while loop, whose predicate is literal True.

## Static Method: isGotoTo
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `target`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICLabel`
- return type: `boolean`

Description: Check if the statement is a [ICGoto](ICGoto) to the given label.

## Static Method: isIfBranch
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`

Description: Check if the statement follows the pattern `if(P){BRANCH;}`, where `BRANCH` is a sole branch instruction.

## Static Method: isIfElse
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`

Description: Check if a statement is a if\-statement with two blocks, including a default block.

## Static Method: isIfNoElse
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`

Description: Check if a statement follows the pattern `if(P){ }[else if(...){}]*`, i.e. a if\-statement with possibly multiple blocks but no default `else` block.

## Static Method: isIntegerConstant
- parameter: `expr`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `boolean`

Description: Check if the element is a [ICConstantInteger](ICConstantInteger)

## Static Method: isIntegerValue
- parameter: `expr`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `value`, type: `long`
- return type: `boolean`

Description: Check if the element is a [ICConstantInteger](ICConstantInteger) equals to the given value.

## Static Method: isOperation
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `optypes`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.COperatorType[]`
- return type: `boolean`


## Static Method: isPlainBreak
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`

Description: Check if the statement is a [ICBreak](ICBreak) without label.

## Static Method: isWhileTrue
- parameter: `stm`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- return type: `boolean`

Description: Check if a statement is a while loop, whose predicate is literal True.

## Static Method: le
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: lt
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: mul
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: ne
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: notB
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`


## Static Method: notL
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`


## Static Method: notLDeepReplace
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`


## Static Method: orB
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: orL
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: rem
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: replaceSubElementRecurse
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- parameter: `oldElement`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `newElement`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `int`

Description: Recursively replace sub\-elements of an element , using equals\(\) equality.
parameter: elt: 
parameter: oldElement: 
parameter: newElement: 
return: number of replacements done

## Static Method: resolveNotOperation
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `e`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`
- parameter: `parent`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICElement`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`


## Static Method: shl
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: shr
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: sub
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: ushr
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


## Static Method: visitICStatementDepthPost
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICVisitor`
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICBlock`
- parameter: `from`, type: `int`
- parameter: `results`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.CVisitResults`
- return type: `boolean`


## Static Method: visitICStatementDepthPost
- parameter: `visitor`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICVisitor`
- parameter: `elt`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICStatement`
- parameter: `results`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.CVisitResults`
- return type: `boolean`


## Static Method: xorB
- parameter: `m`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICMethod`
- parameter: `a`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- parameter: `b`, type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICExpression`
- return type: `com.pnfsoftware.jeb.core.units.code.asm.decompiler.ast.ICOperation`


