Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1292)

Unified Diff: runtime/lib/isolate_patch.dart

Issue 243973002: - Add a minimal implementation of Capability. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/isolate.cc ('k') | runtime/platform/assert.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/lib/isolate_patch.dart
===================================================================
--- runtime/lib/isolate_patch.dart (revision 35287)
+++ runtime/lib/isolate_patch.dart (working copy)
@@ -11,6 +11,16 @@
_ReceivePortImpl.fromRawReceivePort;
}
+patch class Capability {
+ /* patch */ factory Capability() {
+ throw new UnimplementedError();
+ }
+}
+
+class _CapabilityImpl {
+ factory _CapabilityImpl() native "CapabilityImpl_factory";
+}
+
patch class RawReceivePort {
/**
* Opens a long-lived port for receiving messages.
@@ -79,41 +89,39 @@
factory _RawReceivePortImpl() native "RawReceivePortImpl_factory";
close() {
- _portMap.remove(_id);
- _closeInternal(_id);
+ // Close the port and remove it from the handler map.
+ _handlerMap.remove(this._closeInternal());
}
SendPort get sendPort {
- return new _SendPortImpl._from(this);
+ return _get_sendport();
}
- /**** Internal implementation details ****/
- // Called from the VM to create a new RawReceivePort instance.
- static _RawReceivePortImpl _get(int id) {
- return _portMap[id];
+ bool operator==(var other) {
+ return (other is _RawReceivePortImpl) &&
+ (this._get_id() == other._get_id());
}
- static _RawReceivePortImpl _create(int id) {
- assert(_portMap[id]== null);
- return new _RawReceivePortImpl._internal(id);
+ int get hashCode {
+ return sendPort.hashCode();
}
- _RawReceivePortImpl._internal(int id) : _id = id {
- _portMap[id] = this;
- }
+ /**** Internal implementation details ****/
+ _get_id() native "RawReceivePortImpl_get_id";
+ _get_sendport() native "RawReceivePortImpl_get_sendport";
- // Called from the VM to retrieve the RawReceivePort for a message.
- static _RawReceivePortImpl _lookupReceivePort(int id) {
- return _portMap[id];
+ // Called from the VM to retrieve the handler for a message.
+ static _lookupHandler(int id) {
+ var result = _handlerMap[id];
+ return result;
}
// Called from the VM to dispatch to the handler.
- static void _handleMessage(_RawReceivePortImpl port, var message) {
- assert(port != null);
+ static void _handleMessage(Function handler, var message) {
// TODO(floitsch): this relies on the fact that any exception aborts the
// VM. Once we have non-fatal global exceptions we need to catch errors
// so that we can run the immediate callbacks.
- port._handler(message);
+ handler(message);
if (_pendingImmediateCallback != null) {
var callback = _pendingImmediateCallback;
_pendingImmediateCallback = null;
@@ -122,57 +130,38 @@
}
// Call into the VM to close the VM maintained mappings.
- static _closeInternal(int id) native "RawReceivePortImpl_closeInternal";
+ _closeInternal() native "RawReceivePortImpl_closeInternal";
- void set handler(Function newHandler) {
- this._handler = newHandler;
+ void set handler(Function value) {
+ _handlerMap[this._get_id()] = value;
}
- final int _id;
- Function _handler;
-
- // id to RawReceivePort mapping.
- static final Map _portMap = new HashMap();
+ // TODO(iposva): Ideally keep this map in the VM.
+ // id to handler mapping.
+ static final Map _handlerMap = new HashMap();
}
class _SendPortImpl implements SendPort {
/*--- public interface ---*/
void send(var message) {
- _sendInternal(_id, message);
+ _sendInternal(message);
}
bool operator==(var other) {
- return (other is _SendPortImpl) && _id == other._id;
+ return (other is _SendPortImpl) && (this._get_id() == other._get_id());
}
int get hashCode {
- const int MASK = 0x3FFFFFFF;
- int hash = _id;
- hash = (hash + ((hash & (MASK >> 10)) << 10)) & MASK;
- hash ^= (hash >> 6);
- hash = (hash + ((hash & (MASK >> 3)) << 3)) & MASK;
- hash ^= (hash >> 11);
- hash = (hash + ((hash & (MASK >> 15)) << 15)) & MASK;
- return hash;
+ return _get_hashcode();
}
/*--- private implementation ---*/
- _SendPortImpl._from(_RawReceivePortImpl from) : _id = from._id;
- _SendPortImpl._with(int id) : _id = id;
+ _get_id() native "SendPortImpl_get_id";
+ _get_hashcode() native "SendPortImpl_get_hashcode";
- // _SendPortImpl._create is called from the VM when a new SendPort instance is
- // needed by the VM code.
- static SendPort _create(int id) {
- return new _SendPortImpl._with(id);
- }
-
- // Forward the implementation of sending messages to the VM. Only port ids
- // are being handed to the VM.
- static _sendInternal(int sendId, var message)
- native "SendPortImpl_sendInternal_";
-
- final int _id;
+ // Forward the implementation of sending messages to the VM.
+ void _sendInternal(var message) native "SendPortImpl_sendInternal_";
}
typedef _MainFunction();
@@ -277,9 +266,3 @@
static SendPort _spawnUri(String uri) native "Isolate_spawnUri";
}
-
-patch class Capability {
- /* patch */ factory Capability() {
- throw new UnimplementedError();
- }
-}
« no previous file with comments | « runtime/lib/isolate.cc ('k') | runtime/platform/assert.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698