|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectscale.common.Root
scale.clef.Node
scale.clef.expr.Expression
scale.clef.expr.TernaryOp
scale.clef.expr.ExpressionIfOp
public class ExpressionIfOp
This class is used to represents the C conditional operator.
$Id: ExpressionIfOp.java,v 1.31 2005-09-09 15:04:44 burrill Exp $
Copyright 2005 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.
This class represents the C ?: operator.
The result type is the type of the second expression (the types of
the second and third expressions must be the same).
| Constructor Summary | |
|---|---|
ExpressionIfOp(Type type,
Expression test,
Expression trueExpr,
Expression falseExpr)
|
|
| Method Summary | |
|---|---|
Literal |
getConstantValue()
Return the constant value of the expression. |
boolean |
hasTrueFalseResult()
Return true if the result of the expression is either true (1) or false (0). |
boolean |
isSimpleOp()
Return true if compilation of this expression will not result in the generation of a CFG node. |
void |
visit(Predicate p)
Process a node by calling its associated routine. |
| Methods inherited from class scale.clef.expr.TernaryOp |
|---|
containsDeclaration, equivalent, getChild, getDeclList, getExpr1, getExpr2, getExpr3, numChildren, setExpr1, setExpr2, setExpr3 |
| Methods inherited from class scale.clef.expr.Expression |
|---|
canonical, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getPointedToCore, getType, setType, toStringSpecial |
| Methods inherited from class scale.clef.Node |
|---|
getDecl, getSourceLineNumber, setAnnotationLevel, setReportLevel, setSourceLineNumber, toString, toString, toStringChildren |
| 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 |
|---|
public ExpressionIfOp(Type type,
Expression test,
Expression trueExpr,
Expression falseExpr)
| Method Detail |
|---|
public void visit(Predicate p)
Node
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.
visit in class TernaryOpPredicatepublic boolean isSimpleOp()
ExpressionCFG node.
For example, (a && b) may require a branch to represent and
i++ requires a store.
isSimpleOp in class TernaryOppublic boolean hasTrueFalseResult()
hasTrueFalseResult in class Expressionpublic Literal getConstantValue()
getConstantValue in class ExpressionLattice
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||