1 /* 2 * Copyright (c) 2023 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 #ifndef ECMASCRIPT_ENUM_CONVERSION_H 17 #define ECMASCRIPT_ENUM_CONVERSION_H 18 19 #include <optional> 20 #include "ecmascript/global_env_fields.h" 21 #include "ecmascript/ts_types/builtin_type_id.h" 22 23 namespace panda::ecmascript { ToGlobalEnvPrototypeField(BuiltinTypeId type)24inline constexpr std::optional<GlobalEnvField> ToGlobalEnvPrototypeField(BuiltinTypeId type) 25 { 26 switch (type) { 27 case BuiltinTypeId::UINT8_CLAMPED_ARRAY: 28 return GlobalEnvField::UINT8_CLAMPED_ARRAY_FUNCTION_PROTO_INDEX; 29 case BuiltinTypeId::UINT8_ARRAY: 30 return GlobalEnvField::UINT8_ARRAY_FUNCTION_PROTOTYPE_INDEX; 31 case BuiltinTypeId::TYPED_ARRAY: 32 return GlobalEnvField::TYPED_ARRAY_PROTOTYPE_INDEX; 33 case BuiltinTypeId::INT8_ARRAY: 34 return GlobalEnvField::INT8_ARRAY_FUNCTION_PROTOTYPE_INDEX; 35 case BuiltinTypeId::UINT16_ARRAY: 36 return GlobalEnvField::UINT16_ARRAY_FUNCTION_PROTOTYPE_INDEX; 37 case BuiltinTypeId::UINT32_ARRAY: 38 return GlobalEnvField::UINT32_ARRAY_FUNCTION_PROTOTYPE_INDEX; 39 case BuiltinTypeId::INT16_ARRAY: 40 return GlobalEnvField::INT16_ARRAY_FUNCTION_PROTOTYPE_INDEX; 41 case BuiltinTypeId::INT32_ARRAY: 42 return GlobalEnvField::INT32_ARRAY_FUNCTION_PROTOTYPE_INDEX; 43 case BuiltinTypeId::FLOAT32_ARRAY: 44 return GlobalEnvField::FLOAT32_ARRAY_FUNCTION_PROTOTYPE_INDEX; 45 case BuiltinTypeId::FLOAT64_ARRAY: 46 return GlobalEnvField::FLOAT64_ARRAY_FUNCTION_PROTOTYPE_INDEX; 47 case BuiltinTypeId::BIGINT64_ARRAY: 48 return GlobalEnvField::BIGINT64_ARRAY_FUNCTION_PROTOTYPE_INDEX; 49 case BuiltinTypeId::BIGUINT64_ARRAY: 50 return GlobalEnvField::BIGUINT64_ARRAY_FUNCTION_PROTOTYPE_INDEX; 51 case BuiltinTypeId::ARRAY: 52 return GlobalEnvField::ARRAY_PROTOTYPE_INDEX; 53 case BuiltinTypeId::DATA_VIEW: 54 return GlobalEnvField::DATA_VIEW_PROTOTYPE_INDEX; 55 case BuiltinTypeId::DATE: 56 return GlobalEnvField::DATE_PROTOTYPE_INDEX; 57 case BuiltinTypeId::FUNCTION: 58 return GlobalEnvField::FUNCTION_PROTOTYPE_INDEX; 59 case BuiltinTypeId::GENERATOR_FUNCTION: 60 return GlobalEnvField::GENERATOR_FUNCTION_PROTOTYPE_OFFSET; 61 case BuiltinTypeId::MAP: 62 return GlobalEnvField::MAP_PROTOTYPE_INDEX; 63 case BuiltinTypeId::OBJECT: 64 return GlobalEnvField::OBJECT_FUNCTION_PROTOTYPE_INDEX; 65 case BuiltinTypeId::SET: 66 return GlobalEnvField::SET_PROTOTYPE_INDEX; 67 case BuiltinTypeId::STRING: 68 return GlobalEnvField::STRING_PROTOTYPE_INDEX; 69 case BuiltinTypeId::ITERATOR: 70 return GlobalEnvField::ITERATOR_PROTOTYPE_INDEX; 71 case BuiltinTypeId::ARRAY_ITERATOR: 72 return GlobalEnvField::ARRAY_ITERATOR_PROTOTYPE_INDEX; 73 default: // No corresponding entry in either BuiltinTypeId or GlobalEnvField 74 return std::nullopt; 75 } 76 } 77 ToBuiltinsTypeId(JSType type)78constexpr std::optional<BuiltinTypeId> ToBuiltinsTypeId(JSType type) 79 { 80 if (type >= JSType::STRING_FIRST && type <= JSType::STRING_LAST) { 81 return BuiltinTypeId::STRING; 82 } 83 switch (type) { 84 case JSType::JS_MAP: 85 return BuiltinTypeId::MAP; 86 case JSType::JS_SET: 87 return BuiltinTypeId::SET; 88 case JSType::JS_OBJECT: 89 return BuiltinTypeId::OBJECT; 90 case JSType::JS_ARRAY: 91 return BuiltinTypeId::ARRAY; 92 case JSType::JS_DATA_VIEW: 93 return BuiltinTypeId::DATA_VIEW; 94 case JSType::JS_DATE: 95 return BuiltinTypeId::DATE; 96 case JSType::JS_INT8_ARRAY: 97 return BuiltinTypeId::INT8_ARRAY; 98 case JSType::JS_UINT8_ARRAY: 99 return BuiltinTypeId::UINT8_ARRAY; 100 case JSType::JS_UINT8_CLAMPED_ARRAY: 101 return BuiltinTypeId::UINT8_CLAMPED_ARRAY; 102 case JSType::JS_INT16_ARRAY: 103 return BuiltinTypeId::INT16_ARRAY; 104 case JSType::JS_UINT16_ARRAY: 105 return BuiltinTypeId::UINT16_ARRAY; 106 case JSType::JS_INT32_ARRAY: 107 return BuiltinTypeId::INT32_ARRAY; 108 case JSType::JS_UINT32_ARRAY: 109 return BuiltinTypeId::UINT32_ARRAY; 110 case JSType::JS_FLOAT32_ARRAY: 111 return BuiltinTypeId::FLOAT32_ARRAY; 112 case JSType::JS_FLOAT64_ARRAY: 113 return BuiltinTypeId::FLOAT64_ARRAY; 114 case JSType::JS_ARRAY_ITERATOR: 115 return BuiltinTypeId::ARRAY_ITERATOR; 116 default: 117 return std::nullopt; 118 } 119 } 120 } // namespace panda::ecmascript 121 #endif // ECMASCRIPT_ENUM_CONVERSION_H 122