jif.types.label
Class AccessPathUninterpreted

java.lang.Object
  extended by jif.types.label.AccessPath
      extended by jif.types.label.AccessPathRoot
          extended by jif.types.label.AccessPathUninterpreted
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable, polyglot.util.Copy

public class AccessPathUninterpreted
extends AccessPathRoot

Represents an access path that is not final, and thus not interpreted: the type system does not track it precisely. These access paths arise during method instantiation and field label instantiation. For example, given the declaration

 
  
      class C {
         final label{} lb;
         int{*this.lb} f;
         ...
      }  
   
  
 
and the field access
 
  
   
      bar().f;
    
   
  
 
where bar is a method that returns an object of class C, the type system needs to allow the field access even though access path "bar()" is not final. This is achieved through the use of AccessPathUninterpreted, so that the label of the field access bar().f is "{* <>.lb}", where <>is a AccessPathUninterpreted.

See Also:
AccessPath, JifInstantiator, Serialized Form

Constructor Summary
AccessPathUninterpreted(polyglot.ast.Expr expr, polyglot.util.Position pos)
           
AccessPathUninterpreted(java.lang.String expr, polyglot.util.Position pos)
           
AccessPathUninterpreted(java.lang.String expr, polyglot.util.Position pos, boolean allowSubst)
           
 
Method Summary
 boolean equals(java.lang.Object o)
           
 int hashCode()
           
 boolean isCanonical()
           
 boolean isNeverNull()
           
 boolean isUninterpreted()
           
 AccessPath subst(AccessPathRoot r, AccessPath e)
          Return the result of substituting the root r with the access path e.
 java.lang.String toString()
           
 polyglot.types.Type type()
          The type of the access path (when the access path is regarded as an expression).
 
Methods inherited from class jif.types.label.AccessPathRoot
equivalentTo, labelcheck, root
 
Methods inherited from class jif.types.label.AccessPath
copy, exprString, position, throwTypes, verify
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

AccessPathUninterpreted

public AccessPathUninterpreted(polyglot.ast.Expr expr,
                               polyglot.util.Position pos)

AccessPathUninterpreted

public AccessPathUninterpreted(java.lang.String expr,
                               polyglot.util.Position pos)

AccessPathUninterpreted

public AccessPathUninterpreted(java.lang.String expr,
                               polyglot.util.Position pos,
                               boolean allowSubst)
Method Detail

isCanonical

public boolean isCanonical()
Specified by:
isCanonical in class AccessPath

isNeverNull

public boolean isNeverNull()
Specified by:
isNeverNull in class AccessPath

isUninterpreted

public boolean isUninterpreted()
Overrides:
isUninterpreted in class AccessPathRoot

subst

public AccessPath subst(AccessPathRoot r,
                        AccessPath e)
Description copied from class: AccessPath
Return the result of substituting the root r with the access path e. For example, given a field access path "this.f", substituting the access path root "this" for the access path "o.g" will result in the access path "o.g.f". This method is used to instantiate procedures for calls, and labels of fields.

Specified by:
subst in class AccessPath

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

equals

public boolean equals(java.lang.Object o)
Specified by:
equals in class AccessPath

hashCode

public int hashCode()
Specified by:
hashCode in class AccessPath

type

public polyglot.types.Type type()
Description copied from class: AccessPath
The type of the access path (when the access path is regarded as an expression).

Specified by:
type in class AccessPath