1 /**
2 * Copyright (c) 2021-2022 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 "ecmascript_meta.h"
17
18 namespace panda::pandasm::extensions::ecmascript {
19
Validate(std::string_view attribute) const20 std::optional<Metadata::Error> RecordMetadata::Validate(std::string_view attribute) const
21 {
22 if (attribute == "ecmascript.annotation") {
23 if (HasAttribute(attribute)) {
24 return Error("Attribute 'ecmascript.annotation' already defined",
25 Error::Type::MULTIPLE_ATTRIBUTE);
26 }
27 return {};
28 }
29
30 if (attribute == "ecmascript.extends") {
31 return Error("Attribute 'ecmascript.extends' must have a value",
32 Error::Type::MISSING_VALUE);
33 }
34
35 return pandasm::RecordMetadata::Validate(attribute);
36 }
37
Validate(std::string_view attribute,std::string_view value) const38 std::optional<Metadata::Error> RecordMetadata::Validate(std::string_view attribute, std::string_view value) const
39 {
40 if (attribute == "ecmascript.extends") {
41 if (HasAttribute(attribute)) {
42 return Error("Attribute 'ecmascript.extends' already defined",
43 Error::Type::MULTIPLE_ATTRIBUTE);
44 }
45 return {};
46 }
47
48 if (attribute == "ecmascript.annotation") {
49 return Error("Attribute 'ecmascript.annotation' must not have a value",
50 Error::Type::UNEXPECTED_VALUE);
51 }
52
53 return pandasm::RecordMetadata::Validate(attribute, value);
54 }
55
Validate(std::string_view attribute) const56 std::optional<Metadata::Error> FieldMetadata::Validate(std::string_view attribute) const
57 {
58 return pandasm::FieldMetadata::Validate(attribute);
59 }
60
Validate(std::string_view attribute,std::string_view value) const61 std::optional<Metadata::Error> FieldMetadata::Validate(std::string_view attribute, std::string_view value) const
62 {
63 return pandasm::FieldMetadata::Validate(attribute, value);
64 }
65
Validate(std::string_view attribute) const66 std::optional<Metadata::Error> FunctionMetadata::Validate(std::string_view attribute) const
67 {
68 return pandasm::FunctionMetadata::Validate(attribute);
69 }
70
Validate(std::string_view attribute,std::string_view value) const71 std::optional<Metadata::Error> FunctionMetadata::Validate(std::string_view attribute, std::string_view value) const
72 {
73 return pandasm::FunctionMetadata::Validate(attribute, value);
74 }
75
Validate(std::string_view attribute) const76 std::optional<Metadata::Error> ParamMetadata::Validate(std::string_view attribute) const
77 {
78 return pandasm::ParamMetadata::Validate(attribute);
79 }
80
Validate(std::string_view attribute,std::string_view value) const81 std::optional<Metadata::Error> ParamMetadata::Validate(std::string_view attribute, std::string_view value) const
82 {
83 return pandasm::ParamMetadata::Validate(attribute, value);
84 }
85
SetFlags(std::string_view attribute)86 void RecordMetadata::SetFlags(std::string_view attribute)
87 {
88 if (attribute == "ecmascript.annotation") {
89 SetAccessFlags(GetAccessFlags() | ACC_ANNOTATION);
90 }
91 pandasm::RecordMetadata::SetFlags(attribute);
92 }
93
SetFlags(std::string_view attribute,std::string_view value)94 void RecordMetadata::SetFlags(std::string_view attribute, std::string_view value)
95 {
96 pandasm::RecordMetadata::SetFlags(attribute, value);
97 }
98
RemoveFlags(std::string_view attribute)99 void RecordMetadata::RemoveFlags(std::string_view attribute)
100 {
101 if (attribute == "ecmascript.annotation") {
102 if ((GetAccessFlags() & ACC_ANNOTATION) != 0) {
103 SetAccessFlags(GetAccessFlags() ^ (ACC_ANNOTATION));
104 }
105 }
106 pandasm::RecordMetadata::RemoveFlags(attribute);
107 }
108
RemoveFlags(std::string_view attribute,std::string_view value)109 void RecordMetadata::RemoveFlags(std::string_view attribute, std::string_view value)
110 {
111 pandasm::RecordMetadata::RemoveFlags(attribute, value);
112 }
113
SetFlags(std::string_view attribute)114 void FieldMetadata::SetFlags(std::string_view attribute)
115 {
116 pandasm::FieldMetadata::SetFlags(attribute);
117 }
118
SetFlags(std::string_view attribute,std::string_view value)119 void FieldMetadata::SetFlags(std::string_view attribute, std::string_view value)
120 {
121 pandasm::FieldMetadata::SetFlags(attribute, value);
122 }
123
RemoveFlags(std::string_view attribute)124 void FieldMetadata::RemoveFlags(std::string_view attribute)
125 {
126 pandasm::FieldMetadata::RemoveFlags(attribute);
127 }
128
RemoveFlags(std::string_view attribute,std::string_view value)129 void FieldMetadata::RemoveFlags(std::string_view attribute, std::string_view value)
130 {
131 pandasm::FieldMetadata::RemoveFlags(attribute, value);
132 }
133
SetFlags(std::string_view attribute)134 void FunctionMetadata::SetFlags(std::string_view attribute)
135 {
136 pandasm::FunctionMetadata::SetFlags(attribute);
137 }
138
SetFlags(std::string_view attribute,std::string_view value)139 void FunctionMetadata::SetFlags(std::string_view attribute, std::string_view value)
140 {
141 pandasm::FunctionMetadata::SetFlags(attribute, value);
142 }
143
RemoveFlags(std::string_view attribute)144 void FunctionMetadata::RemoveFlags(std::string_view attribute)
145 {
146 pandasm::FunctionMetadata::RemoveFlags(attribute);
147 }
148
RemoveFlags(std::string_view attribute,std::string_view value)149 void FunctionMetadata::RemoveFlags(std::string_view attribute, std::string_view value)
150 {
151 pandasm::FunctionMetadata::RemoveFlags(attribute, value);
152 }
153
SetFlags(std::string_view attribute)154 void ParamMetadata::SetFlags(std::string_view attribute)
155 {
156 pandasm::ParamMetadata::SetFlags(attribute);
157 }
158
SetFlags(std::string_view attribute,std::string_view value)159 void ParamMetadata::SetFlags(std::string_view attribute, std::string_view value)
160 {
161 pandasm::ParamMetadata::SetFlags(attribute, value);
162 }
163
RemoveFlags(std::string_view attribute)164 void ParamMetadata::RemoveFlags(std::string_view attribute)
165 {
166 pandasm::ParamMetadata::RemoveFlags(attribute);
167 }
168
RemoveFlags(std::string_view attribute,std::string_view value)169 void ParamMetadata::RemoveFlags(std::string_view attribute, std::string_view value)
170 {
171 pandasm::ParamMetadata::RemoveFlags(attribute, value);
172 }
173
174 } // namespace panda::pandasm::extensions::ecmascript
175