public class PairLabel_c extends Label_c implements PairLabel
description, toJava, variables| Constructor and Description |
|---|
PairLabel_c(JifTypeSystem ts,
ConfPolicy confPolicy,
IntegPolicy integPolicy,
polyglot.util.Position pos,
LabelToJavaExpr trans) |
| Modifier and Type | Method and Description |
|---|---|
java.lang.String |
componentString(java.util.Set<Label> printedLabels)
return a string s such that {s} is a label
|
ConfPolicy |
confPolicy() |
ConfPolicy |
confProjection() |
boolean |
equalsImpl(polyglot.types.TypeObject o) |
int |
hashCode() |
boolean |
hasWritersToReaders()
Does the label contain any writersToReaders constructs?
|
IntegPolicy |
integPolicy() |
IntegPolicy |
integProjection() |
boolean |
isBottom()
By default, a label is not Bottom
|
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 |
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 env,
LabelEnv.SearchState state)
Implementation of leq, should only be called by JifTypeSystem
|
protected Label |
simplifyImpl() |
Label |
subst(LabelSubstitution substitution) |
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.
|
java.lang.String |
toString(java.util.Set<Label> printedLabels)
return a string representation of the label.
|
java.lang.String |
toString(java.util.Set<Label> printedLabels,
boolean topLevel) |
protected void |
updateContextForSecond(LabelChecker lc,
JifContext A,
PathMap Xfirst)
Utility method for updating the context for checking the second part of
the pair.
|
componentString, copy, description, hasVariableComponents, hasVariables, isDisambiguated, isInvariant, normalize, setDescription, simplify, toJava, toJava, toString, variableComponents, variablestypeSystemclone, finalize, getClass, notify, notifyAll, wait, wait, waitcomponentString, copy, description, hasVariableComponents, hasVariables, isDisambiguated, isInvariant, normalize, setDescription, simplify, toJava, toString, variableComponents, variablestoJavatypeSystempublic PairLabel_c(JifTypeSystem ts, ConfPolicy confPolicy, IntegPolicy integPolicy, polyglot.util.Position pos, LabelToJavaExpr trans)
public ConfPolicy confPolicy()
confPolicy in interface PairLabelpublic IntegPolicy integPolicy()
integPolicy in interface PairLabelpublic boolean isRuntimeRepresentable()
isRuntimeRepresentable in interface LabelisRuntimeRepresentable in interface Parampublic boolean isCovariant()
LabelisCovariant in interface Labelpublic boolean isComparable()
LabelFor example, an UnknownLabel is not comparable to others, neither is a VarLabel. Most other labels are.
isComparable in interface Labelpublic boolean isCanonical()
isCanonical in interface ParamisCanonical in interface polyglot.types.TypeObjectpublic boolean isEnumerable()
LabelFor 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.
isEnumerable in interface Labelprotected boolean isDisambiguatedImpl()
Label_cisDisambiguatedImpl in class Label_cpublic boolean isBottom()
Label_cpublic boolean isTop()
LabelFor example, a JoinLabel with two components, one of which is Top, would return true for this method.
public boolean equalsImpl(polyglot.types.TypeObject o)
equalsImpl in interface polyglot.types.TypeObjectequalsImpl in class Label_cprotected Label simplifyImpl()
simplifyImpl in class Label_cpublic ConfPolicy confProjection()
confProjection in interface LabelconfProjection in class Label_cpublic IntegPolicy integProjection()
integProjection in interface LabelintegProjection in class Label_cpublic int hashCode()
hashCode in class polyglot.types.TypeObject_cpublic java.lang.String toString(java.util.Set<Label> printedLabels)
Labelpublic java.lang.String componentString(java.util.Set<Label> printedLabels)
LabelcomponentString in interface LabelcomponentString in class Label_cprintedLabels - the set of labels for which auxiliary information should be
omitted.public java.lang.String toString(java.util.Set<Label> printedLabels, boolean topLevel)
public boolean leq_(Label L, LabelEnv env, LabelEnv.SearchState state)
Labelpublic Label subst(LabelSubstitution substitution) throws polyglot.types.SemanticException
public java.util.List<polyglot.types.Type> throwTypes(polyglot.types.TypeSystem ts)
LabelthrowTypes in interface LabelthrowTypes in class Label_cpublic boolean hasWritersToReaders()
LabelhasWritersToReaders in interface LabelhasWritersToReaders in class Label_cpublic PathMap labelCheck(JifContext A, LabelChecker lc)
Label
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;
}
labelCheck in interface LabellabelCheck in class Label_cJifExt.labelCheck(LabelChecker),
Principal.labelCheck(JifContext, LabelChecker)protected void updateContextForSecond(LabelChecker lc, JifContext A, PathMap Xfirst)