OLD | NEW |
1 # Dart VM Service Protocol 0.0 | 1 # Dart VM Service Protocol 1.0 (Draft 1) |
2 | 2 |
3 This document describes _version 0.0_ of the Dart VM Service Protocol. | 3 This document describes _draft 1_ of _version 1.0_ of the Dart VM |
4 This protocol is used to communicate with a running Dart Virtual | 4 Service Protocol. This protocol is used to communicate with a running |
5 Machine. | 5 Dart Virtual Machine. |
6 | 6 |
7 To use the Service Protocol, start the VM with the *--observe* flag. | 7 To use the Service Protocol, start the VM with the *--observe* flag. |
8 The VM will start a webserver which services protocol requests via WebSocket. | 8 The VM will start a webserver which services protocol requests via WebSocket. |
9 It is possible to make HTTP (non-WebSocket) requests, | 9 It is possible to make HTTP (non-WebSocket) requests, |
10 but this does not allow access to VM _events_ and is not documented | 10 but this does not allow access to VM _events_ and is not documented |
11 here. | 11 here. |
12 | 12 |
13 The Service Protocol is based on JSON-RPC 2.0 | 13 The Service Protocol is based on JSON-RPC 2.0 |
14 (http://www.jsonrpc.org/specification). The Service Protocol has been | 14 (http://www.jsonrpc.org/specification). The Service Protocol has been |
15 extended to support pushing _events_ to the client, which is | 15 extended to support pushing _events_ to the client, which is |
16 apparently outside the scope of the JSON-RPC specification. | 16 apparently outside the scope of the JSON-RPC specification. |
17 | 17 |
18 **Table of Contents** | 18 **Table of Contents** |
19 | 19 |
20 - [RPCs, Requests, and Responses](#rpcs-requests-and-responses) | 20 - [RPCs, Requests, and Responses](#rpcs-requests-and-responses) |
21 - [Events](#events) | 21 - [Events](#events) |
22 - [Types](#types) | 22 - [Types](#types) |
23 - [IDs and Names](#ids-and-names) | 23 - [IDs and Names](#ids-and-names) |
24 - [Versioning](#versioning) | 24 - [Versioning](#versioning) |
(...skipping 17 matching lines...) Expand all Loading... |
42 - [streamCancel](#streamcancel) | 42 - [streamCancel](#streamcancel) |
43 - [streamListen](#streamlisten) | 43 - [streamListen](#streamlisten) |
44 - [Public Types](#public-types) | 44 - [Public Types](#public-types) |
45 - [BoundField](#boundfield) | 45 - [BoundField](#boundfield) |
46 - [BoundVariable](#boundvariable) | 46 - [BoundVariable](#boundvariable) |
47 - [Breakpoint](#breakpoint) | 47 - [Breakpoint](#breakpoint) |
48 - [Class](#class) | 48 - [Class](#class) |
49 - [ClassList](#classlist) | 49 - [ClassList](#classlist) |
50 - [Code](#code) | 50 - [Code](#code) |
51 - [CodeKind](#codekind) | 51 - [CodeKind](#codekind) |
| 52 - [Context](#context) |
| 53 - [ContextElement](#contextelement) |
52 - [Error](#error) | 54 - [Error](#error) |
| 55 - [ErrorKind](#errorkind) |
53 - [Event](#event) | 56 - [Event](#event) |
54 - [EventKind](#eventkind) | 57 - [EventKind](#eventkind) |
55 - [Field](#field) | 58 - [Field](#field) |
56 - [Flag](#flag) | 59 - [Flag](#flag) |
57 - [FlagList](#flaglist) | 60 - [FlagList](#flaglist) |
58 - [Frame](#frame) | 61 - [Frame](#frame) |
59 - [Function](#function) | 62 - [Function](#function) |
60 - [Instance](#instance) | 63 - [Instance](#instance) |
61 - [Isolate](#isolate) | 64 - [Isolate](#isolate) |
62 - [Library](#library) | 65 - [Library](#library) |
63 - [LibraryDependency](#librarydependency) | 66 - [LibraryDependency](#librarydependency) |
64 » - [ListElement](#listelement) | 67 » - [MapAssociation](#mapassociation) |
65 - [Message](#message) | 68 - [Message](#message) |
66 - [Null](#null) | 69 - [Null](#null) |
67 - [Object](#object) | 70 - [Object](#object) |
68 - [Sentinel](#sentinel) | 71 - [Sentinel](#sentinel) |
69 - [SentinelKind](#sentinelkind) | 72 - [SentinelKind](#sentinelkind) |
70 - [Script](#script) | 73 - [Script](#script) |
71 - [SourceLocation](#sourcelocation) | 74 - [SourceLocation](#sourcelocation) |
72 - [Stack](#stack) | 75 - [Stack](#stack) |
73 - [StepOption](#stepoption) | 76 - [StepOption](#stepoption) |
74 - [Success](#success) | 77 - [Success](#success) |
75 - [TypeArguments](#typearguments) | 78 - [TypeArguments](#typearguments) |
76 - [Response](#response) | 79 - [Response](#response) |
77 - [Version](#version) | 80 - [Version](#version) |
78 - [VM](#vm) | 81 - [VM](#vm) |
79 - [Revision History](#revision-history) | 82 - [Revision History](#revision-history) |
80 | 83 |
81 ## RPCs, Requests, and Responses | 84 ## RPCs, Requests, and Responses |
82 | 85 |
83 An RPC request is a JSON object sent to the server. Here is an | 86 An RPC request is a JSON object sent to the server. Here is an |
84 example [getVersion](#getversion) request: | 87 example [getVersion](#getversion) request: |
85 | 88 |
86 ``` | 89 ``` |
87 { | 90 { |
88 "jsonrpc": "2.0", | 91 "jsonrpc": "2.0", |
89 "method": "getVersion", | 92 "method": "getVersion", |
90 "params": {}, | 93 "params": {}, |
91 "id": "1" | 94 "id": "1" |
92 } | 95 } |
93 ``` | 96 ``` |
94 | 97 |
95 Currently the _id_ property must be a string. The Service Protocol | 98 Currently the _id_ property must be a string. The Service Protocol |
96 optionally accepts requests without the _jsonprc_ property. | 99 optionally accepts requests without the _jsonprc_ property. |
97 | 100 |
98 An RPC response is a JSON object (http://json.org/). The response always specif
ies an | 101 An RPC response is a JSON object (http://json.org/). The response always specifi
es an |
99 _id_ property to pair it with the corresponding request. If the RPC | 102 _id_ property to pair it with the corresponding request. If the RPC |
100 was successful, the _result_ property provides the result. | 103 was successful, the _result_ property provides the result. |
101 | 104 |
102 Here is an example response for our [getVersion](#getversion) request above: | 105 Here is an example response for our [getVersion](#getversion) request above: |
103 | 106 |
104 ``` | 107 ``` |
105 { | 108 { |
106 "json-rpc": "2.0", | 109 "json-rpc": "2.0", |
107 "result": { | 110 "result": { |
108 "type": "Version", | 111 "type": "Version", |
109 "major": 0, | 112 "major": 1, |
110 "minor": 0 | 113 "minor": 0 |
111 } | 114 } |
112 "id": "1" | 115 "id": "1" |
113 } | 116 } |
114 ``` | 117 ``` |
115 | 118 |
116 Parameters for RPC requests are always provided as _named_ parameters. | 119 Parameters for RPC requests are always provided as _named_ parameters. |
117 The JSON-RPC spec provides for _positional_ parameters as well, but they | 120 The JSON-RPC spec provides for _positional_ parameters as well, but they |
118 are not supported by the Dart VM. | 121 are not supported by the Dart VM. |
119 | 122 |
120 By convention, every response returned by the Service Protocol is a subtype | 123 By convention, every response returned by the Service Protocol is a subtype |
121 of [Response](#response) and provides a _type_ paramters which can be used | 124 of [Response](#response) and provides a _type_ paramters which can be used |
122 to distinguish the exact return type. In the example above, the | 125 to distinguish the exact return type. In the example above, the |
123 [Version](#version) type is returned. | 126 [Version](#version) type is returned. |
124 | 127 |
125 Here is an example [streamListen](#streamlisten) request which provides | 128 Here is an example [streamListen](#streamlisten) request which provides |
126 a parameter: | 129 a parameter: |
127 | 130 |
128 ``` | 131 ``` |
129 { | 132 { |
130 "jsonrpc": "2.0", | 133 "jsonrpc": "2.0", |
131 "method": "streamListen", | 134 "method": "streamListen", |
132 "params": { | 135 "params": { |
133 "streamId": "GC", | 136 "streamId": "GC", |
134 }, | 137 }, |
135 "id": "2" | 138 "id": "2" |
136 } | 139 } |
137 ``` | 140 ``` |
138 | 141 |
139 <a name="rpc-error"></a> | 142 <a name="rpc-error"></a> |
140 When an RPC encounters an error, it is provided in the _error_ | 143 When an RPC encounters an error, it is provided in the _error_ |
141 property of the response object. JSON-RPC errors always provide | 144 property of the response object. JSON-RPC errors always provide |
142 _code_, _message_, and _data_ properties. | 145 _code_, _message_, and _data_ properties. |
143 | 146 |
144 Here is an example error response for our [streamListen](#streamlisten) | 147 Here is an example error response for our [streamListen](#streamlisten) |
145 request above. This error would be generated if we were attempting to | 148 request above. This error would be generated if we were attempting to |
146 subscribe to the _GC_ stream multiple times from the same client. | 149 subscribe to the _GC_ stream multiple times from the same client. |
147 | 150 |
148 ``` | 151 ``` |
149 { | 152 { |
150 "json-rpc": "2.0", | 153 "json-rpc": "2.0", |
151 "error": { | 154 "error": { |
152 "code": 103, | 155 "code": 103, |
153 "message": "Stream already subscribed", | 156 "message": "Stream already subscribed", |
154 "data": { | 157 "data": { |
155 "details": "The stream 'GC' is already subscribed" | 158 "details": "The stream 'GC' is already subscribed" |
(...skipping 14 matching lines...) Expand all Loading... |
170 103 | Stream already subscribed | The client is already subscribed to the specif
ied _streamId_ | 173 103 | Stream already subscribed | The client is already subscribed to the specif
ied _streamId_ |
171 104 | Stream not subscribed | The client is not subscribed to the specified _str
eamId_ | 174 104 | Stream not subscribed | The client is not subscribed to the specified _str
eamId_ |
172 | 175 |
173 | 176 |
174 | 177 |
175 | 178 |
176 ## Events | 179 ## Events |
177 | 180 |
178 By using the [streamListen](#streamlisten) and [streamCancel](#streamcancel) RPC
s, a client may | 181 By using the [streamListen](#streamlisten) and [streamCancel](#streamcancel) RPC
s, a client may |
179 request to be notified when an _event_ is posted to a specific | 182 request to be notified when an _event_ is posted to a specific |
180 _stream_ in the VM. Every stream has an associated _stream id_ which | 183 _stream_ in the VM. Every stream has an associated _stream id_ which |
181 is used to name that stream. | 184 is used to name that stream. |
182 | 185 |
183 Each stream provides access to certain kinds of events. For example the _Isolat
e_ stream provides | 186 Each stream provides access to certain kinds of events. For example the _Isolate
_ stream provides |
184 access to events pertaining to isolate births, deaths, and name changes. See [s
treamListen](#streamlisten) | 187 access to events pertaining to isolate births, deaths, and name changes. See [st
reamListen](#streamlisten) |
185 for a list of the well-known stream ids and their associated events. | 188 for a list of the well-known stream ids and their associated events. |
186 | 189 |
187 Events arrive asynchronously over the WebSocket and always have the | 190 Events arrive asynchronously over the WebSocket and always have the |
188 _streamId_ and _event_ properties: | 191 _streamId_ and _event_ properties: |
189 | 192 |
190 ``` | 193 ``` |
191 { | 194 { |
192 "event": { | 195 "event": { |
193 "type": "Event", | 196 "type": "Event", |
194 "kind": "IsolateExit", | 197 "kind": "IsolateExit", |
195 "isolate": { | 198 "isolate": { |
196 "type": "@Isolate", | 199 "type": "@Isolate", |
197 "id": "isolates/33", | 200 "id": "isolates/33", |
198 "number": "51048743613", | 201 "number": "51048743613", |
199 "name": "worker-isolate" | 202 "name": "worker-isolate" |
200 } | 203 } |
201 } | 204 } |
202 "streamId": "Isolate" | 205 "streamId": "Isolate" |
203 } | 206 } |
204 ``` | 207 ``` |
205 | 208 |
206 It is considered a _backwards compatible_ change to add a new type of event to a
n existing stream. | 209 It is considered a _backwards compatible_ change to add a new type of event to a
n existing stream. |
207 Clients should be written to handle this gracefully. | 210 Clients should be written to handle this gracefully. |
208 | 211 |
209 | 212 |
210 ## Types | 213 ## Types |
211 | 214 |
212 By convention, every result and event provided by the Service Protocol | 215 By convention, every result and event provided by the Service Protocol |
213 is a subtype of [Response](#response) and has the _type_ property. | 216 is a subtype of [Response](#response) and has the _type_ property. |
214 This allows the client to distinguish different kinds of responses. For example
, | 217 This allows the client to distinguish different kinds of responses. For example, |
215 information about a Dart function is returned using the [Function](#function) ty
pe. | 218 information about a Dart function is returned using the [Function](#function) ty
pe. |
216 | 219 |
217 If the type of a response begins with the _@_ character, then that | 220 If the type of a response begins with the _@_ character, then that |
218 response is a _reference_. If the type name of a response does not | 221 response is a _reference_. If the type name of a response does not |
219 begin with the _@_ character, it is the an _object_. A reference is | 222 begin with the _@_ character, it is the an _object_. A reference is |
220 intended to be a subset of an object which provides enough information | 223 intended to be a subset of an object which provides enough information |
221 to generate a reasonable looking reference to the object. | 224 to generate a reasonable looking reference to the object. |
222 | 225 |
223 For example, an [@Isolate](#isolate) reference has the _type_, _id_, _name_ and | 226 For example, an [@Isolate](#isolate) reference has the _type_, _id_, _name_ and |
224 _number_ properties: | 227 _number_ properties: |
225 | 228 |
226 ``` | 229 ``` |
227 "result": { | 230 "result": { |
228 "type": "@Isolate", | 231 "type": "@Isolate", |
229 "id": "isolates/33", | 232 "id": "isolates/33", |
(...skipping 14 matching lines...) Expand all Loading... |
244 "entry": ... | 247 "entry": ... |
245 "heaps": ... | 248 "heaps": ... |
246 ... | 249 ... |
247 } | 250 } |
248 ``` | 251 ``` |
249 | 252 |
250 ## IDs and Names | 253 ## IDs and Names |
251 | 254 |
252 Many responses returned by the Service Protocol have an _id_ property. | 255 Many responses returned by the Service Protocol have an _id_ property. |
253 This is an identifier used to request an object from an isolate using | 256 This is an identifier used to request an object from an isolate using |
254 the [getObject](#getobject) RPC. If two responses have the same _id_ then they | 257 the [getObject](#getobject) RPC. If two responses have the same _id_ then they |
255 refer to the same object. The converse is not true: the same object | 258 refer to the same object. The converse is not true: the same object |
256 may sometimes be returned with two different values for _id_. | 259 may sometimes be returned with two different values for _id_. |
257 | 260 |
258 The _id_ property should be treated as an opaque string by the client: | 261 The _id_ property should be treated as an opaque string by the client: |
259 it is not meant to be parsed. | 262 it is not meant to be parsed. |
260 | 263 |
261 An id can be either _temporary_ or _fixed_: | 264 An id can be either _temporary_ or _fixed_: |
262 | 265 |
263 * A _temporary_ id can expire over time. The VM allocates certain ids | 266 * A _temporary_ id can expire over time. The VM allocates certain ids |
264 in a ring which evicts old ids over time. | 267 in a ring which evicts old ids over time. |
265 | 268 |
266 * A _fixed_ id will never expire, but the object it refers to may | 269 * A _fixed_ id will never expire, but the object it refers to may |
267 be collected. The VM uses fixed ids for objects like scripts, | 270 be collected. The VM uses fixed ids for objects like scripts, |
268 libraries, and classes. | 271 libraries, and classes. |
269 | 272 |
270 If an id is fixed, the _fixedId_ property will be true. If an id is temporary | 273 If an id is fixed, the _fixedId_ property will be true. If an id is temporary |
271 the _fixedId_ property will be omitted. | 274 the _fixedId_ property will be omitted. |
272 | 275 |
273 Sometimes a temporary id may expire. In this case, some RPCs may return | 276 Sometimes a temporary id may expire. In this case, some RPCs may return |
274 an _Expired_ [Sentinel](#sentinel) to indicate this. | 277 an _Expired_ [Sentinel](#sentinel) to indicate this. |
275 | 278 |
276 The object referred to by an id may be collected by the VM's garbage | 279 The object referred to by an id may be collected by the VM's garbage |
277 collector. In this case, some RPCs may return a _Collected_ [Sentinel](#sentine
l) | 280 collector. In this case, some RPCs may return a _Collected_ [Sentinel](#sentinel
) |
278 to indicate this. | 281 to indicate this. |
279 | 282 |
280 Many objects also have a _name_ property. This is provided so that | 283 Many objects also have a _name_ property. This is provided so that |
281 objects can be displayed in a way that a Dart language programmer | 284 objects can be displayed in a way that a Dart language programmer |
282 would find familiar. Names are not unique. | 285 would find familiar. Names are not unique. |
283 | 286 |
284 ## Versioning | 287 ## Versioning |
285 | 288 |
286 The [getVersion](#getversion) RPC can be used to find the version of the protoco
l | 289 The [getVersion](#getversion) RPC can be used to find the version of the protoco
l |
287 returned by a VM. The _Version_ response has a major and a minor | 290 returned by a VM. The _Version_ response has a major and a minor |
288 version number: | 291 version number: |
289 | 292 |
290 ``` | 293 ``` |
291 "result": { | 294 "result": { |
292 "type": "Version", | 295 "type": "Version", |
293 "major": 0, | 296 "major": 1, |
294 "minor": 0 | 297 "minor": 0 |
295 } | 298 } |
296 ``` | 299 ``` |
297 | 300 |
298 The major version number is incremented when the protocol is changed | 301 The major version number is incremented when the protocol is changed |
299 in a potentially _incompatible_ way. An example of an incompatible | 302 in a potentially _incompatible_ way. An example of an incompatible |
300 change is removing a non-optional property from a result. | 303 change is removing a non-optional property from a result. |
301 | 304 |
302 The minor version number is incremented when the protocol is changed | 305 The minor version number is incremented when the protocol is changed |
303 in a _backwards compatible_ way. An example of a backwards compatible | 306 in a _backwards compatible_ way. An example of a backwards compatible |
304 change is adding a property to a result. | 307 change is adding a property to a result. |
305 | 308 |
306 Certain changes that would normally not be backwards compatible are | 309 Certain changes that would normally not be backwards compatible are |
307 considered backwards compatible for the purposes of versioning. | 310 considered backwards compatible for the purposes of versioning. |
308 Specifically, additions can be made to the [EventKind](#eventkind) and | 311 Specifically, additions can be made to the [EventKind](#eventkind) and |
309 [InstanceKind](#instancekind) enumerated types and the client must | 312 [InstanceKind](#instancekind) enumerated types and the client must |
310 handle this gracefully. See the notes on these enumerated types for more | 313 handle this gracefully. See the notes on these enumerated types for more |
311 information. | 314 information. |
312 | 315 |
313 ## Private RPCs, Types, and Properties | 316 ## Private RPCs, Types, and Properties |
314 | 317 |
315 Any RPC, type, or property which begins with an underscore is said to | 318 Any RPC, type, or property which begins with an underscore is said to |
316 be _private_. These RPCs, types, and fields can be changed at any | 319 be _private_. These RPCs, types, and fields can be changed at any |
317 time without changing major or minor version numbers. | 320 time without changing major or minor version numbers. |
318 | 321 |
319 The intention is that the Service Protocol will evolve by adding | 322 The intention is that the Service Protocol will evolve by adding |
320 private RPCs which may, over time, migrate to the public api as they | 323 private RPCs which may, over time, migrate to the public api as they |
321 become stable. Some private types and properties expose VM specific | 324 become stable. Some private types and properties expose VM specific |
322 implementation state and will never be appropriate to add to | 325 implementation state and will never be appropriate to add to |
323 the public api. | 326 the public api. |
324 | 327 |
325 ## Public RPCs | 328 ## Public RPCs |
326 | 329 |
327 The following is a list of all public RPCs supported by the Service Protocol. | 330 The following is a list of all public RPCs supported by the Service Protocol. |
328 | 331 |
329 An RPC is described using the following format: | 332 An RPC is described using the following format: |
330 | 333 |
331 ``` | 334 ``` |
332 ReturnType methodName(parameterType1 parameterName1, | 335 ReturnType methodName(parameterType1 parameterName1, |
333 parameterType2, parameterName2, | 336 parameterType2, parameterName2, |
334 ...) | 337 ...) |
335 ``` | 338 ``` |
336 | 339 |
337 If an RPC says it returns type _T_ it may actually return _T_ or any | 340 If an RPC says it returns type _T_ it may actually return _T_ or any |
338 [subtype](#public-types) of _T_. For example, an | 341 [subtype](#public-types) of _T_. For example, an |
339 RPC which is declared to return [@Instance](#instance) may actually | 342 RPC which is declared to return [@Instance](#instance) may actually |
340 return [@Int](#int). | 343 return [@Int](#int). |
341 | 344 |
342 If an RPC can return one or more independent types, this is indicated | 345 If an RPC can return one or more independent types, this is indicated |
343 with the vertical bar: | 346 with the vertical bar: |
344 | 347 |
345 ``` | 348 ``` |
346 ReturnType1|ReturnType2 | 349 ReturnType1|ReturnType2 |
347 ``` | 350 ``` |
348 | 351 |
349 Any RPC may return an _error_ response as [described above](#rpc-error). | 352 Any RPC may return an _error_ response as [described above](#rpc-error). |
350 | 353 |
351 Some parameters are optional. This is indicated by the text | 354 Some parameters are optional. This is indicated by the text |
352 _[optional]_ following the parameter name: | 355 _[optional]_ following the parameter name: |
353 | 356 |
354 ``` | 357 ``` |
355 ReturnType methodName(parameterType parameterName [optional) | 358 ReturnType methodName(parameterType parameterName [optional) |
356 ``` | 359 ``` |
357 | 360 |
358 A description of the return types and parameter types is provided | 361 A description of the return types and parameter types is provided |
359 in the section on [public types](#public-types). | 362 in the section on [public types](#public-types). |
360 | 363 |
361 ### addBreakpoint | 364 ### addBreakpoint |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
421 | 424 |
422 ### evaluateInFrame | 425 ### evaluateInFrame |
423 | 426 |
424 ``` | 427 ``` |
425 @Instance|@Error evaluateInFrame(string isolateId, | 428 @Instance|@Error evaluateInFrame(string isolateId, |
426 int frameIndex, | 429 int frameIndex, |
427 string expression) | 430 string expression) |
428 ``` | 431 ``` |
429 | 432 |
430 The _evaluateInFrame_ RPC is used to evaluate an expression in the | 433 The _evaluateInFrame_ RPC is used to evaluate an expression in the |
431 context of a particular stack frame. _frameIndex_ is the index of the | 434 context of a particular stack frame. _frameIndex_ is the index of the |
432 desired [Frame](#frame), with an index of _0_ indicating the top (most | 435 desired [Frame](#frame), with an index of _0_ indicating the top (most |
433 recent) frame. | 436 recent) frame. |
434 | 437 |
435 If an error occurs while evaluating the expression, an [@Error](#error) | 438 If an error occurs while evaluating the expression, an [@Error](#error) |
436 reference will be returned. | 439 reference will be returned. |
437 | 440 |
438 If the expression is evaluated successfully, an [@Instance](#instance) | 441 If the expression is evaluated successfully, an [@Instance](#instance) |
439 reference will be returned. | 442 reference will be returned. |
440 | 443 |
441 ### getFlagList | 444 ### getFlagList |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 If the object handle has not expired and the object has not been | 482 If the object handle has not expired and the object has not been |
480 collected, then an [Object](#object) will be returned. | 483 collected, then an [Object](#object) will be returned. |
481 | 484 |
482 ### getStack | 485 ### getStack |
483 | 486 |
484 ``` | 487 ``` |
485 Stack getStack(string isolateId) | 488 Stack getStack(string isolateId) |
486 ``` | 489 ``` |
487 | 490 |
488 The _getStack_ RPC is used to retrieve the current execution stack and | 491 The _getStack_ RPC is used to retrieve the current execution stack and |
489 message queue for an isolate. The isolate does not need to be paused. | 492 message queue for an isolate. The isolate does not need to be paused. |
490 | 493 |
491 See [Stack](#stack). | 494 See [Stack](#stack). |
492 | 495 |
493 ### getVersion | 496 ### getVersion |
494 | 497 |
495 ``` | 498 ``` |
496 Version getVersion() | 499 Version getVersion() |
497 ``` | 500 ``` |
498 | 501 |
499 The _getVersion_ RPC is used to determine what version of the Service Protocol i
s served by a VM. | 502 The _getVersion_ RPC is used to determine what version of the Service Protocol i
s served by a VM. |
500 | 503 |
501 See [Version](#version). | 504 See [Version](#version). |
502 | 505 |
503 ### getVM | 506 ### getVM |
504 | 507 |
505 ``` | 508 ``` |
506 VM getVM() | 509 VM getVM() |
507 ``` | 510 ``` |
508 | 511 |
509 The _getVM_ RPC returns global information about a Dart virtual machine. | 512 The _getVM_ RPC returns global information about a Dart virtual machine. |
510 | 513 |
511 See [VM](#vm). | 514 See [VM](#vm). |
512 | 515 |
513 ### pause | 516 ### pause |
514 | 517 |
515 ``` | 518 ``` |
516 Success pause(string isolateId) | 519 Success pause(string isolateId) |
517 ``` | 520 ``` |
518 | 521 |
519 The _pause_ RPC is used to interrupt a running isolate. The RPC enqueues the in
terrupt request and potentially returns before the isolate is paused. | 522 The _pause_ RPC is used to interrupt a running isolate. The RPC enqueues the int
errupt request and potentially returns before the isolate is paused. |
520 | 523 |
521 When the isolate is paused an event will be sent on the _Debug_ stream. | 524 When the isolate is paused an event will be sent on the _Debug_ stream. |
522 | 525 |
523 See [Success](#success). | 526 See [Success](#success). |
524 | 527 |
525 ### removeBreakpoint | 528 ### removeBreakpoint |
526 | 529 |
527 ``` | 530 ``` |
528 Success removeBreakpoint(string isolateId, | 531 Success removeBreakpoint(string isolateId, |
529 string breakpointId) | 532 string breakpointId) |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 subscribed) error code is returned. | 597 subscribed) error code is returned. |
595 | 598 |
596 See [Success](#success). | 599 See [Success](#success). |
597 | 600 |
598 ### streamListen | 601 ### streamListen |
599 | 602 |
600 ``` | 603 ``` |
601 Success streamListen(string streamId) | 604 Success streamListen(string streamId) |
602 ``` | 605 ``` |
603 | 606 |
604 The _streamListen_ RPC subscribes to a stream in the VM. Once | 607 The _streamListen_ RPC subscribes to a stream in the VM. Once |
605 subscribed, the client will begin receiving events from the stream. | 608 subscribed, the client will begin receiving events from the stream. |
606 | 609 |
607 If the client is not subscribed to the stream, the _103_ (Stream already | 610 If the client is not subscribed to the stream, the _103_ (Stream already |
608 subscribed) error code is returned. | 611 subscribed) error code is returned. |
609 | 612 |
610 The _streamId_ parameter may have the following published values: | 613 The _streamId_ parameter may have the following published values: |
611 | 614 |
612 streamId | event types provided | 615 streamId | event types provided |
613 -------- | ----------- | 616 -------- | ----------- |
614 Isolate | IsolateStart, IsolateExit, IsolateUpdate | 617 Isolate | IsolateStart, IsolateExit, IsolateUpdate |
(...skipping 25 matching lines...) Expand all Loading... |
640 ``` | 643 ``` |
641 class T { | 644 class T { |
642 string name; | 645 string name; |
643 int count; | 646 int count; |
644 ... | 647 ... |
645 } | 648 } |
646 ``` | 649 ``` |
647 | 650 |
648 This describes a JSON object type _T_ with some set of expected properties. | 651 This describes a JSON object type _T_ with some set of expected properties. |
649 | 652 |
650 Types are organized into an inheritance hierarchy. If type _T_ | 653 Types are organized into an inheritance hierarchy. If type _T_ |
651 extends type _S_... | 654 extends type _S_... |
652 | 655 |
653 ``` | 656 ``` |
654 class S { | 657 class S { |
655 string a; | 658 string a; |
656 } | 659 } |
657 | 660 |
658 class T extends S { | 661 class T extends S { |
659 string b; | 662 string b; |
660 } | 663 } |
661 ``` | 664 ``` |
662 | 665 |
663 ...then that means that all properties of _S_ are also present in type | 666 ...then that means that all properties of _S_ are also present in type |
664 _T_. In the example above, type _T_ would have the expected | 667 _T_. In the example above, type _T_ would have the expected |
665 properties _a_ and _b_. | 668 properties _a_ and _b_. |
666 | 669 |
667 If a property has an _Array_ type, it is written with brackets: | 670 If a property has an _Array_ type, it is written with brackets: |
668 | 671 |
669 ``` | 672 ``` |
670 PropertyType[] arrayProperty; | 673 PropertyType[] arrayProperty; |
671 ``` | 674 ``` |
672 | 675 |
673 If a property is optional, it is suffixed with the text _[optional]_: | 676 If a property is optional, it is suffixed with the text _[optional]_: |
674 | 677 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
786 | 789 |
787 // The location of this class in the source code. | 790 // The location of this class in the source code. |
788 SourceLocation location [optional]; | 791 SourceLocation location [optional]; |
789 | 792 |
790 // The superclass of this class, if any. | 793 // The superclass of this class, if any. |
791 @Class super [optional]; | 794 @Class super [optional]; |
792 | 795 |
793 // A list of interface types for this class. | 796 // A list of interface types for this class. |
794 @Type[] interfaces; | 797 @Type[] interfaces; |
795 | 798 |
796 // A list of fields in this class. Does not include fields from | 799 // A list of fields in this class. Does not include fields from |
797 // superclasses. | 800 // superclasses. |
798 @Field[] fields; | 801 @Field[] fields; |
799 | 802 |
800 // A list of functions in this class. Does not include functions | 803 // A list of functions in this class. Does not include functions |
801 // from superclasses. | 804 // from superclasses. |
802 @Function[] functions; | 805 @Function[] functions; |
803 | 806 |
804 // A list of subclasses of this class. | 807 // A list of subclasses of this class. |
805 @Class[] subclasses; | 808 @Class[] subclasses; |
806 } | 809 } |
807 ``` | 810 ``` |
808 | 811 |
809 A _Class_ provides information about a Dart language class. | 812 A _Class_ provides information about a Dart language class. |
810 | 813 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
862 int length; | 865 int length; |
863 } | 866 } |
864 ``` | 867 ``` |
865 | 868 |
866 ``` | 869 ``` |
867 class Context { | 870 class Context { |
868 // The number of variables in this context. | 871 // The number of variables in this context. |
869 int length; | 872 int length; |
870 | 873 |
871 // The variables in this context object. | 874 // The variables in this context object. |
872 ListElement[] variables; | 875 ContextElement[] variables; |
873 } | 876 } |
874 ``` | 877 ``` |
875 | 878 |
| 879 ### ContextElement |
| 880 |
| 881 ``` |
| 882 class ContextElement { |
| 883 @Instance|Sentinel value; |
| 884 } |
| 885 ``` |
| 886 |
876 ### Error | 887 ### Error |
877 | 888 |
878 ``` | 889 ``` |
879 class @Error extends @Object { | 890 class @Error extends @Object { |
| 891 // What kind of error is this? |
| 892 ErrorKind kind; |
| 893 |
880 // A description of the error. | 894 // A description of the error. |
881 string message; | 895 string message; |
882 } | 896 } |
883 ``` | 897 ``` |
884 | 898 |
885 _@Error_ is a reference to an _Error_. | 899 _@Error_ is a reference to an _Error_. |
886 | 900 |
887 ``` | 901 ``` |
888 class Error extends Object { | 902 class Error extends Object { |
| 903 // What kind of error is this? |
| 904 ErrorKind kind; |
| 905 |
889 // A description of the error. | 906 // A description of the error. |
890 string message; | 907 string message; |
891 | 908 |
892 // If this error is due to an unhandled exception, this | 909 // If this error is due to an unhandled exception, this |
893 // is the exception thrown. | 910 // is the exception thrown. |
894 @Instance exception [optional]; | 911 @Instance exception [optional]; |
895 | 912 |
896 // If this error is due to an unhandled exception, this | 913 // If this error is due to an unhandled exception, this |
897 // is the stacktrace object. | 914 // is the stacktrace object. |
898 @Instance stacktrace [optional]; | 915 @Instance stacktrace [optional]; |
899 } | 916 } |
900 ``` | 917 ``` |
901 | 918 |
902 An _Error_ represents a Dart language level error. This is distinct from an | 919 An _Error_ represents a Dart language level error. This is distinct from an |
903 [rpc error](#rpc-error). | 920 [rpc error](#rpc-error). |
904 | 921 |
905 An error may occur when: | 922 ### ErrorKind |
906 | 923 |
907 - The program has encountered an unhandled exception | 924 ``` |
908 - The program has encountered a syntax error (or another Dart language error) | 925 enum ErrorKind { |
909 - The program has encountered an unhandled erroneous condition in native code | 926 // The isolate has encountered an unhandled Dart exception. |
910 - The program has been terminated | 927 UnhandledException, |
| 928 |
| 929 // The isolate has encountered a Dart language error in the program. |
| 930 LanguageError, |
| 931 |
| 932 // The isolate has encounted an internal error. These errors should be |
| 933 // reported as bugs. |
| 934 InternalError, |
| 935 |
| 936 // The isolate has been terminated by an external source. |
| 937 TerminationError |
| 938 } |
| 939 ``` |
911 | 940 |
912 ### Event | 941 ### Event |
913 | 942 |
914 ``` | 943 ``` |
915 class Event extends Response { | 944 class Event extends Response { |
916 // What kind of event is this? | 945 // What kind of event is this? |
917 EventKind kind; | 946 EventKind kind; |
918 | 947 |
919 // The isolate with which this event is associated. | 948 // The isolate with which this event is associated. |
920 @Isolate isolate; | 949 @Isolate isolate; |
921 | 950 |
922 // The breakpoint associated with this event, if applicable. | 951 // The breakpoint which was added, removed, or resolved. |
923 // | 952 // |
924 // This is provided for the event kinds: | 953 // This is provided for the event kinds: |
925 // PauseBreakpoint | 954 // PauseBreakpoint |
926 // BreakpointAdded | 955 // BreakpointAdded |
927 // BreakpointRemoved | 956 // BreakpointRemoved |
928 // BreakpointResolved | 957 // BreakpointResolved |
929 Breakpoint breakpoint [optional]; | 958 Breakpoint breakpoint [optional]; |
930 | 959 |
| 960 // The list of breakpoints at which we are currently paused |
| 961 // for a PauseBreakpoint event. |
| 962 // |
| 963 // This list may be empty. For example, while single-stepping, the |
| 964 // VM sends a PauseBreakpoint event with no breakpoints. |
| 965 // |
| 966 // If there is more than one breakpoint set at the program position, |
| 967 // then all of them will be provided. |
| 968 // |
| 969 // This is provided for the event kinds: |
| 970 // PauseBreakpoint |
| 971 Breakpoint[] pauseBreakpoints [optional]; |
| 972 |
931 // The top stack frame associated with this event, if applicable. | 973 // The top stack frame associated with this event, if applicable. |
932 // | 974 // |
933 // This is provided for the event kinds: | 975 // This is provided for the event kinds: |
934 // PauseBreakpoint | 976 // PauseBreakpoint |
935 // PauseInterrupted | 977 // PauseInterrupted |
936 // PauseException | 978 // PauseException |
937 // | 979 // |
938 // For the Resume event, the top frame is provided at | 980 // For the Resume event, the top frame is provided at |
939 // all times except for the initial resume event that is delivered | 981 // all times except for the initial resume event that is delivered |
940 // when an isolate begins execution. | 982 // when an isolate begins execution. |
941 Frame topFrame [optional]; | 983 Frame topFrame [optional]; |
942 | 984 |
943 // The exception associated with this event, if this is a | 985 // The exception associated with this event, if this is a |
944 // PauseException event. | 986 // PauseException event. |
945 @Instance exception [optional]; | 987 @Instance exception [optional]; |
946 } | 988 } |
947 ``` | 989 ``` |
948 | 990 |
949 An _Event_ is an asynchronous notification from the VM. It is delivered | 991 An _Event_ is an asynchronous notification from the VM. It is delivered |
950 only when the client has subscribed to an event stream using the | 992 only when the client has subscribed to an event stream using the |
951 [streamListen](#streamListen) RPC. | 993 [streamListen](#streamListen) RPC. |
952 | 994 |
953 For more information, see [events](#events). | 995 For more information, see [events](#events). |
954 | 996 |
955 ### EventKind | 997 ### EventKind |
956 | 998 |
957 ``` | 999 ``` |
958 enum EventKind { | 1000 enum EventKind { |
959 // Notification that a new isolate has started. | 1001 // Notification that a new isolate has started. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 | 1035 |
994 // A breakpoint has been removed. | 1036 // A breakpoint has been removed. |
995 BreakpointRemoved, | 1037 BreakpointRemoved, |
996 | 1038 |
997 // A garbage collection event. | 1039 // A garbage collection event. |
998 GC | 1040 GC |
999 } | 1041 } |
1000 ``` | 1042 ``` |
1001 | 1043 |
1002 Adding new values to _EventKind_ is considered a backwards compatible | 1044 Adding new values to _EventKind_ is considered a backwards compatible |
1003 change. Clients should ignore unrecognized events. | 1045 change. Clients should ignore unrecognized events. |
1004 | 1046 |
1005 ### Field | 1047 ### Field |
1006 | 1048 |
1007 ``` | 1049 ``` |
1008 class @Field extends @Object { | 1050 class @Field extends @Object { |
1009 // The name of this field. | 1051 // The name of this field. |
1010 string name; | 1052 string name; |
1011 | 1053 |
1012 // The owner of this field, which can be either a Library or a | 1054 // The owner of this field, which can be either a Library or a |
1013 // Class. | 1055 // Class. |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 | 1196 |
1155 A _Function_ represents a Dart language function. | 1197 A _Function_ represents a Dart language function. |
1156 | 1198 |
1157 ### Instance | 1199 ### Instance |
1158 | 1200 |
1159 ``` | 1201 ``` |
1160 class @Instance extends @Object { | 1202 class @Instance extends @Object { |
1161 // What kind of instance is this? | 1203 // What kind of instance is this? |
1162 InstanceKind kind; | 1204 InstanceKind kind; |
1163 | 1205 |
1164 // Instance references include their class. | 1206 // Instance references always include their class. |
1165 @Class class; | 1207 @Class class; |
1166 | 1208 |
1167 // The value of this instance as a string. | 1209 // The value of this instance as a string. |
1168 // | 1210 // |
1169 // Provided for the instance kinds: | 1211 // Provided for the instance kinds: |
1170 // Null (null) | 1212 // Null (null) |
1171 // Bool (true or false) | 1213 // Bool (true or false) |
1172 // Double (suitable for passing to Double.parse()) | 1214 // Double (suitable for passing to Double.parse()) |
1173 // Int (suitable for passing to int.parse()) | 1215 // Int (suitable for passing to int.parse()) |
1174 // String (value may be truncated) | 1216 // String (value may be truncated) |
1175 string valueAsString [optional]; | 1217 string valueAsString [optional]; |
1176 | 1218 |
1177 // The valueAsString for String references may be truncated. If so, | 1219 // The valueAsString for String references may be truncated. If so, |
1178 // this property is added with the value 'true'. | 1220 // this property is added with the value 'true'. |
1179 bool valueAsStringIsTruncated [optional]; | 1221 bool valueAsStringIsTruncated [optional]; |
1180 | 1222 |
1181 // The length of a List instance. | 1223 // The length of a List instance. |
1182 // | 1224 // |
1183 // Provided for instance kinds: | 1225 // Provided for instance kinds: |
1184 // List | 1226 // List |
1185 int length [optional]; | 1227 int length [optional]; |
1186 | 1228 |
1187 // The name of a Type instance. | 1229 // The name of a Type instance. |
(...skipping 16 matching lines...) Expand all Loading... |
1204 } | 1246 } |
1205 ``` | 1247 ``` |
1206 | 1248 |
1207 _@Instance_ is a reference to an _Instance_. | 1249 _@Instance_ is a reference to an _Instance_. |
1208 | 1250 |
1209 ``` | 1251 ``` |
1210 class Instance extends Object { | 1252 class Instance extends Object { |
1211 // What kind of instance is this? | 1253 // What kind of instance is this? |
1212 InstanceKind kind; | 1254 InstanceKind kind; |
1213 | 1255 |
1214 // Instance references include their class. | 1256 // Instance references always include their class. |
1215 @Class class; | 1257 @Class class; |
1216 | 1258 |
1217 // The value of this instance as a string. | 1259 // The value of this instance as a string. |
1218 // | 1260 // |
1219 // Provided for the instance kinds: | 1261 // Provided for the instance kinds: |
1220 // Bool (true or false) | 1262 // Bool (true or false) |
1221 // Double (suitable for passing to Double.parse()) | 1263 // Double (suitable for passing to Double.parse()) |
1222 // Int (suitable for passing to int.parse()) | 1264 // Int (suitable for passing to int.parse()) |
1223 // String (value may be truncated) | 1265 // String (value may be truncated) |
1224 string valueAsString [optional]; | 1266 string valueAsString [optional]; |
1225 | 1267 |
1226 // The valueAsString for String references may be truncated. If so, | 1268 // The valueAsString for String references may be truncated. If so, |
1227 // this property is added with the value 'true'. | 1269 // this property is added with the value 'true'. |
1228 bool valueAsStringIsTruncated [optional]; | 1270 bool valueAsStringIsTruncated [optional]; |
1229 | 1271 |
1230 // The length of a List instance. | 1272 // The length of a List instance. |
1231 // | 1273 // |
1232 // Provided for instance kinds: | 1274 // Provided for instance kinds: |
1233 // List | 1275 // List |
1234 int length [optional]; | 1276 int length [optional]; |
1235 | 1277 |
1236 // The name of a Type instance. | 1278 // The name of a Type instance. |
(...skipping 14 matching lines...) Expand all Loading... |
1251 // TypeParameter | 1293 // TypeParameter |
1252 @Class parameterizedClass [optional]; | 1294 @Class parameterizedClass [optional]; |
1253 | 1295 |
1254 // The fields of this Instance. | 1296 // The fields of this Instance. |
1255 BoundField fields [optional]; | 1297 BoundField fields [optional]; |
1256 | 1298 |
1257 // The elements of a List instance. | 1299 // The elements of a List instance. |
1258 // | 1300 // |
1259 // Provided for instance kinds: | 1301 // Provided for instance kinds: |
1260 // List | 1302 // List |
1261 ListElement[] elements [optional]; | 1303 @Instance|Sentinel[] elements [optional]; |
1262 | 1304 |
1263 // The elements of a List instance. | 1305 // The elements of a List instance. |
1264 // | 1306 // |
1265 // Provided for instance kinds: | 1307 // Provided for instance kinds: |
1266 // Map | 1308 // Map |
1267 MapAssociation[] associations [optional]; | 1309 MapAssociation[] associations [optional]; |
1268 | 1310 |
1269 // The function associated with a Closure instance. | 1311 // The function associated with a Closure instance. |
1270 // | 1312 // |
1271 // Provided for instance kinds: | 1313 // Provided for instance kinds: |
(...skipping 30 matching lines...) Expand all Loading... |
1302 // Type | 1344 // Type |
1303 @TypeArguments typeArguments [optional]; | 1345 @TypeArguments typeArguments [optional]; |
1304 | 1346 |
1305 // The index of a TypeParameter instance. | 1347 // The index of a TypeParameter instance. |
1306 // | 1348 // |
1307 // Provided for instance kinds: | 1349 // Provided for instance kinds: |
1308 // TypeParameter | 1350 // TypeParameter |
1309 int parameterIndex [optional]; | 1351 int parameterIndex [optional]; |
1310 | 1352 |
1311 // The type bounded by a BoundedType instance | 1353 // The type bounded by a BoundedType instance |
1312 // or | 1354 // - or - |
1313 // The referent of a TypeRef instance. | 1355 // the referent of a TypeRef instance. |
1314 // | 1356 // |
1315 // The value will always be one of: | 1357 // The value will always be one of: |
1316 // Type, TypeRef, TypeParameter, BoundedType. | 1358 // Type, TypeRef, TypeParameter, BoundedType. |
1317 // | 1359 // |
1318 // Provided for instance kinds: | 1360 // Provided for instance kinds: |
1319 // BoundedType | 1361 // BoundedType |
1320 // TypeRef | 1362 // TypeRef |
1321 @Instance type [optional]; | 1363 @Instance targetType [optional]; |
1322 | 1364 |
1323 // The bound of a TypeParameter or BoundedType. | 1365 // The bound of a TypeParameter or BoundedType. |
1324 // | 1366 // |
1325 // The value will always be one of: | 1367 // The value will always be one of: |
1326 // Type, TypeRef, TypeParameter, BoundedType. | 1368 // Type, TypeRef, TypeParameter, BoundedType. |
1327 // | 1369 // |
1328 // Provided for instance kinds: | 1370 // Provided for instance kinds: |
1329 // BoundedType | 1371 // BoundedType |
1330 // TypeParameter | 1372 // TypeParameter |
1331 @Instance bound [optional]; | 1373 @Instance bound [optional]; |
(...skipping 17 matching lines...) Expand all Loading... |
1349 | 1391 |
1350 // An instance of the Dart class double. | 1392 // An instance of the Dart class double. |
1351 Double, | 1393 Double, |
1352 | 1394 |
1353 // An instance of the Dart class int. | 1395 // An instance of the Dart class int. |
1354 Int, | 1396 Int, |
1355 | 1397 |
1356 // An instance of the Dart class String. | 1398 // An instance of the Dart class String. |
1357 String, | 1399 String, |
1358 | 1400 |
1359 // An instance of the built-in VM List implementation. User-defined | 1401 // An instance of the built-in VM List implementation. User-defined |
1360 // Lists will be PlainInstance. | 1402 // Lists will be PlainInstance. |
1361 List, | 1403 List, |
1362 | 1404 |
1363 // An instance of the built-in VM Map implementation. User-defined | 1405 // An instance of the built-in VM Map implementation. User-defined |
1364 // Maps will be PlainInstance. | 1406 // Maps will be PlainInstance. |
1365 Map, | 1407 Map, |
1366 | 1408 |
1367 // An instance of the built-in VM Closure implementation. User-defined | 1409 // An instance of the built-in VM Closure implementation. User-defined |
1368 // Closures will be PlainInstance. | 1410 // Closures will be PlainInstance. |
1369 Closure, | 1411 Closure, |
1370 | 1412 |
1371 // An instance of the Dart class MirrorReference. | 1413 // An instance of the Dart class MirrorReference. |
1372 MirrorReference, | 1414 MirrorReference, |
1373 | 1415 |
1374 // An instance of the Dart class WeakProperty. | 1416 // An instance of the Dart class WeakProperty. |
1375 WeakProperty, | 1417 WeakProperty, |
1376 | 1418 |
1377 // An instance of the Dart class Type | 1419 // An instance of the Dart class Type |
1378 Type, | 1420 Type, |
1379 | 1421 |
1380 // An instance of the Dart class TypeParamer | 1422 // An instance of the Dart class TypeParamer |
1381 TypeParameter, | 1423 TypeParameter, |
1382 | 1424 |
1383 // An instance of the Dart class TypeRef | 1425 // An instance of the Dart class TypeRef |
1384 TypeRef, | 1426 TypeRef, |
1385 | 1427 |
1386 // An instance of the Dart class BoundedType | 1428 // An instance of the Dart class BoundedType |
1387 BoundedType, | 1429 BoundedType, |
1388 } | 1430 } |
1389 ``` | 1431 ``` |
1390 | 1432 |
1391 Adding new values to _InstanceKind_ is considered a backwards | 1433 Adding new values to _InstanceKind_ is considered a backwards |
1392 compatible change. Clients should treat unrecognized instance kinds | 1434 compatible change. Clients should treat unrecognized instance kinds |
1393 as _PlainInstance_. | 1435 as _PlainInstance_. |
1394 | 1436 |
1395 ### Isolate | 1437 ### Isolate |
1396 | 1438 |
1397 ``` | 1439 ``` |
1398 class @Isolate extends Response { | 1440 class @Isolate extends Response { |
1399 // The id which is passed to the getIsolate RPC to load this isolate. | 1441 // The id which is passed to the getIsolate RPC to load this isolate. |
1400 string id; | 1442 string id; |
1401 | 1443 |
1402 // A numeric id for this isolate, represented as a string. Unique. | 1444 // A numeric id for this isolate, represented as a string. Unique. |
1403 string number; | 1445 string number; |
1404 | 1446 |
1405 // A name identifying this isolate. Not guaranteed to be unique. | 1447 // A name identifying this isolate. Not guaranteed to be unique. |
1406 string name; | 1448 string name; |
1407 } | 1449 } |
1408 ``` | 1450 ``` |
1409 | 1451 |
1410 _@Isolate_ is a reference to an _Isolate_ object. | 1452 _@Isolate_ is a reference to an _Isolate_ object. |
1411 | 1453 |
1412 ``` | 1454 ``` |
1413 class Isolate extends Response { | 1455 class Isolate extends Response { |
1414 // The id which is passed to the getIsolate RPC to reload this | 1456 // The id which is passed to the getIsolate RPC to reload this |
1415 // isolate. | 1457 // isolate. |
1416 string id; | 1458 string id; |
1417 | 1459 |
1418 // A numeric id for this isolate, represented as a string. Unique. | 1460 // A numeric id for this isolate, represented as a string. Unique. |
1419 string number; | 1461 string number; |
1420 | 1462 |
1421 // A name identifying this isolate. Not guaranteed to be unique. | 1463 // A name identifying this isolate. Not guaranteed to be unique. |
1422 string name; | 1464 string name; |
1423 | 1465 |
1424 // The time that the VM started in milliseconds since the epoch. | 1466 // The time that the VM started in milliseconds since the epoch. |
1425 // | 1467 // |
1426 // Suitable to pass to DateTime.fromMillisecondsSinceEpoch. | 1468 // Suitable to pass to DateTime.fromMillisecondsSinceEpoch. |
1427 int startTime; | 1469 int startTime; |
1428 | 1470 |
1429 // The entry function for this isolate. | 1471 // The entry function for this isolate. |
1430 @Function entry [optional]; | 1472 @Function entry [optional]; |
1431 | 1473 |
1432 // The number of live ports for this isolate. | 1474 // The number of live ports for this isolate. |
1433 int livePorts; | 1475 int livePorts; |
1434 | 1476 |
1435 // Will this isolate pause when exiting? | 1477 // Will this isolate pause when exiting? |
1436 bool pauseOnExit; | 1478 bool pauseOnExit; |
1437 | 1479 |
1438 // The last pause event delivered to the isolate. If the isolate is | 1480 // The last pause event delivered to the isolate. If the isolate is |
1439 // running, this will be a resume event. | 1481 // running, this will be a resume event. |
1440 Event pauseEvent; | 1482 Event pauseEvent; |
1441 | 1483 |
1442 // The error that is causing this isolate to exit, if applicable. | 1484 // The error that is causing this isolate to exit, if applicable. |
1443 Error error [optional]; | 1485 Error error [optional]; |
1444 | 1486 |
1445 // The root library for this isolate. | 1487 // The root library for this isolate. |
1446 @Library rootLib; | 1488 @Library rootLib; |
1447 | 1489 |
1448 // A list of all libraries for this isolate. | 1490 // A list of all libraries for this isolate. |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1514 // The prefix of an 'as' import, or null. | 1556 // The prefix of an 'as' import, or null. |
1515 String prefix; | 1557 String prefix; |
1516 | 1558 |
1517 // The library being imported or exported. | 1559 // The library being imported or exported. |
1518 @Library target; | 1560 @Library target; |
1519 } | 1561 } |
1520 ``` | 1562 ``` |
1521 | 1563 |
1522 A _LibraryDependency_ provides information about an import or export. | 1564 A _LibraryDependency_ provides information about an import or export. |
1523 | 1565 |
1524 ### ListElement | |
1525 | |
1526 ``` | |
1527 class ListElement { | |
1528 int index; | |
1529 @Instance|Sentinel value; | |
1530 } | |
1531 ``` | |
1532 | |
1533 ### MapAssociation | 1566 ### MapAssociation |
1534 | 1567 |
1535 ``` | 1568 ``` |
1536 class MapAssociation { | 1569 class MapAssociation { |
1537 @Instance|Sentinel key; | 1570 @Instance|Sentinel key; |
1538 @Instance|Sentinel value; | 1571 @Instance|Sentinel value; |
1539 } | 1572 } |
1540 ``` | 1573 ``` |
1541 | 1574 |
1542 ### Message | 1575 ### Message |
(...skipping 26 matching lines...) Expand all Loading... |
1569 string valueAsString; | 1602 string valueAsString; |
1570 } | 1603 } |
1571 ``` | 1604 ``` |
1572 | 1605 |
1573 A _Null_ object represents the Dart language value null. | 1606 A _Null_ object represents the Dart language value null. |
1574 | 1607 |
1575 ### Object | 1608 ### Object |
1576 | 1609 |
1577 ``` | 1610 ``` |
1578 class @Object extends Response { | 1611 class @Object extends Response { |
1579 // A unique identifier for an Object. Passed to the | 1612 // A unique identifier for an Object. Passed to the |
1580 // getObject RPC to load this Object. | 1613 // getObject RPC to load this Object. |
1581 string id | 1614 string id |
1582 } | 1615 } |
1583 ``` | 1616 ``` |
1584 | 1617 |
1585 _@Object_ is a reference to a _Object_. | 1618 _@Object_ is a reference to a _Object_. |
1586 | 1619 |
1587 ``` | 1620 ``` |
1588 class Object extends Response { | 1621 class Object extends Response { |
1589 // A unique identifier for an Object. Passed to the | 1622 // A unique identifier for an Object. Passed to the |
1590 // getObject RPC to reload this Object. | 1623 // getObject RPC to reload this Object. |
1591 // | 1624 // |
1592 // Some objects may get a new id when they are reloaded. | 1625 // Some objects may get a new id when they are reloaded. |
1593 string id; | 1626 string id; |
1594 | 1627 |
1595 // Every object has a corresponding Class in the VM. | 1628 // If an object is allocated in the Dart heap, it will have |
1596 @Class class; | 1629 // a corresponding class object. |
| 1630 // |
| 1631 // The class of a non-instance is not a Dart class, but is instead |
| 1632 // an internal vm object. |
| 1633 // |
| 1634 // Moving an Object into or out of the heap is considered a |
| 1635 // backwards compatible change for types other than Instance. |
| 1636 @Class class [optional]; |
1597 | 1637 |
1598 // The size of this object in the heap. | 1638 // The size of this object in the heap. |
1599 // | 1639 // |
1600 // Note that the size can be zero for some objects. | 1640 // If an object is not heap-allocated, then this field is omitted. |
1601 int size; | 1641 // |
| 1642 // Note that the size can be zero for some objects. In the current |
| 1643 // VM implementation, this occurs for small integers, which are |
| 1644 // stored entirely within their object pointers. |
| 1645 int size [optional]; |
1602 } | 1646 } |
1603 ``` | 1647 ``` |
1604 | 1648 |
1605 An _Object_ is a persistent object that is owned by some isolate. | 1649 An _Object_ is a persistent object that is owned by some isolate. |
1606 | 1650 |
1607 ### Sentinel | 1651 ### Sentinel |
1608 | 1652 |
1609 ``` | 1653 ``` |
1610 class Sentinel extends Response { | 1654 class Sentinel extends Response { |
1611 // What kind of sentinel is this? | 1655 // What kind of sentinel is this? |
1612 SentinelKind kind; | 1656 SentinelKind kind; |
1613 | 1657 |
1614 // A reasonable string representation of this sentinel. | 1658 // A reasonable string representation of this sentinel. |
1615 string valueAsString; | 1659 string valueAsString; |
1616 } | 1660 } |
1617 ``` | 1661 ``` |
1618 | 1662 |
1619 A _Sentinel_ is used to indicate that the normal response is not available. | 1663 A _Sentinel_ is used to indicate that the normal response is not available. |
1620 | 1664 |
1621 We use a _Sentinel_ instead of an [error](#errors) for these cases because | 1665 We use a _Sentinel_ instead of an [error](#errors) for these cases because |
1622 they do not represent a problematic condition. They are normal. | 1666 they do not represent a problematic condition. They are normal. |
1623 | 1667 |
1624 ### SentinelKind | 1668 ### SentinelKind |
1625 | 1669 |
1626 ``` | 1670 ``` |
1627 enum SentinelKind { | 1671 enum SentinelKind { |
1628 // Indicates that the object referred to has been collected by the GC. | 1672 // Indicates that the object referred to has been collected by the GC. |
1629 Collected, | 1673 Collected, |
1630 | 1674 |
1631 // Indicates that an object id has expired. | 1675 // Indicates that an object id has expired. |
1632 Expired, | 1676 Expired, |
1633 | 1677 |
1634 // Indicates that a variable or field has not been initialized. | 1678 // Indicates that a variable or field has not been initialized. |
1635 NotInitialized, | 1679 NotInitialized, |
1636 | 1680 |
1637 // Indicates that a variable or field is in the process of being initialized. | 1681 // Indicates that a variable or field is in the process of being initialized. |
1638 BeingInitialized, | 1682 BeingInitialized, |
1639 | 1683 |
1640 // Indicates that a variable has been eliminated by the optimizing compiler. | 1684 // Indicates that a variable has been eliminated by the optimizing compiler. |
1641 OptimizedOut, | 1685 OptimizedOut, |
1642 | 1686 |
1643 // Reserved for future use. | 1687 // Reserved for future use. |
1644 Free, | 1688 Free, |
1645 } | 1689 } |
1646 ``` | 1690 ``` |
1647 | 1691 |
1648 A _SentinelKind_ is used to distinguish different kinds of _Sentinel_ objects. | 1692 A _SentinelKind_ is used to distinguish different kinds of _Sentinel_ objects. |
1649 | 1693 |
1650 Adding new values to _SentinelKind_ is considered a backwards | 1694 Adding new values to _SentinelKind_ is considered a backwards |
1651 compatible change. Clients must handle this gracefully. | 1695 compatible change. Clients must handle this gracefully. |
1652 | 1696 |
1653 ### Script | 1697 ### Script |
1654 | 1698 |
1655 ``` | 1699 ``` |
1656 class @Script extends @Object { | 1700 class @Script extends @Object { |
1657 // The uri from which this script was loaded. | 1701 // The uri from which this script was loaded. |
1658 string uri; | 1702 string uri; |
1659 } | 1703 } |
1660 ``` | 1704 ``` |
1661 | 1705 |
1662 _@Script_ is a reference to a _Script_. | 1706 _@Script_ is a reference to a _Script_. |
1663 | 1707 |
1664 ``` | 1708 ``` |
1665 class Script extends Object { | 1709 class Script extends Object { |
1666 // The uri from which this script was loaded. | 1710 // The uri from which this script was loaded. |
1667 string uri; | 1711 string uri; |
1668 | 1712 |
1669 // The library which owns this script. | 1713 // The library which owns this script. |
1670 @Library library; | 1714 @Library library; |
1671 | 1715 |
1672 // The source code for this script. For certain built-in scripts, | 1716 // The source code for this script. For certain built-in scripts, |
1673 // this may be reconstructed without source comments. | 1717 // this may be reconstructed without source comments. |
1674 string source; | 1718 string source; |
1675 | 1719 |
1676 // A table encoding a mapping from token position to line and column. | 1720 // A table encoding a mapping from token position to line and column. |
1677 int[][] tokenPosTable; | 1721 int[][] tokenPosTable; |
1678 } | 1722 } |
1679 ``` | 1723 ``` |
1680 | 1724 |
1681 A _Script_ provides information about a Dart language script. | 1725 A _Script_ provides information about a Dart language script. |
1682 | 1726 |
1683 The _tokenPosTable_ is an array of int arrays. Each subarray | 1727 The _tokenPosTable_ is an array of int arrays. Each subarray |
1684 consists of a line number followed by _(tokenPos, columnNumber)_ pairs: | 1728 consists of a line number followed by _(tokenPos, columnNumber)_ pairs: |
1685 | 1729 |
1686 > [lineNumber, (tokenPos, columnNumber)*] | 1730 > [lineNumber, (tokenPos, columnNumber)*] |
1687 | 1731 |
1688 For example, a _tokenPosTable_ with the value... | 1732 For example, a _tokenPosTable_ with the value... |
1689 | 1733 |
1690 > [[1, 100, 5, 101, 8],[2, 102, 7]] | 1734 > [[1, 100, 5, 101, 8],[2, 102, 7]] |
1691 | 1735 |
1692 ...encodes the mapping: | 1736 ...encodes the mapping: |
1693 | 1737 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1767 ``` | 1811 ``` |
1768 | 1812 |
1769 A _TypeArguments_ object represents the type argument vector for some | 1813 A _TypeArguments_ object represents the type argument vector for some |
1770 instantiated generic type. | 1814 instantiated generic type. |
1771 | 1815 |
1772 ### Response | 1816 ### Response |
1773 | 1817 |
1774 ``` | 1818 ``` |
1775 class Response { | 1819 class Response { |
1776 // Every response returned by the VM Service has the | 1820 // Every response returned by the VM Service has the |
1777 // type property. This allows the client distinguish | 1821 // type property. This allows the client distinguish |
1778 // between different kinds of responses. | 1822 // between different kinds of responses. |
1779 string type; | 1823 string type; |
1780 } | 1824 } |
1781 ``` | 1825 ``` |
1782 | 1826 |
1783 Every non-error response returned by the Service Protocol extends _Response_. | 1827 Every non-error response returned by the Service Protocol extends _Response_. |
1784 By using the _type_ property, the client can determine which [type](#types) | 1828 By using the _type_ property, the client can determine which [type](#types) |
1785 of response has been provided. | 1829 of response has been provided. |
1786 | 1830 |
1787 ### Version | 1831 ### Version |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1826 | 1870 |
1827 // A list of isolates running in the VM. | 1871 // A list of isolates running in the VM. |
1828 @Isolate[] isolates | 1872 @Isolate[] isolates |
1829 } | 1873 } |
1830 ``` | 1874 ``` |
1831 | 1875 |
1832 ## Revision History | 1876 ## Revision History |
1833 | 1877 |
1834 version | comments | 1878 version | comments |
1835 ------- | -------- | 1879 ------- | -------- |
1836 0.0 | draft | 1880 1.0 draft 1 | initial revision |
OLD | NEW |