// 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));
}
''';
