scale.clef.decl
Class ValueDecl

java.lang.Object
  extended by scale.common.Root
      extended by scale.clef.Node
          extended by scale.clef.decl.Declaration
              extended by scale.clef.decl.ValueDecl
All Implemented Interfaces:
java.lang.Comparable, AnnotationInterface, DisplayNode
Direct Known Subclasses:
EnumElementDecl, FieldDecl, VariableDecl

public abstract class ValueDecl
extends Declaration

This class represents a declaration that has an initial value.

$Id: ValueDecl.java,v 1.42 2007-03-21 13:31:52 burrill Exp $

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


Constructor Summary
protected ValueDecl(java.lang.String name, Type type, Expression initialValue)
          Create a ValueDecl with the specified name, type, and value.
 
Method Summary
 Node getChild(int i)
          Return the specified AST child of this node.
 Literal getConstantValue()
          Return the constant value of the expression.
 Expression getValue()
          Return the value associated with this declaration.
 boolean isConst()
          Return true if the declaration is constant.
 boolean isValueDecl()
          Return true if ValueDecl instance.
 int numChildren()
          Return the number of AST children of this node.
 ValueDecl returnValueDecl()
          Return a ValueDecl instance or null.
 void setValue(Expression value)
          Specify the value associated with this declaration.
 void visit(Predicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.clef.decl.Declaration
accessibility, addressTaken, compareTo, copy, getActualType, getAddressRegister, getAlias, getCoreType, getDecl, getDisplacement, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getMode, getName, getPointedToCore, getStorageLoc, getTag, getType, getValueRegister, hashCode, hasHiddenAliases, inMemory, isCaseLabelDecl, isCommonBaseVariable, isEnumElementDecl, isEquivalenceDecl, isExceptionDecl, isFieldDecl, isFileDecl, isFormalDecl, isForwardProcedureDecl, isFtnResultVar, isGlobal, isLabelDecl, isProcedureDecl, isPure, isReferenced, isRenamed, isRenamedVariableDecl, isRoutineDecl, isStmtFtnDecl, isTemporary, isTypeDecl, isTypeName, isUnknownFormals, isVariableDecl, isVirtual, isWeak, residency, returnCaseLabelDecl, returnEnumElementDecl, returnEquivalenceDecl, returnExceptionDecl, returnFieldDecl, returnFileDecl, returnFormalDecl, returnForwardProcedureDecl, returnLabelDecl, returnProcedureDecl, returnRenamedVariableDecl, returnRoutineDecl, returnStmtFtnDecl, returnTypeDecl, returnTypeName, returnUnknownFormals, returnVariableDecl, setAccessibility, setAddressRegister, setAddressTaken, setAlias, setDisplacement, setName, setReferenced, setResidency, setStorageLoc, setTag, setType, setValueRegister, setVisibility, setWeak, toStringSpecial, valueRegMode, visibility
 
Methods inherited from class scale.clef.Node
getSourceLineNumber, setAnnotationLevel, setReportLevel, setSourceLineNumber, toString, toString, toStringChildren
 
Methods inherited from class scale.common.Root
addAnnotation, allAnnotations, allMatchingAnnotations, getAnnotation, getDisplayName, getDisplayString, getNodeCount, getNodeID, hasAnnotation, hasEqualAnnotation, 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

ValueDecl

protected ValueDecl(java.lang.String name,
                    Type type,
                    Expression initialValue)
Create a ValueDecl with the specified name, type, and value.

Method Detail

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

getValue

public final Expression getValue()
Return the value associated with this declaration.


setValue

public void setValue(Expression value)
Specify the value associated with this declaration.


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

getConstantValue

public Literal getConstantValue()
Return the constant value of the expression.

Overrides:
getConstantValue in class Declaration
See Also:
Lattice

isConst

public boolean isConst()
Return true if the declaration is constant.

Overrides:
isConst in class Declaration

isValueDecl

public final boolean isValueDecl()
Description copied from class: Declaration
Return true if ValueDecl instance.

Overrides:
isValueDecl in class Declaration

returnValueDecl

public final ValueDecl returnValueDecl()
Description copied from class: Declaration
Return a ValueDecl instance or null.

Overrides:
returnValueDecl in class Declaration