| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.shell; |
| |
| /// Result of a ExecutePendingInstructions. |
| enum ExecuteResult : uint32 { |
| /// Only used for fields. This will never be used by ExecutePedningInstructions. |
| UNDEF = 0; |
| /// Execution finished without error. |
| OK = 1; |
| /// Execution finished with errors during the execution. |
| EXECUTION_ERROR = 2; |
| /// Execution finished with errors during the semantic/analysis passes. |
| ANALYSIS_ERROR = 3; |
| }; |
| |
| /// Defines a unique identifier for an AST node. |
| struct NodeId { |
| /// The id of the file. |
| uint64 file_id; |
| /// The id of the node for that file. |
| uint64 node_id; |
| }; |
| |
| /// Defines a Location for an error. |
| table Location { |
| /// Defined for error relative to an AST node. For native methods, this is not defined. |
| 1: NodeId node_id; |
| }; |
| |
| /// Defines the protocol to communicate with a shell interpreter. |
| [Discoverable] |
| protocol Shell { |
| /// Creates an execution context. |
| /// |
| /// - `context_id` the id for the context. This id is provided by the client which must ensure |
| /// that the id is unique. A context_id can be reused as soon as OnExecutionDone is |
| /// received. |
| CreateExecutionContext(uint64 context_id); |
| |
| /// Executes all the pending instructions. This can generate one or several errors using |
| /// OnError. |
| /// When the execution is finished (all the pending instructions have been handled), |
| /// OnExecutionDone is called. |
| /// This will execute all the instructions added to the execution context is received. |
| /// It is illegal to add more instructions once this function has been called. |
| /// If you need to execute more instructions, you need to create another execution context. |
| /// |
| /// - `context_id` the id for the execution context previously created with |
| /// CreateExecutionContext. |
| ExecuteExecutionContext(uint64 context_id); |
| |
| /// Called each time the shell detects an error. |
| /// |
| /// - `context_id` when the error is generated by an execution context, the id of the context. |
| /// Zero otherwise. |
| /// - `locations` |
| /// For runtime errors, this is the stack frame (inner location first). |
| /// For semantic errors, this is the location of the error (only one item). |
| /// For global errors (not relative to a file), this is empty. |
| /// - `error_message` the text message for the error. |
| -> OnError(uint64 context_id, vector<Location>:MAX locations, string:MAX error_message); |
| |
| /// Signals that the shell has handled all the pending instructions. |
| /// Once this event is called, the execution context is destroyed. |
| /// |
| /// - `context_id` the execution context id. |
| /// - `result` the result of the execution. |
| -> OnExecutionDone(uint64 context_id, ExecuteResult result); |
| }; |