1b1994897Sopenharmony_ci/** 2b1994897Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3b1994897Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4b1994897Sopenharmony_ci * you may not use this file except in compliance with the License. 5b1994897Sopenharmony_ci * You may obtain a copy of the License at 6b1994897Sopenharmony_ci * 7b1994897Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8b1994897Sopenharmony_ci * 9b1994897Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10b1994897Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11b1994897Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12b1994897Sopenharmony_ci * See the License for the specific language governing permissions and 13b1994897Sopenharmony_ci * limitations under the License. 14b1994897Sopenharmony_ci */ 15b1994897Sopenharmony_ci 16b1994897Sopenharmony_ci#ifndef ASSEMBLER_ASSEMBLY_RECORD_H 17b1994897Sopenharmony_ci#define ASSEMBLER_ASSEMBLY_RECORD_H 18b1994897Sopenharmony_ci 19b1994897Sopenharmony_ci#include <memory> 20b1994897Sopenharmony_ci#include <optional> 21b1994897Sopenharmony_ci#include <string> 22b1994897Sopenharmony_ci#include <vector> 23b1994897Sopenharmony_ci 24b1994897Sopenharmony_ci#include "assembly-field.h" 25b1994897Sopenharmony_ci#include "extensions/extensions.h" 26b1994897Sopenharmony_ci#include "ide_helpers.h" 27b1994897Sopenharmony_ci 28b1994897Sopenharmony_cinamespace panda::pandasm { 29b1994897Sopenharmony_ci 30b1994897Sopenharmony_cistruct Record { 31b1994897Sopenharmony_ci std::string name = ""; 32b1994897Sopenharmony_ci bool conflict = false; /* Name is conflict with panda primitive types. Need special handle. */ 33b1994897Sopenharmony_ci panda::panda_file::SourceLang language; 34b1994897Sopenharmony_ci std::unique_ptr<RecordMetadata> metadata; 35b1994897Sopenharmony_ci std::vector<Field> field_list; /* class fields list */ 36b1994897Sopenharmony_ci size_t params_num = 0; 37b1994897Sopenharmony_ci bool body_presence = false; 38b1994897Sopenharmony_ci SourceLocation body_location; 39b1994897Sopenharmony_ci std::string source_file; /* The file in which the record is defined or empty */ 40b1994897Sopenharmony_ci std::optional<FileLocation> file_location; 41b1994897Sopenharmony_ci 42b1994897Sopenharmony_ci Record(std::string s, panda::panda_file::SourceLang lang, size_t b_l, size_t b_r, std::string f_c, bool d, 43b1994897Sopenharmony_ci size_t l_n) 44b1994897Sopenharmony_ci : name(std::move(s)), 45b1994897Sopenharmony_ci language(lang), 46b1994897Sopenharmony_ci metadata(extensions::MetadataExtension::CreateRecordMetadata(lang)), 47b1994897Sopenharmony_ci file_location({f_c, b_l, b_r, l_n, d}) 48b1994897Sopenharmony_ci { 49b1994897Sopenharmony_ci metadata->SetAccessFlags(panda::ACC_PUBLIC); 50b1994897Sopenharmony_ci } 51b1994897Sopenharmony_ci 52b1994897Sopenharmony_ci Record(std::string s, panda::panda_file::SourceLang lang) 53b1994897Sopenharmony_ci : name(std::move(s)), language(lang), metadata(extensions::MetadataExtension::CreateRecordMetadata(lang)) 54b1994897Sopenharmony_ci { 55b1994897Sopenharmony_ci metadata->SetAccessFlags(panda::ACC_PUBLIC); 56b1994897Sopenharmony_ci } 57b1994897Sopenharmony_ci 58b1994897Sopenharmony_ci bool HasImplementation() const 59b1994897Sopenharmony_ci { 60b1994897Sopenharmony_ci return !metadata->IsForeign(); 61b1994897Sopenharmony_ci } 62b1994897Sopenharmony_ci}; 63b1994897Sopenharmony_ci 64b1994897Sopenharmony_ci} // namespace panda::pandasm 65b1994897Sopenharmony_ci 66b1994897Sopenharmony_ci#endif // ASSEMBLER_ASSEMBLY_RECORD_H 67