1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "extensions.h" 17 #include "ecmascript/ecmascript_meta.h" 18 #include "macros.h" 19 20 namespace panda::pandasm::extensions { 21 LanguageFromString(std::string_view lang)22std::optional<Language> LanguageFromString(std::string_view lang) 23 { 24 if (lang == "ECMAScript") { 25 return Language::ECMASCRIPT; 26 } 27 28 if (lang == "PandaAssembly") { 29 return Language::PANDA_ASSEMBLY; 30 } 31 32 return {}; 33 } 34 LanguageToString(const Language & lang)35std::string LanguageToString(const Language &lang) 36 { 37 if (lang == Language::ECMASCRIPT) { 38 return "ECMAScript"; 39 } 40 41 if (lang == Language::PANDA_ASSEMBLY) { 42 return "PandaAssembly"; 43 } 44 45 return {}; 46 } 47 GetCtorName(Language lang)48std::string GetCtorName(Language lang) 49 { 50 switch (lang) { 51 case Language::ECMASCRIPT: 52 return ".ctor"; 53 case Language::PANDA_ASSEMBLY: 54 return ".ctor"; 55 default: 56 break; 57 } 58 59 UNREACHABLE(); 60 return {}; 61 } 62 GetCctorName(Language lang)63std::string GetCctorName(Language lang) 64 { 65 switch (lang) { 66 case Language::ECMASCRIPT: 67 return ".cctor"; 68 case Language::PANDA_ASSEMBLY: 69 return ".cctor"; 70 default: 71 break; 72 } 73 74 UNREACHABLE(); 75 return {}; 76 } 77 78 /* static */ CreateRecordMetadata(Language lang)79std::unique_ptr<RecordMetadata> MetadataExtension::CreateRecordMetadata(Language lang) 80 { 81 switch (lang) { 82 case Language::ECMASCRIPT: 83 return std::make_unique<ecmascript::RecordMetadata>(); 84 case Language::PANDA_ASSEMBLY: 85 return std::make_unique<RecordMetadata>(); 86 default: 87 break; 88 } 89 90 UNREACHABLE(); 91 return {}; 92 } 93 94 /* static */ CreateFieldMetadata(Language lang)95std::unique_ptr<FieldMetadata> MetadataExtension::CreateFieldMetadata(Language lang) 96 { 97 switch (lang) { 98 case Language::ECMASCRIPT: 99 return std::make_unique<FieldMetadata>(); 100 case Language::PANDA_ASSEMBLY: 101 return std::make_unique<FieldMetadata>(); 102 default: 103 break; 104 } 105 106 UNREACHABLE(); 107 return {}; 108 } 109 110 /* static */ CreateFunctionMetadata(Language lang)111std::unique_ptr<FunctionMetadata> MetadataExtension::CreateFunctionMetadata(Language lang) 112 { 113 switch (lang) { 114 case Language::ECMASCRIPT: 115 return std::make_unique<FunctionMetadata>(); 116 case Language::PANDA_ASSEMBLY: 117 return std::make_unique<FunctionMetadata>(); 118 default: 119 break; 120 } 121 122 UNREACHABLE(); 123 return {}; 124 } 125 126 /* static */ CreateParamMetadata(Language lang)127std::unique_ptr<ParamMetadata> MetadataExtension::CreateParamMetadata(Language lang) 128 { 129 switch (lang) { 130 case Language::ECMASCRIPT: 131 return std::make_unique<ParamMetadata>(); 132 case Language::PANDA_ASSEMBLY: 133 return std::make_unique<ParamMetadata>(); 134 default: 135 break; 136 } 137 138 UNREACHABLE(); 139 return {}; 140 } 141 142 } // namespace panda::pandasm::extensions 143