mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:39:49 +00:00
Check for the type of the the spawned function.
In general we avoid explicit type-checks, but in this case the error would be only detected in the new isolate making error handling much harder. Fixes #27185 BUG= http://dartbug.com/27185. R=lrn@google.com Review URL: https://codereview.chromium.org/2414173003 .
This commit is contained in:
parent
523da59d56
commit
136e476c87
|
@ -193,9 +193,9 @@ class _SendPortImpl implements SendPort {
|
||||||
void _sendInternal(var message) native "SendPortImpl_sendInternal_";
|
void _sendInternal(var message) native "SendPortImpl_sendInternal_";
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef _MainFunction();
|
typedef _NullaryFunction();
|
||||||
typedef _MainFunctionArgs(args);
|
typedef _UnaryFunction(args);
|
||||||
typedef _MainFunctionArgsMessage(args, message);
|
typedef _BinaryFunction(args, message);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Takes the real entry point as argument and invokes it with the
|
* Takes the real entry point as argument and invokes it with the
|
||||||
|
@ -253,9 +253,9 @@ void _startIsolate(SendPort parentPort,
|
||||||
port.close();
|
port.close();
|
||||||
|
|
||||||
if (isSpawnUri) {
|
if (isSpawnUri) {
|
||||||
if (entryPoint is _MainFunctionArgsMessage) {
|
if (entryPoint is _BinaryFunction) {
|
||||||
entryPoint(args, message);
|
entryPoint(args, message);
|
||||||
} else if (entryPoint is _MainFunctionArgs) {
|
} else if (entryPoint is _UnaryFunction) {
|
||||||
entryPoint(args);
|
entryPoint(args);
|
||||||
} else {
|
} else {
|
||||||
entryPoint();
|
entryPoint();
|
||||||
|
@ -310,6 +310,11 @@ void _startIsolate(SendPort parentPort,
|
||||||
// `paused` isn't handled yet.
|
// `paused` isn't handled yet.
|
||||||
RawReceivePort readyPort;
|
RawReceivePort readyPort;
|
||||||
try {
|
try {
|
||||||
|
// Check for the type of `entryPoint` on the spawning isolate to make
|
||||||
|
// error-handling easier.
|
||||||
|
if (entryPoint is! _UnaryFunction) {
|
||||||
|
throw new ArgumentError(entryPoint);
|
||||||
|
}
|
||||||
// The VM will invoke [_startIsolate] with entryPoint as argument.
|
// The VM will invoke [_startIsolate] with entryPoint as argument.
|
||||||
readyPort = new RawReceivePort();
|
readyPort = new RawReceivePort();
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ import 'dart:_isolate_helper' show CapabilityImpl,
|
||||||
ReceivePortImpl,
|
ReceivePortImpl,
|
||||||
RawReceivePortImpl;
|
RawReceivePortImpl;
|
||||||
|
|
||||||
|
typedef _UnaryFunction(arg);
|
||||||
|
|
||||||
@patch
|
@patch
|
||||||
class Isolate {
|
class Isolate {
|
||||||
static final _currentIsolateCache = IsolateNatives.currentIsolate;
|
static final _currentIsolateCache = IsolateNatives.currentIsolate;
|
||||||
|
@ -42,6 +44,11 @@ class Isolate {
|
||||||
(onExit != null) ||
|
(onExit != null) ||
|
||||||
(onError != null);
|
(onError != null);
|
||||||
try {
|
try {
|
||||||
|
// Check for the type of `entryPoint` on the spawning isolate to make
|
||||||
|
// error-handling easier.
|
||||||
|
if (entryPoint is! _UnaryFunction) {
|
||||||
|
throw new ArgumentError(entryPoint);
|
||||||
|
}
|
||||||
// TODO: Consider passing the errorsAreFatal/onExit/onError values
|
// TODO: Consider passing the errorsAreFatal/onExit/onError values
|
||||||
// as arguments to the internal spawnUri instead of setting
|
// as arguments to the internal spawnUri instead of setting
|
||||||
// them after the isolate has been created.
|
// them after the isolate has been created.
|
||||||
|
|
|
@ -676,8 +676,6 @@ WebPlatformTest/shadow-dom/shadow-trees/upper-boundary-encapsulation/test-007_t0
|
||||||
[ $compiler == dart2js && $checked != true ]
|
[ $compiler == dart2js && $checked != true ]
|
||||||
Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t02: Timeout, Skip # Please triage this failure
|
Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t02: Timeout, Skip # Please triage this failure
|
||||||
Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t09: CompileTimeError # Please triage this failure
|
Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t09: CompileTimeError # Please triage this failure
|
||||||
LibTest/isolate/Isolate/spawn_A02_t04: RuntimeError # Issue 27185
|
|
||||||
LibTest/isolate/Isolate/spawn_A02_t05: RuntimeError # Issue 27185
|
|
||||||
|
|
||||||
[ $compiler == dart2js && $minified ]
|
[ $compiler == dart2js && $minified ]
|
||||||
LibTest/typed_data/Float32List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
|
LibTest/typed_data/Float32List/runtimeType_A01_t01: fail # co19-roll r559: Please triage this failure
|
||||||
|
|
|
@ -59,10 +59,6 @@ Language/Libraries_and_Scripts/Imports/deferred_import_t02: Crash # Issue 27201
|
||||||
[ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_app) && $system == windows ]
|
[ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_app) && $system == windows ]
|
||||||
Language/Expressions/Function_Invocation/async_invokation_t04: Pass, RuntimeError # co19 issue 54
|
Language/Expressions/Function_Invocation/async_invokation_t04: Pass, RuntimeError # co19 issue 54
|
||||||
|
|
||||||
[ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_app) && $checked == false ]
|
|
||||||
LibTest/isolate/Isolate/spawn_A02_t04: RuntimeError # Issue 27185
|
|
||||||
LibTest/isolate/Isolate/spawn_A02_t05: RuntimeError, Crash # Issue 27185
|
|
||||||
|
|
||||||
[ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_app) && ($arch != x64 && $arch != simarm64 && $arch != arm64 && $arch != simdbc64) ]
|
[ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_app) && ($arch != x64 && $arch != simarm64 && $arch != arm64 && $arch != simdbc64) ]
|
||||||
LibTest/core/int/operator_left_shift_A01_t02: Fail # co19 issue 129
|
LibTest/core/int/operator_left_shift_A01_t02: Fail # co19 issue 129
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue