Expression.ceylon
import ceylon.ast.core {
Expression
}
import com.redhat.ceylon.compiler.typechecker.tree {
Tree {
JExpression=Expression,
JFunctionArgument=FunctionArgument,
JOperatorExpression=OperatorExpression,
JPrimary=Primary,
JTerm=Term
}
}
"Converts a RedHat AST [[Term|JTerm]] to a `ceylon.ast` [[Expression]]."
shared Expression expressionToCeylon(JTerm term) {
switch (term)
case (is JPrimary) {
if (is JExpression term, !term.mainToken exists) {
// a JTerm wrapped in a JExpression
return expressionToCeylon(term.term);
}
return valueExpressionToCeylon(term);
}
case (is JOperatorExpression) { return operationToCeylon(term); }
case (is JFunctionArgument) { return functionExpressionToCeylon(term); }
else {
throw AssertionError("Unknown term type!");
}
}
"Compiles the given [[code]] for an Expression
into an [[Expression]] using the Ceylon compiler
(more specifically, the rule for a `functionOrExpression`)."
shared Expression? compileExpression(String code) {
if (exists jFunctionOrExpression = createParser(code).functionOrExpression()) {
return expressionToCeylon(jFunctionOrExpression);
} else {
return null;
}
}