| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 class _MessageTraverserVisitedMap { | 5 class _MessageTraverserVisitedMap { |
| 6 | 6 |
| 7 operator[](var object) => null; | 7 operator[](var object) => null; |
| 8 void operator[]=(var object, var info) { } | 8 void operator[]=(var object, var info) { } |
| 9 | 9 |
| 10 void reset() { } | 10 void reset() { } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 } | 30 } |
| 31 return result; | 31 return result; |
| 32 } | 32 } |
| 33 | 33 |
| 34 _dispatch(var x) { | 34 _dispatch(var x) { |
| 35 if (isPrimitive(x)) return visitPrimitive(x); | 35 if (isPrimitive(x)) return visitPrimitive(x); |
| 36 if (x is List) return visitList(x); | 36 if (x is List) return visitList(x); |
| 37 if (x is Map) return visitMap(x); | 37 if (x is Map) return visitMap(x); |
| 38 if (x is SendPort) return visitSendPort(x); | 38 if (x is SendPort) return visitSendPort(x); |
| 39 if (x is SendPortSync) return visitSendPortSync(x); | 39 if (x is SendPortSync) return visitSendPortSync(x); |
| 40 if (x is Function) return visitFunction(x); | |
| 41 | 40 |
| 42 // TODO(floitsch): make this a real exception. (which one)? | 41 // Overridable fallback. |
| 43 throw "Message serialization: Illegal value $x passed"; | 42 return visitObject(x); |
| 44 } | 43 } |
| 45 | 44 |
| 46 abstract visitPrimitive(x); | 45 abstract visitPrimitive(x); |
| 47 abstract visitList(List x); | 46 abstract visitList(List x); |
| 48 abstract visitMap(Map x); | 47 abstract visitMap(Map x); |
| 49 abstract visitSendPort(SendPort x); | 48 abstract visitSendPort(SendPort x); |
| 50 abstract visitSendPortSync(SendPortSync x); | 49 abstract visitSendPortSync(SendPortSync x); |
| 51 | 50 |
| 52 visitFunction(Function func) { | 51 visitObject(Object x) { |
| 53 throw "Serialization of functions is not allowed."; | 52 // TODO(floitsch): make this a real exception. (which one)? |
| 53 throw "Message serialization: Illegal value $x passed"; |
| 54 } | 54 } |
| 55 | 55 |
| 56 static bool isPrimitive(x) { | 56 static bool isPrimitive(x) { |
| 57 return (x === null) || (x is String) || (x is num) || (x is bool); | 57 return (x === null) || (x is String) || (x is num) || (x is bool); |
| 58 } | 58 } |
| 59 } | 59 } |
| 60 | 60 |
| 61 | 61 |
| 62 /** A visitor that recursively copies a message. */ | 62 /** A visitor that recursively copies a message. */ |
| 63 class _Copier extends _MessageTraverser { | 63 class _Copier extends _MessageTraverser { |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 } | 151 } |
| 152 | 152 |
| 153 _deserializeHelper(x) { | 153 _deserializeHelper(x) { |
| 154 if (isPrimitive(x)) return x; | 154 if (isPrimitive(x)) return x; |
| 155 assert(x is List); | 155 assert(x is List); |
| 156 switch (x[0]) { | 156 switch (x[0]) { |
| 157 case 'ref': return _deserializeRef(x); | 157 case 'ref': return _deserializeRef(x); |
| 158 case 'list': return _deserializeList(x); | 158 case 'list': return _deserializeList(x); |
| 159 case 'map': return _deserializeMap(x); | 159 case 'map': return _deserializeMap(x); |
| 160 case 'sendport': return deserializeSendPort(x); | 160 case 'sendport': return deserializeSendPort(x); |
| 161 // TODO(floitsch): Use real exception (which one?). | 161 default: return deserializeObject(x); |
| 162 default: throw "Unexpected serialized object"; | |
| 163 } | 162 } |
| 164 } | 163 } |
| 165 | 164 |
| 166 _deserializeRef(List x) { | 165 _deserializeRef(List x) { |
| 167 int id = x[1]; | 166 int id = x[1]; |
| 168 var result = _deserialized[id]; | 167 var result = _deserialized[id]; |
| 169 assert(result !== null); | 168 assert(result !== null); |
| 170 return result; | 169 return result; |
| 171 } | 170 } |
| 172 | 171 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 193 for (int i = 0; i < len; i++) { | 192 for (int i = 0; i < len; i++) { |
| 194 var key = _deserializeHelper(keys[i]); | 193 var key = _deserializeHelper(keys[i]); |
| 195 var value = _deserializeHelper(values[i]); | 194 var value = _deserializeHelper(values[i]); |
| 196 result[key] = value; | 195 result[key] = value; |
| 197 } | 196 } |
| 198 return result; | 197 return result; |
| 199 } | 198 } |
| 200 | 199 |
| 201 abstract deserializeSendPort(List x); | 200 abstract deserializeSendPort(List x); |
| 202 | 201 |
| 202 deserializeObject(List x) { |
| 203 // TODO(floitsch): Use real exception (which one?). |
| 204 throw "Unexpected serialized object"; |
| 205 } |
| 203 } | 206 } |
| OLD | NEW |