package grammar.java;
import static trees.MatchSpec.rule;
import static util.StringUtils.builderAppend;
import static compiler.util.Quoter.primitiveQuote;
import grammar.MatchCallbacks;
import driver.Context;
import parser.Match;
/**
* Expands require statements into nothing (macro requires) or import statements.
* Note that when we expand macros for the first time, the import and requires
* statement have already been parsed once.
*/
public class CallbacksPrelude extends MatchCallbacks
{
/****************************************************************************/
@Override public Match postParseTopDown(Match input)
{
Match pkg = input.first(rule("packageDeclaration"));
StringBuilder code = new StringBuilder(
input.has(pkg) ? pkg.string() + "\n" : "");
for (String imp : Context.get().currentFile.imports()) {
builderAppend(code, "\n", imp);
}
code.append("\n");
return primitiveQuote("prelude", code.toString());
}
}