jif.types
Class JifContext_c

java.lang.Object
  extended by polyglot.types.Context_c
      extended by jif.types.JifContext_c
All Implemented Interfaces:
java.lang.Cloneable, JifContext, polyglot.types.Context, polyglot.types.Resolver, polyglot.util.Copy

public class JifContext_c
extends polyglot.types.Context_c
implements JifContext

An implementation of the JifContext interface.


Nested Class Summary
 
Nested classes/interfaces inherited from class polyglot.types.Context_c
polyglot.types.Context_c.Kind
 
Field Summary
protected  java.util.Map<polyglot.types.LocalInstance,Label> checkedEndorsements
          Map of local variables that have been endorsed using a checked endorse statement
protected  boolean checkingInits
           
protected  Label constructorReturnLabel
           
protected  java.util.Map gotos
          Map from JifContext_c.Key (pairs of Branch.Kind and String) to Labels.
protected  boolean inConstructorCall
           
 
Fields inherited from class polyglot.types.Context_c
BLOCK, CLASS, code, CODE, inCode, it, kind, outer, OUTER, scope, SOURCE, staticContext, ts, type, types, vars
 
Constructor Summary
protected JifContext_c(JifTypeSystem ts, polyglot.types.TypeSystem jlts)
           
 
Method Summary
 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 addCheckedEndorse(polyglot.types.LocalInstance li, Label downgradeTo)
          Add a checked endorse for the local instance li.
 void addDefinitionalAssertionEquiv(AccessPath p, AccessPath q)
          Adds the assertion that the access path p is equivalent to the access path q to this context, and all outer contexts up to the method/constructor/initializer level
 void addDefinitionalAssertionEquiv(Label L1, Label L2)
          Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level
 void addDefinitionalAssertionEquiv(Label L1, Label L2, boolean addToClass)
          Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level
 void addDefinitionalEquiv(Principal p1, Principal p2)
          Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level
 void addEquiv(AccessPath p, AccessPath q)
          Adds the assertion that the access path p is equivalent to the access path q to this context
 void addEquiv(Label L1, Label L2)
          Add an equivalence to the label environment.
 void addEquiv(Principal p1, Principal p2)
          Add an actsfor relation both ways to the principal hierarchy.
 Label authLabel()
          Get the authority of the current code, represented as a confidentiality label.
 Label authLabelInteg()
          Get the authority of the current code, represented as an integrity 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.
 java.lang.Object copy()
           
 Label currentCodePCBound()
          The currentCodePCBound is an upper bound on the PC of the caller of the current code, and a lower bound on the observable effects of the current code.
protected  void envModification()
           
 polyglot.types.VarInstance findVariableSilent(java.lang.String name)
           
 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()
           
 PathMap pathMapForLocal(polyglot.types.LocalInstance li, LabelChecker lc)
          Return the path map for evaluating a local variable
 Label pc()
           
 PrincipalHierarchy ph()
           
 polyglot.types.Context pushClass(polyglot.types.ParsedClassType classScope, polyglot.types.ClassType type)
           
 polyglot.types.Context pushCode(polyglot.types.CodeInstance ci)
           
 polyglot.types.Context pushConstructorCall()
          Push a Context onto the stack for a constructor call, e.g.
 void setAuthority(java.util.Set auth)
           
 void setCheckingInits(boolean checkingInits)
          Set whether we are currently checking the initializers within a constructor.
 void setConstructorReturnLabel(Label Lr)
           
 void setCurrentCodePCBound(Label currentCodePCBound)
           
 void setPc(Label pc, LabelChecker lc)
           
 boolean updateAllowed(polyglot.ast.Expr e)
          Can this expression be updated, e.g.
 
