blob: 023e5fbb164817d1ab9a6272905b5374b0ed46a2 [file] [log] [blame]
// Copyright (c) 2012, 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 file contains functions that are used in the code generated by the frog
// compiler.
/**
* Wrapper that takes the dart entry point and runs it within an isolate. The
* frog compiler will inject a call of the form [: startRootIsolate(main); :]
* when it determines that this wrapping is needed. For single-isolate
* applications (e.g. hello world), this call is not emitted.
*/
void startRootIsolate(entry) {
_globalState = new _Manager();
// Don't start the main loop again, if we are in a worker.
if (_globalState.isWorker) return;
final rootContext = new _IsolateContext();
_globalState.rootContext = rootContext;
_fillStatics(rootContext);
// BUG(5151491): Setting currentContext should not be necessary, but
// because closures passed to the DOM as event handlers do not bind their
// isolate automatically we try to give them a reasonable context to live in
// by having a "default" isolate (the first one created).
_globalState.currentContext = rootContext;
rootContext.eval(entry);
_globalState.topEventLoop.run();
}