Index: sdk/lib/_internal/pub_generated/lib/src/dart.dart |
diff --git a/sdk/lib/_internal/pub_generated/lib/src/dart.dart b/sdk/lib/_internal/pub_generated/lib/src/dart.dart |
index 1fc15f9a3fbc27618f9fe21fa8f600d823d86321..0a84847de163b5d662ccad374035ab485183e26f 100644 |
--- a/sdk/lib/_internal/pub_generated/lib/src/dart.dart |
+++ b/sdk/lib/_internal/pub_generated/lib/src/dart.dart |
@@ -72,107 +72,160 @@ class _DirectiveCollector extends GeneralizingAstVisitor { |
visitUriBasedDirective(UriBasedDirective node) => directives.add(node); |
} |
Future runInIsolate(String code, message, {packageRoot, String snapshot}) { |
- if (snapshot != null && fileExists(snapshot)) { |
- log.fine("Spawning isolate from $snapshot."); |
- if (packageRoot != null) packageRoot = packageRoot.toString(); |
- return Isolate.spawnUri( |
- path.toUri(snapshot), |
- [], |
- message, |
- packageRoot: packageRoot); |
- } |
- return withTempDir((dir) { |
- final completer0 = new Completer(); |
- scheduleMicrotask(() { |
- try { |
- var dartPath = path.join(dir, 'runInIsolate.dart'); |
- writeTextFile(dartPath, code, dontLogContents: true); |
- var port = new ReceivePort(); |
- join0(x0) { |
- Isolate.spawn(_isolateBuffer, { |
- 'replyTo': port.sendPort, |
- 'uri': path.toUri(dartPath).toString(), |
- 'packageRoot': x0, |
- 'message': message |
- }).then((x1) { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
+ try { |
+ join0() { |
+ withTempDir(((dir) { |
+ final completer0 = new Completer(); |
+ scheduleMicrotask(() { |
try { |
- x1; |
- port.first.then((x2) { |
- try { |
- var response = x2; |
- join1() { |
- join2() { |
- ensureDir(path.dirname(snapshot)); |
- var snapshotArgs = []; |
- join3() { |
- snapshotArgs.addAll( |
- ['--snapshot=${snapshot}', dartPath]); |
- runProcess( |
- Platform.executable, |
- snapshotArgs).then((x3) { |
- try { |
- var result = x3; |
- join4() { |
- log.warning( |
- "Failed to compile a snapshot to " "${path.relative(snapshot)}:\n" + |
- result.stderr.join("\n")); |
- completer0.complete(null); |
+ var dartPath = path.join(dir, 'runInIsolate.dart'); |
+ writeTextFile(dartPath, code, dontLogContents: true); |
+ var port = new ReceivePort(); |
+ join0(x0) { |
+ Isolate.spawn(_isolateBuffer, { |
+ 'replyTo': port.sendPort, |
+ 'uri': path.toUri(dartPath).toString(), |
+ 'packageRoot': x0, |
+ 'message': message |
+ }).then((x1) { |
+ try { |
+ x1; |
+ port.first.then((x2) { |
+ try { |
+ var response = x2; |
+ join1() { |
+ join2() { |
+ ensureDir(path.dirname(snapshot)); |
+ var snapshotArgs = []; |
+ join3() { |
+ snapshotArgs.addAll( |
+ ['--snapshot=${snapshot}', dartPath]); |
+ runProcess( |
+ Platform.executable, |
+ snapshotArgs).then((x3) { |
+ try { |
+ var result = x3; |
+ join4() { |
+ log.warning( |
+ "Failed to compile a snapshot to " "${path.relative(snapshot)}:\n" + |
+ result.stderr.join("\n")); |
+ completer0.complete(null); |
+ } |
+ if (result.success) { |
+ completer0.complete(null); |
+ } else { |
+ join4(); |
+ } |
+ } catch (e2) { |
+ completer0.completeError(e2); |
+ } |
+ }, onError: (e3) { |
+ completer0.completeError(e3); |
+ }); |
} |
- if (result.success) { |
- completer0.complete(null); |
+ if (packageRoot != null) { |
+ snapshotArgs.add('--package-root=${packageRoot}'); |
+ join3(); |
} else { |
- join4(); |
+ join3(); |
} |
- } catch (e2) { |
- completer0.completeError(e2); |
} |
- }, onError: (e3) { |
- completer0.completeError(e3); |
- }); |
- } |
- if (packageRoot != null) { |
- snapshotArgs.add('--package-root=${packageRoot}'); |
- join3(); |
- } else { |
- join3(); |
+ if (snapshot == null) { |
+ completer0.complete(null); |
+ } else { |
+ join2(); |
+ } |
+ } |
+ if (response['type'] == 'error') { |
+ completer0.completeError( |
+ new CrossIsolateException.deserialize(response['error'])); |
+ } else { |
+ join1(); |
+ } |
+ } catch (e1) { |
+ completer0.completeError(e1); |
} |
- } |
- if (snapshot == null) { |
- completer0.complete(null); |
- } else { |
- join2(); |
- } |
- } |
- if (response['type'] == 'error') { |
- completer0.completeError( |
- new CrossIsolateException.deserialize(response['error'])); |
- } else { |
- join1(); |
+ }, onError: (e4) { |
+ completer0.completeError(e4); |
+ }); |
+ } catch (e0) { |
+ completer0.completeError(e0); |
} |
- } catch (e1) { |
- completer0.completeError(e1); |
- } |
- }, onError: (e4) { |
- completer0.completeError(e4); |
- }); |
- } catch (e0) { |
- completer0.completeError(e0); |
+ }, onError: (e5) { |
+ completer0.completeError(e5); |
+ }); |
+ } |
+ if (packageRoot == null) { |
+ join0(null); |
+ } else { |
+ join0(packageRoot.toString()); |
+ } |
+ } catch (e6) { |
+ completer0.completeError(e6); |
} |
- }, onError: (e5) { |
- completer0.completeError(e5); |
}); |
+ return completer0.future; |
+ })).then((x0) { |
+ try { |
+ x0; |
+ completer0.complete(null); |
+ } catch (e0) { |
+ completer0.completeError(e0); |
+ } |
+ }, onError: (e1) { |
+ completer0.completeError(e1); |
+ }); |
+ } |
+ if (snapshot != null && fileExists(snapshot)) { |
+ log.fine("Spawning isolate from ${snapshot}."); |
+ join1() { |
+ join2(x1) { |
+ join0(); |
+ } |
+ finally0(cont0, v0) { |
+ cont0(v0); |
+ } |
+ catch0(error) { |
+ log.fine("Couldn't load existing snapshot ${snapshot}:\n${error}"); |
+ finally0(join2, null); |
+ } |
+ try { |
+ Isolate.spawnUri( |
+ path.toUri(snapshot), |
+ [], |
+ message, |
+ packageRoot: packageRoot).then((x2) { |
+ try { |
+ x2; |
+ finally0((v1) { |
+ completer0.complete(v1); |
+ }, null); |
+ } catch (e2) { |
+ catch0(e2); |
+ } |
+ }, onError: (e3) { |
+ catch0(e3); |
+ }); |
+ } catch (e4) { |
+ catch0(e4); |
+ } |
} |
- if (packageRoot == null) { |
- join0(null); |
+ if (packageRoot != null) { |
+ packageRoot = packageRoot.toString(); |
+ join1(); |
} else { |
- join0(packageRoot.toString()); |
+ join1(); |
} |
- } catch (e6) { |
- completer0.completeError(e6); |
+ } else { |
+ join0(); |
} |
- }); |
- return completer0.future; |
+ } catch (e5) { |
+ completer0.completeError(e5); |
+ } |
}); |
+ return completer0.future; |
} |
void _isolateBuffer(message) { |
var replyTo = message['replyTo']; |