scale.clef.expr
Class IdReferenceOp

java.lang.Object
  extended by scale.common.Root
      extended by scale.clef.Node
          extended by scale.clef.expr.Expression
              extended by scale.clef.expr.IdReferenceOp
All Implemented Interfaces:
AnnotationInterface, DisplayNode
Direct Known Subclasses:
IdAddressOp, IdValueOp

public abstract class IdReferenceOp
extends Expression

A class which represents a reference to a Declaration.

$Id: IdReferenceOp.java,v 1.43 2007-08-28 17:58:21 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
IdReferenceOp(Type type, Declaration decl)
           
 
Method Summary
 boolean containsDeclaration(Declaration decl)
          Return true if this expression contains a reference to the variable.
 boolean equivalent(java.lang.Object exp)
          Return true if the two expressions are equivalent.
 Literal getConstantValue()
          This method suite computes the value of a constant expression.
 Declaration getDecl()
          Return the declaration associated with this reference.
 void getDeclList(java.util.AbstractCollection<Declaration> varList)
          Add all declarations referenced in this expression to the collection.
protected  void setDecl(Declaration decl)
          Specify the declaration associated with this reference.
 void visit(Predicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.clef.expr.Expression
canonical, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getPointedToCore, getType, hasTrueFalseResult, isSimpleOp, setType, toStringSpecial
 
Methods inherited from class scale.clef.Node
getChild, getSourceLineNumber, numChildren, 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

IdReferenceOp

public IdReferenceOp(Type type,
                     Declaration decl)
Method Detail

equivalent

public boolean equivalent(java.lang.Object exp)
Return true if the two expressions are equivalent.

Overrides:
equivalent in class Expression

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 Expression
See Also:
Predicate

getDecl

public final Declaration getDecl()
Return the declaration associated with this reference.

Overrides:
getDecl in class Node

setDecl

protected final void setDecl(Declaration decl)
Specify the declaration associated with this reference.


getConstantValue

public Literal getConstantValue()
This method suite computes the value of a constant expression.

Okay, this is a bit messy. For IdReferenceOps, we have to ensure that the declared entity is a constant. The fact that this is a constant is stored with the the type.

These method instances currently handle all IdReferenceOps (i.e., the subclasses of this class). If SelectScopeOp and SelectGlobalScopeOp ever get completed, this may have to be moved down into IdReference.

Overrides:
getConstantValue in class Expression
See Also:
Lattice

containsDeclaration

public final boolean containsDeclaration(Declaration decl)
Return true if this expression contains a reference to the variable.

Overrides:
containsDeclaration in class Expression

getDeclList

public void getDeclList(java.util.AbstractCollection<Declaration> varList)
Description copied from class: Expression
Add all declarations referenced in this expression to the collection.

Specified by:
getDeclList in class Expression