scale.clef.stmt
Class BlockStmt

java.lang.Object
  extended by scale.common.Root
      extended by scale.clef.Node
          extended by scale.clef.stmt.Statement
              extended by scale.clef.stmt.BlockStmt
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class BlockStmt
extends Statement

This class represents a C-style block statement.

$Id: BlockStmt.java,v 1.45 2007-05-10 16:48:05 burrill Exp $

Copyright 2008 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.


Constructor Summary
BlockStmt()
           
BlockStmt(Vector<Statement> stmts)
           
 
Method Summary
 int addDeclStmt(DeclStmt s)
          Add a declaration statement to a block.
 void addStmt(Statement s)
          Add a statement to a block.
 boolean containsLoopStmt()
          Return true if this statement is a loop statement or contains a loop statement.
 void dump(java.lang.String indents, java.io.PrintStream out)
           
 Node getChild(int i)
          Return the specified AST child of this node.
 SymtabScope getScope()
          Return the symbol table scope of the block statement.
 Statement getStmt(int i)
          Return the specified statement in the block.
 boolean hasReturnStmt()
          Return true if this statement is, or contains, a return statement or a call to exit().
 void insertStmt(Statement s, int i)
          Add a statement to a block before the specified statment.
 int numChildren()
          Return the number of AST children of this node.
 int numStmts()
          Return the number of statements in the block.
 int numTotalStmts()
          Return the number of statements represented by this statement.
 Statement removeLastStatement()
          Remove the last statement from the block statement.
 void setScope(SymtabScope scope)
          Specify the symbol table scope for the block statement.
 void setSourceLineNumber(int lineNumber)
          Set the source line number associated with this node or -1 if not known.
 void visit(Predicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.clef.stmt.Statement
getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getPragma, getSourceLineNumber, setPragma
 
Methods inherited from class scale.clef.Node
getCoreType, getDecl, getType, setAnnotationLevel, setReportLevel, toString, toString, toStringChildren, toStringSpecial
 
Methods inherited from class scale.common.Root
addAnnotation, allAnnotations, allMatchingAnnotations, getAnnotation, getDisplayName, getDisplayString, getNodeCount, getNodeID, hasAnnotation, hasEqualAnnotation, hashCode, removeAnnotation, removeAnnotations, toStringAnnotations, toStringClass, trace, trace, trace
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

BlockStmt

public BlockStmt()

BlockStmt

public BlockStmt(Vector<Statement> stmts)
Method Detail

setScope

public void setScope(SymtabScope scope)
Specify the symbol table scope for the block statement.


getScope

public SymtabScope getScope()
Return the symbol table scope of the block statement.


visit

public void visit(Predicate p)
Description copied from class: Node
Process a node by calling its associated routine. See the "visitor" design pattern in Design Patterns: Elements of Reusable Object-Oriented Software by E. Gamma, et al, Addison Wesley, ISBN 0-201-63361-2.

Each class has a visit(Predicate p) method. For example, in class ABC:

   public void visit(Predicate p)
   {
     p.visitABC(this);
   }
 
and the class that implements Predicate has a method
   public void visitABC(Node n)
   {
     ABC a = (ABC) n;
     ...
   }
 
Thus, the class that implements Predicate can call
   n.visit(this);
 
where n is a Node sub-class without determining which specific sub-class n is. The visit pattern basically avoids implementing a large switch statement or defining different methods in each class for some purpose.

Overrides:
visit in class Statement
See Also:
Predicate

numStmts

public int numStmts()
Return the number of statements in the block.


getStmt

public Statement getStmt(int i)
Return the specified statement in the block.


addDeclStmt

public int addDeclStmt(DeclStmt s)
Add a declaration statement to a block. This is used primarily to add temproary variable declaration statements. The statement is added after the last previous declaration statment.

Returns:
the index of the statement

addStmt

public void addStmt(Statement s)
Add a statement to a block. The statement is added to the end.


insertStmt

public void insertStmt(Statement s,
                       int i)
Add a statement to a block before the specified statment. This is used primarily to add temproary variable declaration statements.


removeLastStatement

public Statement removeLastStatement()
Remove the last statement from the block statement.

See Also:
StatementOp

getChild

public Node getChild(int i)
Return the specified AST child of this node.

Overrides:
getChild in class Node

numChildren

public int numChildren()
Return the number of AST children of this node.

Overrides:
numChildren in class Node

setSourceLineNumber

public final void setSourceLineNumber(int lineNumber)
Set the source line number associated with this node or -1 if not known.

Overrides:
setSourceLineNumber in class Statement

hasReturnStmt

public boolean hasReturnStmt()
Return true if this statement is, or contains, a return statement or a call to exit().

Overrides:
hasReturnStmt in class Statement

numTotalStmts

public int numTotalStmts()
Return the number of statements represented by this statement. Most statements return 1. A block statement returns sum of the number of statements in each statement in the block.

Overrides:
numTotalStmts in class Statement

containsLoopStmt

public boolean containsLoopStmt()
Return true if this statement is a loop statement or contains a loop statement.

Overrides:
containsLoopStmt in class Statement

dump

public void dump(java.lang.String indents,
                 java.io.PrintStream out)
Overrides:
dump in class Statement