ValueExpression.ceylon
import ceylon.ast.core {
Node,
ValueExpression
}
import com.redhat.ceylon.compiler.typechecker.tree {
JNode=Node,
Tree {
JExpression=Expression,
JOperatorExpression=OperatorExpression,
JPrimary=Primary,
JTerm=Term
}
}
"Converts a RedHat AST [[Term|JTerm]] to a `ceylon.ast` [[ValueExpression]]."
throws (`class AssertionError`, "If the [[term]] does not correspond to a [[ValueExpression]]")
shared ValueExpression valueExpressionToCeylon(JTerm term, Anything(JNode,Node) update = noop) {
switch (term)
case (is JPrimary) {
if (is JExpression term, !term.mainToken exists) {
// a JTerm wrapped in a JExpression
return valueExpressionToCeylon(term.term, update);
}
return primaryToCeylon(term, update);
}
case (is JOperatorExpression) {
return operationToCeylon(term, update);
}
else {
throw AssertionError("Unknown value expression type, or not a value expression");
}
}
"Compiles the given [[code]] for a Value Expression
into a [[ValueExpression]] using the Ceylon compiler
(more specifically, the rule for an `expression`)."
shared ValueExpression? compileValueExpression(String code, Anything(JNode,Node) update = noop) {
if (exists jExpression = createParser(code).expression()) {
return valueExpressionToCeylon(jExpression, update);
} else {
return null;
}
}