jif.types
Interface JifContext

All Superinterfaces:
java.lang.Cloneable, polyglot.types.Context, polyglot.util.Copy, polyglot.types.Resolver
All Known Implementing Classes:
JifContext_c

public interface JifContext
extends polyglot.types.Context

The context for Jif type checking. JifContext extends Context with contextual information needed for checking labels, and also with some utility methods to assist in the implementation of label checking. The JifContext object contains a label environment, which contains a principal hierarchy; most access to these objects should be through the JifContext object, for example, the methods addActsFor, actsFor, addContraintLE.


Method Summary
 boolean actsFor(java.util.Collection actorGrp, java.util.Collection grantorGrp)
          Test an actsfor relation, using the principal hierarchy.
 boolean actsFor(Principal p1, Principal p2)
          Test an actsfor relation, using the principal hierarchy.
 void addActsFor(Principal p1, Principal p2)
          Add an actsfor relation to the principal hierarchy.
 void addAssertionLE(Label L1, Label L2)
          Add a less than or equal assertion to the label environment.
 void addDefinitionalActsFor(Principal p1, Principal p2)
          Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level
 void addDefinitionalAssertionLE(Label L1, Label L2)
          Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level
 Label authLabel()
          Get the authority of the current code, represented as a privacy label.
 java.util.Set authority()
          The authority of a class or a procedure is the set of principals who have authorized that code.
 boolean checkingInits()
          Indicates if we are currently checking the initializers within a constructor.
 void clearPH()
          Clears the principal hierarchy of all actsfor relations.
 Label constructorReturnLabel()
          If the current code is a constructor, returns the return label of that constructor.
 Label entryPC()
          The entry PC is the upper bound on the PC of the caller of the current code.
 Label gotoLabel(polyglot.ast.Branch.Kind kind, java.lang.String label)
          Retrieve the Label associated with branching to the location label, with the branch kind kind.
 void gotoLabel(polyglot.ast.Branch.Kind kind, java.lang.String label, Label L)
          Record the Label associated with branching to the location label, with the branch kind kind.
 boolean inConstructorCall()
          Is the Context in a constructor call, e.g.
 LabelEnv labelEnv()
           
 Label pc()
           
 PrincipalHierarchy ph()
           
 polyglot.types.Context pushConstructorCall()
          Push a Context onto the stack for a constructor call, e.g.
 void setAuthority(java.util.Set authority)
           
 void setCheckingInits(boolean checkingInits)
          Set whether we are currently checking the initializers within a constructor.
 void setConstructorReturnLabel(Label Lr)
           
 void setEntryPC(Label label)
           
 void setPc(Label label)
           
 
Methods inherited from interface polyglot.types.Context
addMethod, addNamed, addVariable, currentClass, currentClassScope, currentCode, findField, findFieldScope, findLocal, findMethod, findMethodScope, findVariable, findVariableSilent, goalStack, importTable, inCode, inStaticContext, isLocal, outerResolver, package_, pop, pushBlock, pushClass, pushCode, pushGoal, pushGoalStack, pushSource, pushStatic, typeSystem
 
Methods inherited from interface polyglot.types.Resolver
find
 
Methods inherited from interface polyglot.util.Copy
copy
 

Method Detail

labelEnv

public LabelEnv labelEnv()

addAssertionLE

public void addAssertionLE(Label L1,
                           Label L2)
Add a less than or equal assertion to the label environment.


addDefinitionalAssertionLE

public void addDefinitionalAssertionLE(Label L1,
                                       Label L2)
Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level

Parameters:
L1 -
L2 -

ph

public PrincipalHierarchy ph()

addActsFor

public void addActsFor(Principal p1,
                       Principal p2)
Add an actsfor relation to the principal hierarchy.


addDefinitionalActsFor

public void addDefinitionalActsFor(Principal p1,
                                   Principal p2)
Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level


actsFor

public boolean actsFor(Principal p1,
                       Principal p2)
Test an actsfor relation, using the principal hierarchy.


actsFor

public boolean actsFor(java.util.Collection actorGrp,
                       java.util.Collection grantorGrp)
Test an actsfor relation, using the principal hierarchy.


clearPH

public void clearPH()
Clears the principal hierarchy of all actsfor relations.


pc

public Label pc()

setPc

public void setPc(Label label)

entryPC

public Label entryPC()
The entry PC is the upper bound on the PC of the caller of the current code.


setEntryPC

public void setEntryPC(Label label)

gotoLabel

public Label gotoLabel(polyglot.ast.Branch.Kind kind,
                       java.lang.String label)
                throws polyglot.types.SemanticException
Retrieve the Label associated with branching to the location label, with the branch kind kind.

Throws:
polyglot.types.SemanticException

gotoLabel

public void gotoLabel(polyglot.ast.Branch.Kind kind,
                      java.lang.String label,
                      Label L)
Record the Label associated with branching to the location label, with the branch kind kind.


authority

public java.util.Set authority()
The authority of a class or a procedure is the set of principals who have authorized that code.


setAuthority

public void setAuthority(java.util.Set authority)

authLabel

public Label authLabel()
Get the authority of the current code, represented as a privacy label.


checkingInits

public boolean checkingInits()
Indicates if we are currently checking the initializers within a constructor. If we are, then more permissive label checking can be used for field assignments.


setCheckingInits

public void setCheckingInits(boolean checkingInits)
Set whether we are currently checking the initializers within a constructor.


constructorReturnLabel

public Label constructorReturnLabel()
If the current code is a constructor, returns the return label of that constructor. The value returned is only valid if checkingInits is true, and is used for more permissive label checking for field assignments.


setConstructorReturnLabel

public void setConstructorReturnLabel(Label Lr)

pushConstructorCall

public polyglot.types.Context pushConstructorCall()
Push a Context onto the stack for a constructor call, e.g. "super(...)" or "this(...)". Jif needs to distinguish constructor call contexts from other static contexts because the this label may appear in constructor call contexts, but not other static contexts.


inConstructorCall

public boolean inConstructorCall()
Is the Context in a constructor call, e.g. "super(...)" or "this(...)"?