jif.types.label
Class ArgLabel_c

java.lang.Object
  extended by polyglot.types.TypeObject_c
      extended by jif.types.label.Label_c
          extended by jif.types.label.ArgLabel_c
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, ArgLabel, Label, Param, polyglot.types.TypeObject, polyglot.util.Copy

public class ArgLabel_c
extends Label_c
implements ArgLabel

This label is used as the label of the real argument. The purpose is to avoid having to re-interpret labels at each call.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class jif.types.label.Label_c
description, toJava, variables
 
Fields inherited from class polyglot.types.TypeObject_c
position, ts
 
Constructor Summary
protected ArgLabel_c()
           
  ArgLabel_c(JifTypeSystem ts, polyglot.types.ProcedureInstance pi, java.lang.String name, polyglot.util.Position pos)
           
  ArgLabel_c(JifTypeSystem ts, polyglot.types.VarInstance vi, polyglot.types.CodeInstance ci, polyglot.util.Position pos)
           
 
Method Summary
 java.lang.String componentString(java.util.Set printedLabels)
           
 java.lang.String description()
           
 boolean equalsImpl(polyglot.types.TypeObject o)
           
 polyglot.types.VarInstance formalInstance()
           
 int hashCode()
           
 boolean isCanonical()
           
 boolean isComparable()
          Is this label comparable to other labels?
 boolean isCovariant()
          Is this label covariant?
protected  boolean isDisambiguatedImpl()
          Check if the label is disambiguated, without recursing into child labels.
 boolean isEnumerable()
          Are the components of this label enumerable?
 boolean isRuntimeRepresentable()
           
 boolean leq_(Label L, LabelEnv env, LabelEnv.SearchState state)
          Implementation of leq, should only be called by JifTypeSystem
 java.lang.String name()
           
 void setCodeInstance(polyglot.types.CodeInstance ci)
           
 void setName(java.lang.String name)
           
 void setUpperBound(Label upperBound)
           
 Label subst(LabelSubstitution substitution)
           
 Label upperBound()
           
 
Methods inherited from class jif.types.label.Label_c
componentString, confProjection, copy, hasVariableComponents, hasVariables, hasWritersToReaders, integProjection, isBottom, isDisambiguated, isInvariant, isTop, labelCheck, normalize, setDescription, simplify, simplifyImpl, throwTypes, toJava, toString, toString, variableComponents, variables
 
Methods inherited from class polyglot.types.TypeObject_c
equals, position, typeSystem
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface jif.types.label.Label
componentString, confProjection, hasVariableComponents, hasVariables, hasWritersToReaders, integProjection, isBottom, isDisambiguated, isInvariant, isTop, labelCheck, normalize, setDescription, simplify, throwTypes, toJava, toString, variableComponents, variables
 
Methods inherited from interface polyglot.types.TypeObject
position, typeSystem
 
Methods inherited from interface polyglot.util.Copy
copy
 

Constructor Detail

ArgLabel_c

protected ArgLabel_c()

ArgLabel_c

public ArgLabel_c(JifTypeSystem ts,
                  polyglot.types.VarInstance vi,
                  polyglot.types.CodeInstance ci,
                  polyglot.util.Position pos)

ArgLabel_c

public ArgLabel_c(JifTypeSystem ts,
                  polyglot.types.ProcedureInstance pi,
                  java.lang.String name,
                  polyglot.util.Position pos)
Method Detail

formalInstance

public polyglot.types.VarInstance formalInstance()
Specified by:
formalInstance in interface ArgLabel

upperBound

public Label upperBound()
Specified by:
upperBound in interface ArgLabel

name

public java.lang.String name()
Specified by:
name in interface ArgLabel

setName

public void setName(java.lang.String name)
Specified by:
setName in interface ArgLabel

setUpperBound

public void setUpperBound(Label upperBound)
Specified by:
setUpperBound in interface ArgLabel

setCodeInstance

public void setCodeInstance(polyglot.types.CodeInstance ci)
Specified by:
setCodeInstance in interface ArgLabel

isRuntimeRepresentable

public boolean isRuntimeRepresentable()
Specified by:
isRuntimeRepresentable in interface Label
Specified by:
isRuntimeRepresentable in interface Param

isCovariant

public boolean isCovariant()
Description copied from interface: Label
Is this label covariant?

Specified by:
isCovariant in interface Label

isComparable

public boolean isComparable()
Description copied from interface: Label
Is this label comparable to other labels?

For example, an UnknownLabel is not comparable to others, neither is a VarLabel. Most other labels are.

Specified by:
isComparable in interface Label

isCanonical

public boolean isCanonical()
Specified by:
isCanonical in interface Param
Specified by:
isCanonical in interface polyglot.types.TypeObject

isEnumerable

public boolean isEnumerable()
Description copied from interface: Label
Are the components of this label enumerable?

For example, Singletons are enumerable, JoinLabels are enumerable, RuntimeLabel (the label of all runtime representable components) is not enumerable. NOTE: The components of a label are not neccessarily stuck together with a join operation. For example, the MeetLabel uses the meet operation between its components.

Specified by:
isEnumerable in interface Label

isDisambiguatedImpl

protected boolean isDisambiguatedImpl()
Description copied from class: Label_c
Check if the label is disambiguated, without recursing into child labels.

Specified by:
isDisambiguatedImpl in class Label_c

equalsImpl

public boolean equalsImpl(polyglot.types.TypeObject o)
Specified by:
equalsImpl in interface polyglot.types.TypeObject
Specified by:
equalsImpl in class Label_c

hashCode

public int hashCode()
Overrides:
hashCode in class polyglot.types.TypeObject_c

componentString

public java.lang.String componentString(java.util.Set printedLabels)
Specified by:
componentString in interface Label
Specified by:
componentString in class Label_c

leq_

public boolean leq_(Label L,
                    LabelEnv env,
                    LabelEnv.SearchState state)
Description copied from interface: Label
Implementation of leq, should only be called by JifTypeSystem

Specified by:
leq_ in interface Label
Parameters:
L - the label to determine if this label is leq to. This label always satisfies !this.equals(L)
env - the label environment (including principal hierarchy). Will always be non-null.

subst

public Label subst(LabelSubstitution substitution)
            throws polyglot.types.SemanticException
Specified by:
subst in interface Label
Overrides:
subst in class Label_c
Parameters:
substitution - The LabelSubstitution to apply to this label
Returns:
the result of applying labelSubst to this label.
Throws:
polyglot.types.SemanticException

description

public java.lang.String description()
Specified by:
description in interface Label
Overrides:
description in class Label_c