blob: 097d04692330b42d5992699b13d4eb43bca590d9 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// This sample demonstrates how to run the compiler in a loop reading
// all sources from memory, instead of using dart:io.
library sample.compile_loop;
import 'dart:async';
import '../../lib/compiler.dart' as compiler;
// If this file is missing, generate it using ../jsonify/jsonify.dart.
import 'sdk.dart';
Future<String> compile(source) {
Future<String> inputProvider(Uri uri) {
if (uri.scheme == 'sdk') {
var value = SDK_SOURCES['$uri'];
if (value == null) {
// TODO(ahe): Use new Future.error.
throw new Exception('Error: Cannot read: $uri');
}
return new Future.value(value);
} else if ('$uri' == 'memory:/main.dart') {
return new Future.value(source);
}
// TODO(ahe): Use new Future.error.
throw new Exception('Error: Cannot read: $uri');
}
void handler(
Uri uri, int begin, int end, String message, compiler.Diagnostic kind) {
// TODO(ahe): Remove dart:io import from
// ../../lib/src/source_file_provider.dart and use
// FormattingDiagnosticHandler instead.
print({
'uri': '$uri',
'begin': begin,
'end': end,
'message': message,
'kind': kind.name
});
if (kind == compiler.Diagnostic.ERROR) {
throw new Exception('Unexpected error occurred.');
}
}
return compiler.compile(Uri.parse('memory:/main.dart'),
Uri.parse('sdk:/sdk/'), null, inputProvider, handler, []);
}
int iterations = 10;
main() {
compile(EXAMPLE_HELLO_HTML).then((jsResult) {
if (jsResult == null) throw 'Compilation failed';
if (--iterations > 0) main();
});
}
const String EXAMPLE_HELLO_HTML = r'''
// Go ahead and modify this example.
import "dart:html";
var greeting = "Hello, World!";
// Displays a greeting.
void main() {
// This example uses HTML to display the greeting and it will appear
// in a nested HTML frame (an iframe).
document.body.append(new HeadingElement.h1()..appendText(greeting));
}
''';