Skip to main content

Block Statement

Implements a class to model a solidity block statement

Methods

  • getAStmt()
  • getStmt(int n)
  • getLastStmt()
  • getLastStmtIn()
  • getNumStmt()
  • isEmpty()
  • getIndexOfStmt(Stmt s)
  • toString()

getAStmt()

Stmt getAStmt() { result = this.getAFieldOrChild() }

Gets a body statement of this block.

{ int a; int b = 1; a = b; }

getAStmt() would have 3 results, for the declarations of a and b and for the expression statement a = b.

getStmt(int n)

Stmt getStmt(int n) { result = this.getChild(n) }

Gets the nth body statement of this block, indexed from 0.. For example, for the block

{ int a; int b = 1; a = b; }

getStmt(2) result is the expression statement a = b.

getLastStmt()

Stmt getLastStmt() { result = this.getStmt(this.getNumStmt() - 1) }

Gets the last body statement of this block. For example, for the block

{ int a; int b = 1; a = b; }

getLastStmt() returns the expression statement a = b.

getLastStmtIn()

Stmt getLastStmtIn() {
if this.getLastStmt().getChild() instanceof BlockStmt
then result = this.getLastStmt().getChild().(BlockStmt).getLastStmtIn()
else result = this.getLastStmt()
}

Gets the last body statement of the block. If the last statement is itself a block, returns the last statement of that block, and so on. For example, for the block

{ int a; int b = 1; { a = b; } }

getLastStmtIn() results in the expression statement a = b.

getNumStmt()

int getNumStmt() { result = count(this.getAStmt()) }

Gets the number of body statements in this block. For example, for the block

{ int a; int b = 1; a = b; }

getNumStmt() gives 3.

isEmpty()

predicate isEmpty() { this.getNumStmt() = 0 }

Holds if the block has no statements. For the block

{// a comment}

It returns True.

getIndexOfStmt(Stmt s)

int getIndexOfStmt(Stmt s) { this.getStmt(result) = s }

Gets the index of the given statement within this block, indexed from 0. For example, for the block

{ int a; int b = 1; a = b; }

if s is the expression statement a = b then getIndexOfStmt(s) has result 2.