/* * Copyright (c) 2021 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "ecmascript/tooling/base/pt_events.h" namespace panda::ecmascript::tooling { Local BreakpointResolved::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "breakpointId")), Local(StringRef::NewFromUtf8(ecmaVm, breakpointId_.c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "location")), Local(location_->ToObject(ecmaVm))); Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } std::unique_ptr BreakpointResolved::ToJson() const { std::unique_ptr result = PtJson::CreateObject(); result->Add("breakpointId", breakpointId_.c_str()); result->Add("location", location_->ToJson()); std::unique_ptr object = PtJson::CreateObject(); object->Add("method", GetName().c_str()); object->Add("params", result); return object; } Local Paused::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); size_t len = callFrames_.size(); Local values = ArrayRef::New(ecmaVm, len); for (size_t i = 0; i < len; i++) { Local callFrame = callFrames_[i]->ToObject(ecmaVm); values->Set(ecmaVm, i, callFrame); } params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "callFrames")), values); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "reason")), Local(StringRef::NewFromUtf8(ecmaVm, reason_.c_str()))); if (data_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "data")), Local(data_.value()->ToObject(ecmaVm))); } if (hitBreakpoints_) { len = hitBreakpoints_->size(); values = ArrayRef::New(ecmaVm, len); for (size_t i = 0; i < len; i++) { Local id = StringRef::NewFromUtf8(ecmaVm, hitBreakpoints_.value()[i].c_str()); values->Set(ecmaVm, i, id); } params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "hitBreakpoints")), values); } Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local Resumed::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local ScriptFailedToParse::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "scriptId")), Local(StringRef::NewFromUtf8(ecmaVm, std::to_string(scriptId_).c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "url")), Local(StringRef::NewFromUtf8(ecmaVm, url_.c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "startLine")), IntegerRef::New(ecmaVm, startLine_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "startColumn")), IntegerRef::New(ecmaVm, startColumn_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "endLine")), IntegerRef::New(ecmaVm, endLine_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "endColumn")), IntegerRef::New(ecmaVm, endColumn_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "executionContextId")), IntegerRef::New(ecmaVm, executionContextId_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "hash")), Local(StringRef::NewFromUtf8(ecmaVm, hash_.c_str()))); if (execContextAuxData_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "executionContextAuxData")), Local(execContextAuxData_.value())); } if (sourceMapUrl_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "sourceMapURL")), Local(StringRef::NewFromUtf8(ecmaVm, sourceMapUrl_->c_str()))); } if (hasSourceUrl_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "hasSourceURL")), BooleanRef::New(ecmaVm, hasSourceUrl_.value())); } if (isModule_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "isModule")), BooleanRef::New(ecmaVm, isModule_.value())); } if (length_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "length")), IntegerRef::New(ecmaVm, length_.value())); } if (codeOffset_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "codeOffset")), IntegerRef::New(ecmaVm, codeOffset_.value())); } if (scriptLanguage_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "scriptLanguage")), Local(StringRef::NewFromUtf8(ecmaVm, scriptLanguage_->c_str()))); } if (embedderName_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "embedderName")), Local(StringRef::NewFromUtf8(ecmaVm, embedderName_->c_str()))); } Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local ScriptParsed::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "scriptId")), Local(StringRef::NewFromUtf8(ecmaVm, std::to_string(scriptId_).c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "url")), Local(StringRef::NewFromUtf8(ecmaVm, url_.c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "startLine")), IntegerRef::New(ecmaVm, startLine_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "startColumn")), IntegerRef::New(ecmaVm, startColumn_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "endLine")), IntegerRef::New(ecmaVm, endLine_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "endColumn")), IntegerRef::New(ecmaVm, endColumn_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "executionContextId")), IntegerRef::New(ecmaVm, executionContextId_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "hash")), Local(StringRef::NewFromUtf8(ecmaVm, hash_.c_str()))); if (execContextAuxData_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "executionContextAuxData")), Local(execContextAuxData_.value())); } if (isLiveEdit_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "isLiveEdit")), BooleanRef::New(ecmaVm, isLiveEdit_.value())); } if (sourceMapUrl_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "sourceMapURL")), Local(StringRef::NewFromUtf8(ecmaVm, sourceMapUrl_->c_str()))); } if (hasSourceUrl_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "hasSourceURL")), BooleanRef::New(ecmaVm, hasSourceUrl_.value())); } if (isModule_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "isModule")), BooleanRef::New(ecmaVm, isModule_.value())); } if (length_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "length")), IntegerRef::New(ecmaVm, length_.value())); } if (codeOffset_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "codeOffset")), IntegerRef::New(ecmaVm, codeOffset_.value())); } if (scriptLanguage_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "scriptLanguage")), Local(StringRef::NewFromUtf8(ecmaVm, scriptLanguage_->c_str()))); } if (embedderName_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "embedderName")), Local(StringRef::NewFromUtf8(ecmaVm, embedderName_->c_str()))); } Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local AddHeapSnapshotChunk::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "chunk")), Local(StringRef::NewFromUtf8(ecmaVm, chunk_.c_str()))); Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local ConsoleProfileFinished::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "id")), Local(StringRef::NewFromUtf8(ecmaVm, id_.c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "location")), Local(location_->ToObject(ecmaVm))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "profile")), Local(profile_->ToObject(ecmaVm))); if (title_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "title")), Local(StringRef::NewFromUtf8(ecmaVm, title_->c_str()))); } Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local ConsoleProfileStarted::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "id")), Local(StringRef::NewFromUtf8(ecmaVm, id_.c_str()))); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "location")), Local(location_->ToObject(ecmaVm))); if (title_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "title")), Local(StringRef::NewFromUtf8(ecmaVm, title_->c_str()))); } Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local PreciseCoverageDeltaUpdate::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "timestamp")), NumberRef::New(ecmaVm, timestamp_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "occasion")), Local(StringRef::NewFromUtf8(ecmaVm, occasion_.c_str()))); size_t len = result_.size(); Local values = ArrayRef::New(ecmaVm, len); for (size_t i = 0; i < len; i++) { Local result = result_[i]->ToObject(ecmaVm); values->Set(ecmaVm, i, result); } params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "result")), values); Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local HeapStatsUpdate::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); size_t len = statsUpdate_.size(); Local values = ArrayRef::New(ecmaVm, len); for (size_t i = 0; i < len; i++) { Local elem = IntegerRef::New(ecmaVm, statsUpdate_[i]); values->Set(ecmaVm, i, elem); } params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "statsUpdate")), values); Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local LastSeenObjectId::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "lastSeenObjectId")), IntegerRef::New(ecmaVm, lastSeenObjectId_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "timestamp")), NumberRef::New(ecmaVm, timestamp_)); Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } Local ReportHeapSnapshotProgress::ToObject(const EcmaVM *ecmaVm) const { Local params = NewObject(ecmaVm); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "done")), IntegerRef::New(ecmaVm, done_)); params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "total")), IntegerRef::New(ecmaVm, total_)); if (finished_) { params->Set(ecmaVm, Local(StringRef::NewFromUtf8(ecmaVm, "finished")), BooleanRef::New(ecmaVm, finished_.value())); } Local object = NewObject(ecmaVm); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "method"), Local(StringRef::NewFromUtf8(ecmaVm, GetName().c_str()))); object->Set(ecmaVm, StringRef::NewFromUtf8(ecmaVm, "params"), Local(params)); return object; } } // namespace panda::ecmascript::tooling