• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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