Files
sdk/pkg/dev_compiler/tool/input_sdk/patch/isolate_patch.dart
T
Leaf Petersen 071e6d0d46 SDK fixes
This fixes all of the static errors from generating the SDK except those in the _interceptors library, and a set of errors associated with checks of the form (v is E) for generic type parameter E.  Most of the fixes consist of adding missing generic parameters, or making overrides consistent.  There are a few fixes to resolve issues around code that moved implicitly between hidden implementation classes and their public API classes, and some other miscellaneous fixes.

All of my changes are in the tool/input_sdk directory - the rest of the diff is generated code.

BUG=
R=vsm@google.com

Review URL: https://codereview.chromium.org/1112403004
2015-05-05 10:58:33 -07:00

161 lines
4.4 KiB
Dart

// 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.
// Patch file for the dart:isolate library.
import 'dart:_js_helper' show patch;
import 'dart:_isolate_helper' show CapabilityImpl,
CloseToken,
IsolateNatives,
JsIsolateSink,
ReceivePortImpl,
RawReceivePortImpl;
@patch
class Isolate {
static final _currentIsolateCache = IsolateNatives.currentIsolate;
// `current` must be a getter, not just a final field,
// to match the external declaration.
@patch
static Isolate get current => _currentIsolateCache;
@patch
static Future<Isolate> spawn(void entryPoint(message), var message,
{ bool paused: false }) {
try {
return IsolateNatives.spawnFunction(entryPoint, message, paused)
.then((msg) => new Isolate(msg[1],
pauseCapability: msg[2],
terminateCapability: msg[3]));
} catch (e, st) {
return new Future<Isolate>.error(e, st);
}
}
@patch
static Future<Isolate> spawnUri(
Uri uri, List<String> args, var message, { bool paused: false,
Uri packageRoot }) {
if (packageRoot != null) throw new UnimplementedError("packageRoot");
try {
if (args is List) {
for (int i = 0; i < args.length; i++) {
if (args[i] is! String) {
throw new ArgumentError("Args must be a list of Strings $args");
}
}
} else if (args != null) {
throw new ArgumentError("Args must be a list of Strings $args");
}
return IsolateNatives.spawnUri(uri, args, message, paused)
.then((msg) => new Isolate(msg[1],
pauseCapability: msg[2],
terminateCapability: msg[3]));
} catch (e, st) {
return new Future<Isolate>.error(e, st);
}
}
@patch
void _pause(Capability resumeCapability) {
var message = new List(3)
..[0] = "pause"
..[1] = pauseCapability
..[2] = resumeCapability;
controlPort.send(message);
}
@patch
void resume(Capability resumeCapability) {
var message = new List(2)
..[0] = "resume"
..[1] = resumeCapability;
controlPort.send(message);
}
@patch
void addOnExitListener(SendPort responsePort) {
// TODO(lrn): Can we have an internal method that checks if the receiving
// isolate of a SendPort is still alive?
var message = new List(2)
..[0] = "add-ondone"
..[1] = responsePort;
controlPort.send(message);
}
@patch
void removeOnExitListener(SendPort responsePort) {
var message = new List(2)
..[0] = "remove-ondone"
..[1] = responsePort;
controlPort.send(message);
}
@patch
void setErrorsFatal(bool errorsAreFatal) {
var message = new List(3)
..[0] = "set-errors-fatal"
..[1] = terminateCapability
..[2] = errorsAreFatal;
controlPort.send(message);
}
@patch
void kill([int priority = BEFORE_NEXT_EVENT]) {
controlPort.send(["kill", terminateCapability, priority]);
}
@patch
void ping(SendPort responsePort, [int pingType = IMMEDIATE]) {
var message = new List(3)
..[0] = "ping"
..[1] = responsePort
..[2] = pingType;
controlPort.send(message);
}
@patch
void addErrorListener(SendPort port) {
var message = new List(2)
..[0] = "getErrors"
..[1] = port;
controlPort.send(message);
}
@patch
void removeErrorListener(SendPort port) {
var message = new List(2)
..[0] = "stopErrors"
..[1] = port;
controlPort.send(message);
}
}
/** Default factory for receive ports. */
@patch
class ReceivePort {
@patch
factory ReceivePort() = ReceivePortImpl;
@patch
factory ReceivePort.fromRawReceivePort(RawReceivePort rawPort) {
return new ReceivePortImpl.fromRawReceivePort(rawPort);
}
}
@patch
class RawReceivePort {
@patch
factory RawReceivePort([void handler(event)]) {
return new RawReceivePortImpl(handler);
}
}
@patch
class Capability {
@patch
factory Capability() = CapabilityImpl;
}