Chromium Code Reviews| Index: runtime/vm/json_stream.cc |
| diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc |
| index 003f1b36d3c76a91340a6ab3dbfadf43be15d4af..59063068e9d7392b8220ae363e20d8bf3e3684f8 100644 |
| --- a/runtime/vm/json_stream.cc |
| +++ b/runtime/vm/json_stream.cc |
| @@ -46,6 +46,8 @@ JSONStream::JSONStream(intptr_t buf_size) |
| id_zone_(&default_id_zone_), |
| reply_port_(ILLEGAL_PORT), |
| seq_(NULL), |
| + parameter_keys_(NULL), |
| + parameter_values_(NULL), |
| method_(""), |
| param_keys_(NULL), |
| param_values_(NULL), |
| @@ -70,19 +72,25 @@ void JSONStream::Setup(Zone* zone, |
| const Instance& seq, |
| const String& method, |
| const Array& param_keys, |
| - const Array& param_values) { |
| + const Array& param_values, |
| + bool parameters_are_dart_objects) { |
| set_reply_port(reply_port); |
| seq_ = &Instance::ZoneHandle(seq.raw()); |
| method_ = method.ToCString(); |
| - String& string_iterator = String::Handle(); |
| - if (param_keys.Length() > 0) { |
| + if (parameters_are_dart_objects) { |
| + parameter_keys_ = &Array::ZoneHandle(param_keys.raw()); |
| + parameter_values_ = &Array::ZoneHandle(param_values.raw()); |
| + ASSERT(parameter_keys_->Length() == parameter_values_->Length()); |
| + } else if (param_keys.Length() > 0) { |
| + String& string_iterator = String::Handle(); |
| ASSERT(param_keys.Length() == param_values.Length()); |
| const char** param_keys_native = |
| zone->Alloc<const char*>(param_keys.Length()); |
| const char** param_values_native = |
| zone->Alloc<const char*>(param_keys.Length()); |
| for (intptr_t i = 0; i < param_keys.Length(); i++) { |
| + // fprintf(stderr, "Param %" Pd " is %s\n", i, param_values[ |
|
turnidge
2016/06/10 18:45:34
Remove this.
|
| string_iterator ^= param_keys.At(i); |
| param_keys_native[i] = |
| zone->MakeCopyOfString(string_iterator.ToCString()); |
| @@ -92,6 +100,7 @@ void JSONStream::Setup(Zone* zone, |
| } |
| SetParams(param_keys_native, param_values_native, param_keys.Length()); |
| } |
| + |
| if (FLAG_trace_service) { |
| Isolate* isolate = Isolate::Current(); |
| ASSERT(isolate != NULL); |
| @@ -130,6 +139,14 @@ static const char* GetJSONRpcErrorMessage(intptr_t code) { |
| return "Isolate must be runnable"; |
| case kIsolateMustBePaused: |
| return "Isolate must be paused"; |
| + case kIsolateIsReloading: |
| + return "Isolate is reloading"; |
| + case kFileSystemAlreadyExists: |
| + return "File system already exists"; |
| + case kFileSystemDoesNotExist: |
| + return "File system does not exist"; |
| + case kFileDoesNotExist: |
| + return "File does not exist"; |
| default: |
| return "Extension error"; |
| } |
| @@ -667,6 +684,42 @@ void JSONStream::set_reply_port(Dart_Port port) { |
| } |
| +intptr_t JSONStream::NumObjectParameters() const { |
| + if (parameter_keys_ == NULL) { |
| + return 0; |
| + } |
| + ASSERT(parameter_keys_ != NULL); |
| + ASSERT(parameter_values_ != NULL); |
| + return parameter_keys_->Length(); |
| +} |
| + |
| + |
| +RawObject* JSONStream::GetObjectParameterKey(intptr_t i) const { |
| + ASSERT((i >= 0) && (i < NumObjectParameters())); |
| + return parameter_keys_->At(i); |
| +} |
| + |
| + |
| +RawObject* JSONStream::GetObjectParameterValue(intptr_t i) const { |
| + ASSERT((i >= 0) && (i < NumObjectParameters())); |
| + return parameter_values_->At(i); |
| +} |
| + |
| + |
| +RawObject* JSONStream::LookupObjectParam(const char* c_key) const { |
| + const String& key = String::Handle(String::New(c_key)); |
| + Object& test = Object::Handle(); |
| + const intptr_t num_object_parameters = NumObjectParameters(); |
| + for (intptr_t i = 0; i < num_object_parameters; i++) { |
| + test = GetObjectParameterKey(i); |
| + if (test.IsString() && String::Cast(test).Equals(key)) { |
| + return GetObjectParameterValue(i); |
| + } |
| + } |
| + return Object::null(); |
| +} |
| + |
| + |
| void JSONStream::SetParams(const char** param_keys, |
| const char** param_values, |
| intptr_t num_params) { |