blob: ce9fd5708f4b9b30203ac93788b2247744568673 [file] [log] [blame] [edit]
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/error.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/generated/scanner.dart';
import 'src/error_collector.dart';
import 'src/xform.dart';
/// Given [source], a string of Dart code which may contain async/await syntax,
/// compiles it down to raw Dart 1.0 syntax.
String compile(String source) {
var errorListener = new ErrorCollector();
var unit = _parse(source, errorListener);
if (errorListener.errors.isNotEmpty) {
throw new FormatException(
"Compilation error:\n${errorListener.errors.join("\n")}");
}
var transform = new AsyncTransformer();
return transform.visit(unit).toString();
}
CompilationUnit _parse(String source, AnalysisErrorListener errorListener) {
var reader = new CharSequenceReader(source);
var scanner = new Scanner(null, reader, errorListener);
var token = scanner.tokenize();
var parser = new Parser(null, errorListener);
parser.parseAsync = true;
return parser.parseCompilationUnit(token);
}