scale.clef.expr
Class IdValueOp

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
                  extended by scale.clef.expr.IdValueOp
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class IdValueOp
extends IdReferenceOp

A class which represents the value of a Declaration.

$Id: IdValueOp.java,v 1.13 2007-06-04 00:30:13 burrill Exp $

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


Constructor Summary
IdValueOp(Declaration decl)
          Create the representation of the value of the specified declaration.
 
Method Summary
 Literal getConstantValue()
          This method suite computes the value of a constant expression.
 java.lang.String getDisplayLabel()
          Return short description of current node.
 boolean isConstant()
          Returns true if the IdValueOp represents a constant value.
 java.lang.String toStringSpecial()
          This method allows sub-classes to provide class specific stuff to the string.
 void visit(Predicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.clef.expr.IdReferenceOp
containsDeclaration, equivalent, getDecl, getDeclList, setDecl
 
Methods inherited from class scale.clef.expr.Expression
canonical, getCoreType, getDisplayColorHint, getDisplayShapeHint, getPointedToCore, getType, hasTrueFalseResult, isSimpleOp, setType
 
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

IdValueOp

public IdValueOp(Declaration decl)
Create the representation of the value of the specified declaration.

Method Detail

getDisplayLabel

public java.lang.String getDisplayLabel()
Return short description of current node.

Specified by:
getDisplayLabel in interface DisplayNode
Overrides:
getDisplayLabel in class Expression

toStringSpecial

public java.lang.String toStringSpecial()
Description copied from class: Node
This method allows sub-classes to provide class specific stuff to the string.

Overrides:
toStringSpecial 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 IdReferenceOp
See Also:
Predicate

isConstant

public boolean isConstant()
Returns true if the IdValueOp represents a constant value.


getConstantValue

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

Okay, this is a bit messy. For IdValueOps, 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 IdValueOps (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 IdReferenceOp
See Also:
IdValueOp