TypeModifier.ceylon
import ceylon.ast.core {
Node,
TypeModifier
}
import com.redhat.ceylon.compiler.typechecker.tree {
JNode=Node,
Tree {
JDynamicModifier=DynamicModifier,
JLocalModifier=LocalModifier,
JVoidModifier=VoidModifier
}
}
import com.redhat.ceylon.compiler.typechecker.parser {
CeylonLexer {
dynamicModifier=\iDYNAMIC,
function_modifier=\iFUNCTION_MODIFIER,
value_modifier=\iVALUE_MODIFIER,
void_modifier=\iVOID_MODIFIER
}
}
"Converts a RedHat AST [[LocalModifier|JLocalModifier]], [[VoidModifier|JVoidModifier]]
or [[DynamicModifier|JDynamicModifier]] to a `ceylon.ast` [[TypeModifier]]."
shared TypeModifier typeModifierToCeylon(JLocalModifier|JVoidModifier|JDynamicModifier typeModifier, Anything(JNode,Node) update = noop) {
switch (typeModifier)
case (is JLocalModifier) { return localModifierToCeylon(typeModifier, update); }
case (is JVoidModifier) { return voidModifierToCeylon(typeModifier, update); }
case (is JDynamicModifier) { return dynamicModifierToCeylon(typeModifier, update); }
}
"Compiles the given [[code]] for a Type Modifier
into a [[TypeModifier]] using the Ceylon compiler
(more specifically, the lexer)."
shared TypeModifier? compileTypeModifier(String code, Anything(JNode,Node) update = noop) {
value type = createParser(code).tokenStream.\iLA(1);
if (type == void_modifier) {
return compileVoidModifier(code, update);
} else if (type == value_modifier) {
return compileValueModifier(code, update);
} else if (type == function_modifier) {
return compileFunctionModifier(code, update);
} else if (type == dynamicModifier) {
return compileDynamicModifier(code, update);
} else {
return null;
}
}