Methods inherited from class polyglot.types.Context_c
addMethod, addNamed, addNamedToThisScope, addVariable, addVariableToThisScope, currentClass, currentClassScope, currentCode, definingCodeDef, find, findField, findFieldScope, findInThisScope, findLocal, findMethod, findMethodContainerInThisScope, findMethodScope, findVariable, findVariableInThisScope, importTable, inCode, inStaticContext, isBlock, isClass, isCode, isLocal, isOuter, isSource, mapsToString, outerResolver, package_, pop, push, pushBlock, pushSource, pushStatic, toString, typeSystem
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface polyglot.types.Context
addMethod, addNamed, addVariable, currentClass, currentClassScope, currentCode, definingCodeDef, findField, findFieldScope, findLocal, findMethod, findMethodScope, findVariable, importTable, inCode, inStaticContext, isLocal, outerResolver, package_, pop, pushBlock, pushSource, pushStatic, typeSystem
 
Methods inherited from interface polyglot.types.Resolver
find
 

Field Detail

checkedEndorsements

protected java.util.Map<polyglot.types.LocalInstance,Label> checkedEndorsements
Map of local variables that have been endorsed using a checked endorse statement


gotos

protected java.util.Map gotos
Map from JifContext_c.Key (pairs of Branch.Kind and String) to Labels.


checkingInits

protected boolean checkingInits

inConstructorCall

protected boolean inConstructorCall

constructorReturnLabel

protected Label constructorReturnLabel
Constructor Detail

JifContext_c

protected JifContext_c(JifTypeSystem ts,
                       polyglot.types.TypeSystem jlts)
Method Detail

copy

public java.lang.Object copy()
Specified by:
copy in interface polyglot.util.Copy
Overrides:
copy in class polyglot.types.Context_c

findVariableSilent

public polyglot.types.VarInstance findVariableSilent(java.lang.String name)
Specified by:
findVariableSilent in interface polyglot.types.Context
Overrides:
findVariableSilent in class polyglot.types.Context_c

labelEnv

public LabelEnv labelEnv()
Specified by:
labelEnv in interface JifContext

envModification

protected void envModification()

addAssertionLE

public void addAssertionLE(Label L1,
                           Label L2)
Description copied from interface: JifContext
Add a less than or equal assertion to the label environment.

Specified by:
addAssertionLE in interface JifContext

addDefinitionalAssertionEquiv

public void addDefinitionalAssertionEquiv(Label L1,
                                          Label L2)
Description copied from interface: JifContext
Adds the assertion to this context, and all outer contexts up to the method/constructor/initializer level

Specified by:
addDefinitionalAssertionEquiv in interface JifContext

addDefinitionalAssertionEquiv

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

Specified by:
addDefinitionalAssertionEquiv in interface JifContext
Parameters:
L1 -
L2 -

addDefinitionalAssertionEquiv

public void addDefinitionalAssertionEquiv(AccessPath p,
                                          AccessPath q)
Description copied from interface: JifContext
Adds the assertion that the access path p is equivalent to the access path q to this context, and all outer contexts up to the method/constructor/initializer level

Specified by:
addDefinitionalAssertionEquiv in interface JifContext

addEquiv

public void addEquiv(Label L1,
                     Label L2)
Description copied from interface: JifContext
Add an equivalence to the label environment.

Specified by:
addEquiv in interface JifContext

addEquiv

public void addEquiv(Principal p1,
                     Principal p2)
Description copied from interface: JifContext
Add an actsfor relation both ways to the principal hierarchy.

Specified by:
addEquiv in interface JifContext

addActsFor

public void addActsFor(Principal p1,
                       Principal p2)
Description copied from interface: JifContext
Add an actsfor relation to the principal hierarchy.

Specified by:
addActsFor in interface JifContext

addEquiv

public void addEquiv(AccessPath p,
                     AccessPath q)
Description copied from interface: JifContext
Adds the assertion that the access path p is equivalent to the access path q to this context

Specified by:
addEquiv in interface JifContext

addDefinitionalEquiv

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

Specified by:
addDefinitionalEquiv in interface JifContext

clearPH

public void clearPH()
Description copied from interface: JifContext
Clears the principal hierarchy of all actsfor relations.

