Lines Matching refs:program

130 std::string AsmEmitter::GetMethodSignatureFromProgram(const std::string &name, const Program &program)
136 const auto it_synonym = program.function_synonyms.find(name);
137 const bool is_method_known = (it_synonym != program.function_synonyms.end());
257 ItemContainer *container, const Value *value, std::vector<ScalarValueItem> *out, const Program &program,
262 name = GetMethodSignatureFromProgram(name, program);
280 ItemContainer *container, const Value *value, std::vector<ScalarValueItem> *out, const Program &program,
317 ItemContainer *container, const Value *value, std::vector<ScalarValueItem> *out, const Program &program,
321 auto *annotation_item = CreateAnnotationItem(container, annotation, program, entities);
336 std::vector<ScalarValueItem> *out, const Program &program,
369 return CreateScalarMethodValueItem(container, value, out, program, entities.method_items);
375 return CreateScalarAnnotationValueItem(container, value, out, program, entities);
378 return CreateScalarLiteralArrayItem(container, value, out, program, entities.literalarray_items);
388 ValueItem *AsmEmitter::CreateValueItem(ItemContainer *container, const Value *value, const Program &program,
396 CreateScalarValueItem(container, &elem_value, &elements, program, entities);
407 return CreateScalarValueItem(container, value, nullptr, program, entities);
414 const Program &program, const AsmEmitter::AsmEntityCollections &entities)
417 auto it = program.record_table.find(record_name);
418 if (it == program.record_table.cend()) {
449 auto *item = CreateValueItem(container, value, program, entities);
494 const Program &program, const AsmEmitter::AsmEntityCollections &entities)
497 auto *annotation_item = CreateAnnotationItem(container, annotation, program, entities);
502 auto &record = program.record_table.find(annotation.GetName())->second;
585 void AsmEmitter::MakeStringItems(ItemContainer *items, const Program &program,
588 for (const auto &s : program.strings) {
595 void AsmEmitter::MakeLiteralItems(ItemContainer *items, const Program &program,
598 for (const auto &[id, l] : program.literalarray_table) {
603 for (const auto &[id, l] : program.literalarray_table) {
610 ASSERT(program.array_types.find(Type("u1", 1)) != program.array_types.end());
616 ASSERT(program.array_types.find(Type("u8", 1)) != program.array_types.end());
622 ASSERT(program.array_types.find(Type("i8", 1)) != program.array_types.end());
628 ASSERT(program.array_types.find(Type("u16", 1)) != program.array_types.end());
634 ASSERT(program.array_types.find(Type("i16", 1)) != program.array_types.end());
640 ASSERT(program.array_types.find(Type("u32", 1)) != program.array_types.end());
646 ASSERT(program.array_types.find(Type("i32", 1)) != program.array_types.end());
652 ASSERT(program.array_types.find(Type("u64", 1)) != program.array_types.end());
658 ASSERT(program.array_types.find(Type("i64", 1)) != program.array_types.end());
664 ASSERT(program.array_types.find(Type("f32", 1)) != program.array_types.end());
670 ASSERT(program.array_types.find(Type("f64", 1)) != program.array_types.end());
676 ASSERT(program.array_types.find(Type(
677 Type::FromDescriptor(panda::panda_file::GetStringClassDescriptor(program.lang)), 1)) !=
678 program.array_types.end());
738 void AsmEmitter::MakeArrayTypeItems(ItemContainer *items, const Program &program,
741 for (const auto &t : program.array_types) {
749 ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
764 auto *type_item = GetTypeItem(items, primitive_types, f.type, program);
776 bool AsmEmitter::HandleBaseRecord(ItemContainer *items, const Program &program, const std::string &name,
781 auto it = program.record_table.find(base_name);
782 if (it == program.record_table.cend()) {
798 bool AsmEmitter::HandleInterfaces(ItemContainer *items, const Program &program, const std::string &name,
803 auto it = program.record_table.find(item);
804 if (it == program.record_table.cend()) {
820 bool AsmEmitter::HandleFields(ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
830 auto *type_item = GetTypeItem(items, primitive_types, f.type, program);
847 bool AsmEmitter::HandleRecord(ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
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,
883 for (const auto &[name, rec] : program.record_table) {
885 if (!HandleRecordAsForeign(items, program, entities, primitive_types, name, rec)) {
889 if (!HandleRecord(items, program, entities, primitive_types, name, rec)) {
910 bool AsmEmitter::HandleAreaForInner(ItemContainer *items, const Program &program, ClassItem **area,
914 auto iter = program.record_table.find(record_owner_name);
915 if (iter != program.record_table.end()) {
937 bool AsmEmitter::HandleRecordOnwer(ItemContainer *items, const Program &program, ClassItem **area,
944 (*area)->SetSourceLang(program.lang);
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);
1034 ItemContainer *items, const Program &program, AsmEmitter::AsmEntityCollections &entities,
1037 for (const auto &f : program.function_table) {
1048 if (!HandleRecordOnwer(items, program, &area, &foreign_area, name, record_owner_name)) {
1063 if (!HandleFunctionParams(items, program, idx, name, func, primitive_types, params)) {
1071 auto *type_item = GetTypeItem(items, primitive_types, func.return_type, program);
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,
1131 for (const auto &[name, record] : program.record_table) {
1137 if (!AddAnnotations(class_item, items, *record.metadata, program, entities)) {
1142 if (!FillFields(items, program, record, entities)) {
1180 bool AsmEmitter::AddMethodAndParamsAnnotations(ItemContainer *items, const Program &program,
1184 if (!AddAnnotations(method, items, *func.metadata, program, entities)) {
1194 if (!AddAnnotations(&param_item, items, *param.metadata, program, entities)) {
1213 bool AsmEmitter::MakeFunctionDebugInfoAndAnnotations(ItemContainer *items, const Program &program,
1217 for (const auto &[name, func] : program.function_table) {
1231 if (!AddMethodAndParamsAnnotations(items, program, entities, method, func)) {
1263 void AsmEmitter::EmitDebugInfo(ItemContainer *items, const Program &program, const std::vector<uint8_t> *bytes,
1278 auto &rec = program.record_table.find(record_name)->second;
1296 bool AsmEmitter::EmitFunctions(ItemContainer *items, const Program &program,
1299 for (const auto &f : program.function_table) {
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)) {
1475 bool AsmEmitter::Emit(ItemContainer *items, const Program &program, PandaFileToPandaAsmMaps *maps, bool emit_debug_info,
1478 MakeSlotNumberRecord(const_cast<Program *>(&program));
1479 MakeSlotNumberAnnotation(const_cast<Program *>(&program));
1486 if (!MakeItemsForSingleProgram(items, program, emit_debug_info, entities, primitive_types)) {
1491 if (!MakeFunctionDebugInfoAndAnnotations(items, program, entities, emit_debug_info)) {
1505 if (!EmitFunctions(items, program, entities, emit_debug_info)) {
1512 bool AsmEmitter::Emit(Writer *writer, const Program &program, std::map<std::string, size_t> *stat,
1519 if (!Emit(&items, program, maps, debug_info, profile_opt)) {
1530 bool AsmEmitter::Emit(const std::string &filename, const Program &program, std::map<std::string, size_t> *stat,
1539 return Emit(&writer, program, stat, maps, debug_info, profile_opt, api, subApi);
1542 std::unique_ptr<const panda_file::File> AsmEmitter::Emit(const Program &program, PandaFileToPandaAsmMaps *maps,
1548 if (!Emit(&items, program, maps)) {
1567 const Type &type, const Program &program)
1578 auto iter = program.record_table.find(name);
1579 if (iter == program.record_table.end()) {
1624 static void TryEmitPc(panda_file::LineNumberProgramItem *program, std::vector<uint8_t> *constant_pool,
1628 program->EmitAdvancePc(constant_pool, pc_inc);
1633 void Function::EmitLocalVariable(panda_file::LineNumberProgramItem *program, ItemContainer *container,
1641 TryEmitPc(program, constant_pool, pc_inc);
1645 program->EmitStartLocal(constant_pool, v.reg, variable_name, variable_type);
1648 program->EmitStartLocalExtended(constant_pool, v.reg, variable_name, variable_type, type_signature);
1653 TryEmitPc(program, constant_pool, pc_inc);
1654 program->EmitEndLocal(v.reg);
1668 void Function::EmitNumber(panda_file::LineNumberProgramItem *program, std::vector<uint8_t> *constant_pool,
1671 if (!program->EmitSpecialOpcode(pc_inc, line_inc)) {
1673 program->EmitAdvancePc(constant_pool, pc_inc);
1674 if (!program->EmitSpecialOpcode(0, line_inc)) {
1675 program->EmitAdvanceLine(constant_pool, line_inc);
1676 program->EmitSpecialOpcode(0, 0);
1679 program->EmitAdvanceLine(constant_pool, line_inc);
1680 program->EmitSpecialOpcode(0, 0);
1685 void Function::EmitLineNumber(panda_file::LineNumberProgramItem *program, std::vector<uint8_t> *constant_pool,
1691 EmitNumber(program, constant_pool, pc_inc, line_inc);
1696 void Function::EmitColumnNumber(panda_file::LineNumberProgramItem *program, std::vector<uint8_t> *constant_pool,
1701 program->EmitColumn(constant_pool, pc_inc, cn);
1736 auto *program = debug_item->GetLineNumberProgram();
1739 program->EmitEnd();
1767 EmitLineNumber(program, constant_pool, prev_line_number, pc_inc, i);
1770 EmitColumnNumber(program, constant_pool, prev_column_number, pc_inc, i);
1779 EmitLocalVariable(program, container, constant_pool, pc_inc, end, iter->variable_index);
1785 program->EmitEnd();