blob: df3f21a9c30eb3d78769fbfa996374d8b1e6ac98 [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 '../../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
// ../../implementation/source_file_provider.dart and use
// FormattingDiagnosticHandler instead.
print({ 'uri': '$uri',
'begin': begin,
'end': end,
'message': message,
'kind': });
if (kind == compiler.Diagnostic.ERROR) {
throw new Exception('Unexpected error occurred.');
return compiler.compile(
new Uri('memory:/main.dart'),
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));