Meta.ceylon
import ceylon.ast.core {
Meta,
Node
}
import com.redhat.ceylon.compiler.typechecker.tree {
JNode=Node,
Tree {
JMemberLiteral=MemberLiteral,
JMetaLiteral=MetaLiteral,
JTypeLiteral=TypeLiteral
}
}
"Converts a RedHat AST [[MetaLiteral|JMetaLiteral]] to a `ceylon.ast` [[Meta]]."
shared Meta metaToCeylon(JMetaLiteral metaLiteral, Anything(JNode,Node) update = noop) {
assert (is JTypeLiteral|JMemberLiteral metaLiteral);
switch (metaLiteral)
case (is JTypeLiteral) { return typeMetaToCeylon(metaLiteral, update); }
case (is JMemberLiteral) {
if (metaLiteral.type exists) {
return memberMetaToCeylon(metaLiteral, update);
} else {
return baseMetaToCeylon(metaLiteral, update);
}
}
}
"Compiles the given [[code]] for a Meta
into a [[Meta]] using the Ceylon compiler
(more specifically, the rule for a `metaLiteral`)."
shared Meta? compileMeta(String code, Anything(JNode,Node) update = noop) {
if (exists jMetaLiteral = createParser(code).metaLiteral()) {
return metaToCeylon(jMetaLiteral, update);
} else {
return null;
}
}