public interface Label extends ActsForParam
Modifier and Type | Method and Description |
---|---|
java.lang.String |
componentString()
Equivalent to componentString(emptySet)
|
java.lang.String |
componentString(java.util.Set<Label> printedLabels)
return a string s such that {s} is a label
|
ConfPolicy |
confProjection() |
Label |
copy() |
java.lang.String |
description() |
boolean |
hasVariableComponents()
Does the label contain any variables as components? This does not include variables
that are in bounds of arg labels.
|
boolean |
hasVariables()
Does the label contain any variables at all? This includes variables
that are in bounds of arg labels.
|
boolean |
hasWritersToReaders()
Does the label contain any writersToReaders constructs?
|
IntegPolicy |
integProjection() |
boolean |
isBottom()
Is this label equivalent to bottom?
|
boolean |
isComparable()
Is this label comparable to other labels?
|
boolean |
isCovariant()
Is this label covariant?
|
boolean |
isDisambiguated()
Are the components of this label all disambiguated?
|
boolean |
isEnumerable()
Are the components of this label enumerable?
|
boolean |
isInvariant()
Is this label invariant?
|
boolean |
isRuntimeRepresentable() |
boolean |
isTop()
Is this label equivalent to top?
|
PathMap |
labelCheck(JifContext A,
LabelChecker lc)
Label check the label, which will determine how much information may be
gained if the label is evaluated at runtime.
|
boolean |
leq_(Label L,
LabelEnv H,
LabelEnv.SearchState state)
Implementation of leq, should only be called by JifTypeSystem
|
Label |
normalize()
Normalize the label.
|
void |
setDescription(java.lang.String d) |
Label |
simplify()
Simplify the label, using leq if needed
|
Label |
subst(LabelSubstitution labelSubst) |
java.util.List<polyglot.types.Type> |
throwTypes(polyglot.types.TypeSystem ts)
If the label is runtime representable, when it is evaluated at runtime it
may throw exceptions.
|
polyglot.ast.Expr |
toJava(JifToJavaRewriter rw,
polyglot.ast.Expr thisQualifier,
boolean simplify) |
java.lang.String |
toString()
Equivalent to toString(emptySet).
|
java.lang.String |
toString(java.util.Set<Label> printedLabels)
return a string representation of the label.
|
java.util.Set<Variable> |
variableComponents()
The set of variables that this label contains as components.
|
java.util.Set<Variable> |
variables()
The set of variables that this label contains including variables contained
in upper bounds of arg labels.
|
toJava
isCanonical, typeSystem
boolean isBottom()
For example, a JoinLabel with no components would return true for this method.
boolean isTop()
For example, a JoinLabel with two components, one of which is Top, would return true for this method.
boolean isInvariant()
boolean isCovariant()
boolean isComparable()
For example, an UnknownLabel is not comparable to others, neither is a VarLabel. Most other labels are.
java.lang.String description()
void setDescription(java.lang.String d)
Label subst(LabelSubstitution labelSubst) throws polyglot.types.SemanticException
subst
in interface ActsForParam
labelSubst
- The LabelSubstitution
to apply to this
labelpolyglot.types.SemanticException
PathMap labelCheck(JifContext A, LabelChecker lc)
boolean{Alice:} secret = ...; final label{Alice:} lb = secret?new label{}:new label{Bob:}; boolean{} leak = false; if ((*lb} <= new label{}) { // evaluation of lb reveals // information at level {Alice:} leak = true; }
boolean isEnumerable()
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.
boolean isDisambiguated()
polyglot.ast.Expr toJava(JifToJavaRewriter rw, polyglot.ast.Expr thisQualifier, boolean simplify) throws polyglot.types.SemanticException
thisQualifier
- an Expr representing the translated "this" reference.simplify
- whether to attempt to simplify the label when it's constructed
at run time.polyglot.types.SemanticException
Label simplify()
simplify
in interface ActsForParam
Label normalize()
boolean hasWritersToReaders()
boolean hasVariableComponents()
boolean hasVariables()
java.util.Set<Variable> variableComponents()
java.util.Set<Variable> variables()
boolean leq_(Label L, LabelEnv H, LabelEnv.SearchState state)
L
- the label to determine if this label is leq to. This label
always satisfies !this.equals(L)H
- the label environment (including principal hierarchy). Will
always be non-null.boolean isRuntimeRepresentable()
isRuntimeRepresentable
in interface Param
ConfPolicy confProjection()
IntegPolicy integProjection()
java.util.List<polyglot.types.Type> throwTypes(polyglot.types.TypeSystem ts)
Label copy()
copy
in interface polyglot.util.Copy<polyglot.types.TypeObject>
java.lang.String toString()
toString
in class java.lang.Object
java.lang.String toString(java.util.Set<Label> printedLabels)
printedLabels
- the set of labels for which auxiliary information should be
omitted.java.lang.String componentString()
java.lang.String componentString(java.util.Set<Label> printedLabels)
printedLabels
- the set of labels for which auxiliary information should be
omitted.