SwitchStatement switchStatement =
new SwitchStatement(new JavaField.Instance(null, SCDefinitionBuilder.functionTagFieldName, JavaTypeName.INT));
for (final MachineFunction mf : functions.getTopLevelCALFunctions()) {
methodName = functions.getFNamePrefix(mf.getName()) + "f";
MethodInvocation mi =
new MethodInvocation.Instance(
null,
methodName,
new JavaExpression[]{new MethodVariable(ROOT_NODE), SCJavaDefn.EXECUTION_CONTEXT_VAR},
argTypes,
JavaTypeNames.RTVALUE,
MethodInvocation.InvocationType.VIRTUAL);
switchStatement.addCase(
new SwitchStatement.IntCaseGroup(
functions.getFunctionIndex(mf.getName()),
new ReturnStatement(mi)));
}
javaMethod.addStatement(switchStatement);
// Handle the fallthrough.
final MethodInvocation mi =
new MethodInvocation.Static (JavaTypeNames.RTVALUE,
"badValue",
LiteralWrapper.make("Bad scTag in 'f'."),
JavaTypeName.STRING,
JavaTypeNames.RTVALUE);