Specified by:
clearPH in interface JifContext

gotoLabel

public Label gotoLabel(polyglot.ast.Branch.Kind kind,
                       java.lang.String label)
Description copied from interface: JifContext
Retrieve the Label associated with branching to the location label, with the branch kind kind.

Specified by:
gotoLabel in interface JifContext

gotoLabel

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

Specified by:
gotoLabel in interface JifContext

currentCodePCBound

public Label currentCodePCBound()
Description copied from interface: JifContext
The currentCodePCBound is an upper bound on the PC of the caller of the current code, and a lower bound on the observable effects of the current code.

Specified by:
currentCodePCBound in interface JifContext

setCurrentCodePCBound

public void setCurrentCodePCBound(Label currentCodePCBound)
Specified by:
setCurrentCodePCBound in interface JifContext

pc

public Label pc()
Specified by:
pc in interface JifContext

setPc

public void setPc(Label pc,
                  LabelChecker lc)
Specified by:
setPc in interface JifContext

authority

public java.util.Set authority()
Description copied from interface: JifContext
The authority of a class or a procedure is the set of principals who have authorized that code.

Specified by:
authority in interface JifContext

setAuthority

public void setAuthority(java.util.Set auth)
Specified by:
setAuthority in interface JifContext

ph

public PrincipalHierarchy ph()
Specified by:
ph in interface JifContext

authLabel

public Label authLabel()
Description copied from interface: JifContext
Get the authority of the current code, represented as a confidentiality label.

Specified by:
authLabel in interface JifContext

authLabelInteg

public Label authLabelInteg()
Description copied from interface: JifContext
Get the authority of the current code, represented as an integrity label.

Specified by:
authLabelInteg in interface JifContext

checkingInits

public boolean checkingInits()
Description copied from interface: JifContext
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.

Specified by:
checkingInits in interface JifContext

setCheckingInits

public void setCheckingInits(boolean checkingInits)
Description copied from interface: JifContext
Set whether we are currently checking the initializers within a constructor.

Specified by:
setCheckingInits in interface JifContext

constructorReturnLabel

public Label constructorReturnLabel()
Description copied from interface: JifContext
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.

Specified by:
constructorReturnLabel in interface JifContext

setConstructorReturnLabel

public void setConstructorReturnLabel(Label Lr)
Specified by:
setConstructorReturnLabel in interface JifContext

pushConstructorCall

public polyglot.types.Context pushConstructorCall()
Description copied from interface: JifContext
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.

Specified by:
pushConstructorCall in interface JifContext

pushClass

public polyglot.types.Context pushClass(polyglot.types.ParsedClassType classScope,
                                        polyglot.types.ClassType type)
Specified by:
pushClass in interface polyglot.types.Context
Overrides:
pushClass in class polyglot.types.Context_c

pushCode

public polyglot.types.Context pushCode(polyglot.types.CodeInstance ci)
Specified by:
pushCode in interface polyglot.types.Context
Overrides:
pushCode in class polyglot.types.Context_c

inConstructorCall

public boolean inConstructorCall()
Description copied from interface: JifContext
Is the Context in a constructor call, e.g. "super(...)" or "this(...)"?

Specified by:
inConstructorCall in interface JifContext

pathMapForLocal

public PathMap pathMapForLocal(polyglot.types.LocalInstance li,
                               LabelChecker lc)
Description copied from interface: JifContext
Return the path map for evaluating a local variable

Specified by:
pathMapForLocal in interface JifContext

updateAllowed

public boolean updateAllowed(polyglot.ast.Expr e)
Description copied from interface: JifContext
Can this expression be updated, e.g. is "e++" or "e = e'" allowed?

Specified by:
updateAllowed in interface JifContext

addCheckedEndorse

public void addCheckedEndorse(polyglot.types.LocalInstance li,
                              Label downgradeTo)
Description copied from interface: JifContext
Add a checked endorse for the local instance li.

Specified by:
addCheckedEndorse in interface JifContext