|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.erights.e.elang.evm.ParseNode | +--org.erights.e.elang.evm.ENode | +--org.erights.e.elang.evm.EExpr | +--org.erights.e.elang.evm.LiteralExpr
Safe: BNF: LiteralInteger | LiteralFloat64 | LiteralChar | LiteralString
# (perhaps someday): | LiteralTwine
Evaluates to the literal's value, which may be any
Twine
-- a ConstList of chars +
source position information recording where these characters allegedly
came from. A bare Twine (ie, a String) is a Twine without any
annotations.
A LiteralExpr object may be programmatically created to hold any int or float64 value. However, the following ints and float64s cannot be written as literals in the E source language:
prints
as -3, which does express the
original value in E (by using a call expression).
Field Summary | |
private Object |
myValue
|
Fields inherited from class org.erights.e.elang.evm.ENode |
|
Fields inherited from class org.erights.e.elang.evm.ParseNode |
NUM_PR, PR_ASSIGN, PR_CALL, PR_COMP, PR_EEXPR, PR_LISTPATT, PR_ORDER, PR_PATTERN, PR_PRIM, PR_START |
Constructor Summary | |
LiteralExpr(SourceSpan optSpan,
Object value)
Enabled: Makes an EExpr that will evaluate to 'value'. |
Method Summary | |
protected StaticScope |
computeStaticScope()
When staticScope() is first requested on a given node, it calls computeStaticScope() to do the actual computation, which is then remembered. |
boolean |
matchBind(ConstList args,
Object specimen,
FlexList bindings)
Enabled: |
String |
printRep()
Enabled: |
protected Object |
subEval(EvalContext ctx,
boolean forValue)
The recursive part that does the work |
void |
subPrintOn(TextWriter out,
int priority)
Enabled: |
Object |
value()
Enabled: |
Object |
welcome(ETreeVisitor visitor)
Enabled: |
Methods inherited from class org.erights.e.elang.evm.EExpr |
__printOn, appendAllTo, appendTo, eval, eval, evalBool, printAsBlockOn, substitute, transform |
Methods inherited from class org.erights.e.elang.evm.ENode |
cleanCopy, copy, getOptPatternMap, getOptScopeMap, getPatternMap, getScopeMap, qbuild, setPatternMap, setScopeMap, staticScope, synEnv |
Methods inherited from class org.erights.e.elang.evm.ParseNode |
asText, getOptSpan, lnPrintOn, lnPrintOn, matchBind, matchBind, matchBind, printListOn, toString |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
private final Object myValue
Constructor Detail |
public LiteralExpr(SourceSpan optSpan, Object value)
value
- If 'value' is a String (though not a Twine), then it is
interned during construction. This makes no difference to
E's semantics, but 1) may be more efficient, and 2) helps
the E language and ELib/Java work together more smootly,
since Java also interns all String literals. When compiling
E to JVM bytecodes, an E literal will turn into a Java
literal anyway, so this anticipates the resulting
Java-level semantics.
Currently, 'value' may also be a Character, BigInteger, or Double. We expect to eventually allow 'value' to be a Twine as well, in order to preserve the source position of quasi-strings with Kernel-E code that's still readable.
Method Detail |
public Object welcome(ETreeVisitor visitor)
welcome
in class ENode
protected StaticScope computeStaticScope()
ENode
computeStaticScope
in class ENode
protected Object subEval(EvalContext ctx, boolean forValue)
EExpr
subEval
in class EExpr
public boolean matchBind(ConstList args, Object specimen, FlexList bindings)
matchBind
in interface MatchMaker
matchBind
in class ParseNode
public void subPrintOn(TextWriter out, int priority) throws IOException
subPrintOn
in class ParseNode
IOException
public String printRep()
public Object value()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |