代码拉取完成,页面将自动刷新
同步操作将从 OpenHarmony/arkcompiler_runtime_core 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*
* Copyright (c) 2024 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 "abc_field_processor.h"
#include "abc2program_log.h"
namespace panda::abc2program {
AbcFieldProcessor::AbcFieldProcessor(panda_file::File::EntityId entity_id, Abc2ProgramEntityContainer &entity_container,
pandasm::Record &record)
: AbcFileEntityProcessor(entity_id, entity_container), record_(record),
type_converter_(entity_container),
field_(pandasm::Field(LANG_ECMA))
{
field_data_accessor_ = std::make_unique<panda_file::FieldDataAccessor>(*file_, entity_id_);
}
void AbcFieldProcessor::FillProgramData()
{
FillFieldData();
record_.field_list.emplace_back(std::move(field_));
}
void AbcFieldProcessor::FillFieldData()
{
FillFieldName();
FillFieldType();
FillFieldMetaData();
}
void AbcFieldProcessor::FillFieldName()
{
panda_file::File::EntityId field_name_id = field_data_accessor_->GetNameId();
field_.name = GetStringById(field_name_id);
}
void AbcFieldProcessor::FillFieldType()
{
uint32_t field_type = field_data_accessor_->GetType();
field_.type = type_converter_.FieldTypeToPandasmType(field_type);
}
void AbcFieldProcessor::FillFieldMetaData()
{
field_.metadata->SetFieldType(field_.type);
FillFieldAttributes();
FillMetaDataValue();
}
void AbcFieldProcessor::FillFieldAttributes()
{
if (field_data_accessor_->IsExternal()) {
field_.metadata->SetAttribute(ABC_ATTR_EXTERNAL);
}
if (field_data_accessor_->IsStatic()) {
field_.metadata->SetAttribute(ABC_ATTR_STATIC);
}
}
void AbcFieldProcessor::FillMetaDataValue()
{
switch (field_.type.GetId()) {
case panda_file::Type::TypeId::U32: {
uint32_t val = field_data_accessor_->GetValue<uint32_t>().value();
if (record_.name == ES_MODULE_RECORD || field_.name == MODULE_RECORD_IDX) {
entity_container_.AddModuleLiteralArrayId(val);
auto module_literal_array_id_name = entity_container_.GetLiteralArrayIdName(val);
field_.metadata->SetValue(pandasm::ScalarValue::Create<pandasm::Value::Type::LITERALARRAY>(
module_literal_array_id_name));
} else if (record_.name == ES_SCOPE_NAMES_RECORD || field_.name == SCOPE_NAMES) {
entity_container_.AddUnnestedLiteralArrayId(val);
auto literal_array_id_name = entity_container_.GetLiteralArrayIdName(val);
field_.metadata->SetValue(pandasm::ScalarValue::Create<pandasm::Value::Type::LITERALARRAY>(
literal_array_id_name));
} else if (field_.name == MODULE_REQUEST_PAHSE_IDX) {
entity_container_.AddModuleRequestPhaseId(val);
auto module_literal_array_id_name = entity_container_.GetLiteralArrayIdName(val);
field_.metadata->SetValue(pandasm::ScalarValue::Create<pandasm::Value::Type::LITERALARRAY>(
module_literal_array_id_name));
} else {
field_.metadata->SetValue(pandasm::ScalarValue::Create<pandasm::Value::Type::U32>(val));
}
break;
}
case panda_file::Type::TypeId::U8: {
const uint8_t val = field_data_accessor_->GetValue<uint8_t>().value();
field_.metadata->SetValue(pandasm::ScalarValue::Create<pandasm::Value::Type::U8>(val));
break;
}
default:
UNREACHABLE();
}
}
void AbcFieldProcessor::FillFieldAnnotations()
{
log::Unimplemented(__PRETTY_FUNCTION__);
}
} // namespace panda::abc2program
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。