Lines Matching refs:items
519 const std::unordered_map<std::string, T *> &items, size_t idx = 0)
525 auto it = items.find(id);
526 ASSERT(it != items.cend());
585 void AsmEmitter::MakeStringItems(ItemContainer *items, const Program &program,
589 auto *item = items->GetOrCreateStringItem(s);
595 void AsmEmitter::MakeLiteralItems(ItemContainer *items, const Program &program,
599 auto *literal_array_item = items->GetOrCreateLiteralArrayItem(id);
731 CreateLiteralItem(items, value.get(), &literal_array, entities);
738 void AsmEmitter::MakeArrayTypeItems(ItemContainer *items, const Program &program,
742 auto *foreign_record = items->GetOrCreateForeignClassItem(t.GetDescriptor());
749 ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
754 auto *foreign_record = items->GetOrCreateForeignClassItem(record_type.GetDescriptor(rec.conflict));
758 auto *field_name = items->GetOrCreateStringItem(pandasm::DeMangleName(f.name));
764 auto *type_item = GetTypeItem(items, primitive_types, f.type, program);
769 auto *field = items->CreateItem<ForeignFieldItem>(foreign_record, field_name, type_item);
776 bool AsmEmitter::HandleBaseRecord(ItemContainer *items, const Program &program, const std::string &name,
789 record->SetSuperClass(items->GetOrCreateForeignClassItem(base_type.GetDescriptor(rec.conflict)));
791 record->SetSuperClass(items->GetOrCreateClassItem(base_type.GetDescriptor(rec.conflict)));
798 bool AsmEmitter::HandleInterfaces(ItemContainer *items, const Program &program, const std::string &name,
811 record->AddInterface(items->GetOrCreateForeignClassItem(iface_type.GetDescriptor(iface.conflict)));
813 record->AddInterface(items->GetOrCreateClassItem(iface_type.GetDescriptor(iface.conflict)));
820 bool AsmEmitter::HandleFields(ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
829 auto *field_name = items->GetOrCreateStringItem(pandasm::DeMangleName(f.name));
830 auto *type_item = GetTypeItem(items, primitive_types, f.type, program);
837 field = items->CreateItem<ForeignFieldItem>(record, field_name, type_item);
847 bool AsmEmitter::HandleRecord(ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
852 auto *record = items->GetOrCreateClassItem(record_type.GetDescriptor(rec.conflict));
859 auto *source_file_item = items->GetOrCreateStringItem(rec.source_file);
863 if (!HandleBaseRecord(items, program, name, rec, record)) {
867 if (!HandleInterfaces(items, program, name, rec, record)) {
871 if (!HandleFields(items, program, entities, primitive_types, name, rec, record)) {
880 ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
885 if (!HandleRecordAsForeign(items, program, entities, primitive_types, name, rec)) {
889 if (!HandleRecord(items, program, entities, primitive_types, name, rec)) {
898 StringItem *AsmEmitter::GetMethodName(ItemContainer *items, const Function &func, const std::string &name)
901 return items->GetOrCreateStringItem(panda::panda_file::GetCtorName(func.language));
903 return items->GetOrCreateStringItem(panda::panda_file::GetCctorName(func.language));
905 return items->GetOrCreateStringItem(GetItemName(name));
910 bool AsmEmitter::HandleAreaForInner(ItemContainer *items, const Program &program, ClassItem **area,
920 *foreign_area = items->GetOrCreateForeignClassItem(descriptor);
926 *area = items->GetOrCreateClassItem(descriptor);
937 bool AsmEmitter::HandleRecordOnwer(ItemContainer *items, const Program &program, ClassItem **area,
942 *area = items->GetOrCreateGlobalClassItem();
946 if (!HandleAreaForInner(items, program, area, foreign_area, name, record_owner_name)) {
955 ItemContainer *items, const Program &program, size_t idx, const std::string &name, const Function &func,
961 auto *type_item = GetTypeItem(items, primitive_types, p, program);
972 bool AsmEmitter::HandleFunctionLocalVariables(ItemContainer *items, const Function &func, const std::string &name)
983 items->GetOrCreateStringItem(v.name);
989 items->GetOrCreateStringItem(v.signature);
991 items->GetOrCreateStringItem(v.signature_type);
998 bool AsmEmitter::CreateMethodItem(ItemContainer *items, AsmEmitter::AsmEntityCollections &entities,
1004 auto *proto = items->GetOrCreateProtoItem(type_item, params);
1008 method = items->CreateItem<ForeignMethodItem>(area, method_name, proto, access_flags);
1018 method = items->CreateItem<ForeignMethodItem>(foreign_area, method_name, proto, access_flags);
1023 items->GetOrCreateStringItem(func.source_file);
1026 items->GetOrCreateStringItem(func.source_code);
1034 ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
1042 StringItem *method_name = GetMethodName(items, func, name);
1048 if (!HandleRecordOnwer(items, program, &area, &foreign_area, name, record_owner_name)) {
1063 if (!HandleFunctionParams(items, program, idx, name, func, primitive_types, params)) {
1067 if (emit_debug_info && !HandleFunctionLocalVariables(items, func, name)) {
1071 auto *type_item = GetTypeItem(items, primitive_types, func.return_type, program);
1077 if (!CreateMethodItem(items, entities, func, type_item, area, foreign_area, access_flags, method_name,
1103 bool AsmEmitter::FillFields(ItemContainer *items, const Program &program, const panda::pandasm::Record &record,
1109 if (!AddAnnotations(field_item, items, *field.metadata, program, entities)) {
1117 auto *item = CreateValueItem(items, &value, program, entities);
1128 bool AsmEmitter::MakeRecordAnnotations(ItemContainer *items, const Program &program,
1137 if (!AddAnnotations(class_item, items, *record.metadata, program, entities)) {
1142 if (!FillFields(items, program, record, entities)) {
1150 void AsmEmitter::SetCodeAndDebugInfo(ItemContainer *items, MethodItem *method, const Function &func,
1153 auto *code = items->CreateItem<CodeItem>();
1161 auto *line_number_program = items->CreateLineNumberProgramItem();
1162 auto *debug_info = items->CreateItem<DebugInfoItem>(line_number_program);
1167 debug_info->AddParameter(items->GetOrCreateStringItem(v.name));
1180 bool AsmEmitter::AddMethodAndParamsAnnotations(ItemContainer *items, const Program &program,
1184 if (!AddAnnotations(method, items, *func.metadata, program, entities)) {
1194 if (!AddAnnotations(¶m_item, items, *param.metadata, program, entities)) {
1202 items->CreateItem<ParamAnnotationsItem>(method, true);
1206 items->CreateItem<ParamAnnotationsItem>(method, false);
1213 bool AsmEmitter::MakeFunctionDebugInfoAndAnnotations(ItemContainer *items, const Program &program,
1224 SetCodeAndDebugInfo(items, method, func, emit_debug_info);
1231 if (!AddMethodAndParamsAnnotations(items, program, entities, method, func)) {
1263 void AsmEmitter::EmitDebugInfo(ItemContainer *items, const Program &program, const std::vector<uint8_t> *bytes,
1284 auto *source_code_item = items->GetOrCreateStringItem(func.source_code);
1288 auto *source_file_item = items->GetOrCreateStringItem(func.source_file);
1292 func.BuildLineNumberProgram(debug_info, *bytes, items, constant_pool, emit_debug_info);
1296 bool AsmEmitter::EmitFunctions(ItemContainer *items, const Program &program,
1334 EmitDebugInfo(items, program, bytes, method, func, name, emit_debug_info);
1340 bool AsmEmitter::MakeItemsForSingleProgram(ItemContainer *items, const Program &program, bool emit_debug_info,
1344 MakeStringItems(items, program, entities);
1345 MakeArrayTypeItems(items, program, entities);
1346 if (!MakeRecordItems(items, program, entities, primitive_types)) {
1349 if (!MakeFunctionItems(items, program, entities, primitive_types, emit_debug_info)) {
1352 MakeLiteralItems(items, program, entities);
1354 if (!MakeRecordAnnotations(items, program, entities)) {
1439 auto items = ItemContainer {};
1440 auto primitive_types = CreatePrimitiveTypes(&items);
1445 if (!MakeItemsForSingleProgram(&items, *prog, emit_debug_info, entities, primitive_types)) {
1451 if (!MakeFunctionDebugInfoAndAnnotations(&items, *prog, entities, emit_debug_info)) {
1456 items.ReLayout();
1457 items.ComputeLayout();
1460 if (!EmitFunctions(&items, *prog, entities, emit_debug_info)) {
1471 return items.Write(&writer);
1475 bool AsmEmitter::Emit(ItemContainer *items, const Program &program, PandaFileToPandaAsmMaps *maps, bool emit_debug_info,
1480 auto primitive_types = CreatePrimitiveTypes(items);
1486 if (!MakeItemsForSingleProgram(items, program, emit_debug_info, entities, primitive_types)) {
1490 // Add Code and DebugInfo items last due to they have variable size that depends on bytecode
1491 if (!MakeFunctionDebugInfoAndAnnotations(items, program, entities, emit_debug_info)) {
1496 items->ReorderItems(profile_opt);
1499 items->ComputeLayout();
1505 if (!EmitFunctions(items, program, entities, emit_debug_info)) {
1518 auto items = ItemContainer {};
1519 if (!Emit(&items, program, maps, debug_info, profile_opt)) {
1524 *stat = items.GetStat();
1527 return items.Write(writer);
1547 auto items = ItemContainer {};
1548 if (!Emit(&items, program, maps)) {
1552 size_t size = items.ComputeLayout();
1556 if (!items.Write(&writer)) {
1566 ItemContainer *items, const std::unordered_map<panda_file::Type::TypeId, PrimitiveTypeItem *> &primitive_types,
1574 return items->GetOrCreateForeignClassItem(type.GetDescriptor());
1586 return items->GetOrCreateForeignClassItem(type.GetDescriptor());
1589 return items->GetOrCreateClassItem(type.GetDescriptor());