1 /* 2 * Copyright (c) 2021-2024 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 ES2PANDA_LIB 17 #define ES2PANDA_LIB 18 19 // Switch off the linter for C header 20 // NOLINTBEGIN 21 22 #include <stdbool.h> 23 #include <stddef.h> 24 25 #ifdef __cplusplus 26 extern "C" { 27 #endif 28 29 #define ES2PANDA_LIB_VERSION 1 30 31 typedef struct es2panda_Config es2panda_Config; 32 typedef struct es2panda_Context es2panda_Context; 33 34 typedef struct es2panda_Program es2panda_Program; 35 typedef struct es2panda_ExternalSource es2panda_ExternalSource; 36 typedef struct es2panda_AstNode es2panda_AstNode; 37 typedef struct es2panda_Type es2panda_Type; 38 typedef struct es2panda_Variable es2panda_Variable; 39 typedef struct es2panda_Scope es2panda_Scope; 40 41 enum es2panda_ContextState { 42 ES2PANDA_STATE_NEW, 43 ES2PANDA_STATE_PARSED, 44 ES2PANDA_STATE_SCOPE_INITED, 45 ES2PANDA_STATE_CHECKED, 46 ES2PANDA_STATE_LOWERED, 47 ES2PANDA_STATE_ASM_GENERATED, 48 ES2PANDA_STATE_BIN_GENERATED, 49 50 ES2PANDA_STATE_ERROR 51 }; 52 typedef enum es2panda_ContextState es2panda_ContextState; 53 54 // NB: has to be synchronized with astNode.h 55 enum es2panda_ModifierFlags { 56 ES2PANDA_MODIFIER_NONE = 0U, 57 ES2PANDA_MODIFIER_STATIC = 1U << 0U, 58 ES2PANDA_MODIFIER_ASYNC = 1U << 1U, 59 ES2PANDA_MODIFIER_PUBLIC = 1U << 2U, 60 ES2PANDA_MODIFIER_PROTECTED = 1U << 3U, 61 ES2PANDA_MODIFIER_PRIVATE = 1U << 4U, 62 ES2PANDA_MODIFIER_DECLARE = 1U << 5U, 63 ES2PANDA_MODIFIER_READONLY = 1U << 6U, 64 ES2PANDA_MODIFIER_OPTIONAL = 1U << 7U, 65 ES2PANDA_MODIFIER_DEFINITE = 1U << 8U, 66 ES2PANDA_MODIFIER_ABSTRACT = 1U << 9U, 67 ES2PANDA_MODIFIER_CONST = 1U << 10U, 68 ES2PANDA_MODIFIER_FINAL = 1U << 11U, 69 ES2PANDA_MODIFIER_NATIVE = 1U << 12U, 70 ES2PANDA_MODIFIER_OVERRIDE = 1U << 13U, 71 ES2PANDA_MODIFIER_CONSTRUCTOR = 1U << 14U, 72 ES2PANDA_MODIFIER_SYNCHRONIZED = 1U << 15U, 73 ES2PANDA_MODIFIER_FUNCTIONAL = 1U << 16U, 74 ES2PANDA_MODIFIER_IN = 1U << 17U, 75 ES2PANDA_MODIFIER_OUT = 1U << 18U, 76 ES2PANDA_MODIFIER_INTERNAL = 1U << 19U, 77 ES2PANDA_MODIFIER_EXPORT = 1U << 22U, 78 ES2PANDA_MODIFIER_SETTER = 1U << 23U, 79 ES2PANDA_MODIFIER_DEFAULT_EXPORT = 1U << 24U, 80 }; 81 typedef enum es2panda_ModifierFlags es2panda_ModifierFlags; 82 83 // Has to be synchronized with astNode.h 84 enum es2panda_ScriptFunctionFlags { 85 ES2PANDA_SCRIPT_FUNCTION_NONE = 0, 86 ES2PANDA_SCRIPT_FUNCTION_GENERATOR = 1U << 0U, 87 ES2PANDA_SCRIPT_FUNCTION_ASYNC = 1U << 1U, 88 ES2PANDA_SCRIPT_FUNCTION_ARROW = 1U << 2U, 89 ES2PANDA_SCRIPT_FUNCTION_EXPRESSION = 1U << 3U, 90 ES2PANDA_SCRIPT_FUNCTION_OVERLOAD = 1U << 4U, 91 ES2PANDA_SCRIPT_FUNCTION_CONSTRUCTOR = 1U << 5U, 92 ES2PANDA_SCRIPT_FUNCTION_METHOD = 1U << 6U, 93 ES2PANDA_SCRIPT_FUNCTION_STATIC_BLOCK = 1U << 7U, 94 ES2PANDA_SCRIPT_FUNCTION_HIDDEN = 1U << 8U, 95 ES2PANDA_SCRIPT_FUNCTION_IMPLICIT_SUPER_CALL_NEEDED = 1U << 9U, 96 ES2PANDA_SCRIPT_FUNCTION_ENUM = 1U << 10U, 97 ES2PANDA_SCRIPT_FUNCTION_EXTERNAL = 1U << 11U, 98 ES2PANDA_SCRIPT_FUNCTION_PROXY = 1U << 12U, 99 ES2PANDA_SCRIPT_FUNCTION_THROWS = 1U << 13U, 100 ES2PANDA_SCRIPT_FUNCTION_RETHROWS = 1U << 14U, 101 ES2PANDA_SCRIPT_FUNCTION_GETTER = 1U << 15U, 102 ES2PANDA_SCRIPT_FUNCTION_SETTER = 1U << 16U, 103 ES2PANDA_SCRIPT_FUNCTION_ENTRY_POINT = 1U << 17U, 104 ES2PANDA_SCRIPT_FUNCTION_INSTANCE_EXTENSION_METHOD = 1U << 18U, 105 ES2PANDA_SCRIPT_FUNCTION_HAS_RETURN = 1U << 19U 106 }; 107 typedef enum es2panda_ScriptFunctionFlags es2panda_ScriptFunctionFlags; 108 109 // Needs to be synchronized with memberExpression.h 110 enum es2panda_MemberExpressionKind { 111 ES2PANDA_MEMBER_EXPRESSION_KIND_NONE = 0, 112 ES2PANDA_MEMBER_EXPRESSION_KIND_ELEMENT_ACCESS = 1U << 0U, 113 ES2PANDA_MEMBER_EXPRESSION_KIND_PROPERTY_ACCESS = 1U << 1U, 114 ES2PANDA_MEMBER_EXPRESSION_KIND_GETTER = 1U << 2U, 115 ES2PANDA_MEMBER_EXPRESSION_KIND_SETTER = 1U << 3U 116 }; 117 typedef enum es2panda_MemberExpressionKind es2panda_MemberExpressionKind; 118 119 struct es2panda_Impl { 120 int version; 121 122 es2panda_Config *(*CreateConfig)(int argc, char const **argv); 123 void (*DestroyConfig)(es2panda_Config *config); 124 125 es2panda_Context *(*CreateContextFromFile)(es2panda_Config *config, char const *source_file_name); 126 es2panda_Context *(*CreateContextFromString)(es2panda_Config *config, char const *source, char const *file_name); 127 es2panda_Context *(*ProceedToState)(es2panda_Context *context, es2panda_ContextState state); // context is consumed 128 void (*DestroyContext)(es2panda_Context *context); 129 130 es2panda_ContextState (*ContextState)(es2panda_Context *context); 131 char const *(*ContextErrorMessage)(es2panda_Context *context); 132 133 es2panda_Program *(*ContextProgram)(es2panda_Context *context); 134 es2panda_AstNode *(*ProgramAst)(es2panda_Program *program); 135 es2panda_ExternalSource **(*ProgramExternalSources)(es2panda_Program *program, size_t *len_p); 136 char const *(*ExternalSourceName)(es2panda_ExternalSource *e_source); 137 es2panda_Program **(*ExternalSourcePrograms)(es2panda_ExternalSource *e_source, size_t *len_p); 138 139 es2panda_Type *(*AstNodeType)(es2panda_AstNode *ast); 140 void (*AstNodeSetType)(es2panda_AstNode *ast, es2panda_Type *type); 141 142 es2panda_AstNode *const *(*AstNodeDecorators)(es2panda_AstNode *ast, size_t *size_p); 143 void (*AstNodeSetDecorators)(es2panda_Context *context, es2panda_AstNode *ast, es2panda_AstNode **decorators, 144 size_t n_decorators); 145 146 es2panda_ModifierFlags (*AstNodeModifierFlags)(es2panda_AstNode *ast); 147 148 void (*AstNodeForEach)(es2panda_AstNode *ast, void (*func)(es2panda_AstNode *, void *), void *arg); 149 150 bool (*IsArrowFunctionExpression)(es2panda_AstNode *ast); 151 es2panda_AstNode *(*CreateArrowFunctionExpression)(es2panda_Context *context, es2panda_AstNode *script_function); 152 es2panda_AstNode *(*ArrowFunctionExpressionScriptFunction)(es2panda_AstNode *ast); 153 154 bool (*IsAsExpression)(es2panda_AstNode *ast); 155 es2panda_AstNode *(*CreateAsExpression)(es2panda_Context *context, es2panda_AstNode *expr, 156 es2panda_AstNode *type_annotation, bool is_const); 157 es2panda_AstNode *(*AsExpressionExpr)(es2panda_AstNode *ast); 158 es2panda_AstNode *(*AsExpressionTypeAnnotation)(es2panda_AstNode *ast); 159 bool (*AsExpressionIsConst)(es2panda_AstNode *ast); 160 void (*AsExpressionSetExpr)(es2panda_AstNode *ast, es2panda_AstNode *expr); 161 void (*AsExpressionSetTypeAnnotation)(es2panda_AstNode *ast, es2panda_AstNode *type_annotation); 162 163 bool (*IsAssignmentExpression)(es2panda_AstNode *ast); 164 es2panda_AstNode *(*CreateAssignmentExpression)(es2panda_Context *context, es2panda_AstNode *left, 165 es2panda_AstNode *right, char const *operator_type); 166 es2panda_AstNode *(*AssignmentExpressionLeft)(es2panda_AstNode *ast); 167 es2panda_AstNode *(*AssignmentExpressionRight)(es2panda_AstNode *ast); 168 char const *(*AssignmentExpressionOperatorType)(es2panda_AstNode *ast); 169 void (*AssignmentExpressionSetOperatorType)(es2panda_AstNode *ast, char const *operator_type); 170 171 bool (*IsBinaryExpression)(es2panda_AstNode *ast); 172 es2panda_AstNode *(*CreatebinaryExpression)(es2panda_Context *context, es2panda_AstNode *left, 173 es2panda_AstNode *right, char const *operator_type); 174 es2panda_AstNode *(*BinaryExpressionLeft)(es2panda_AstNode *ast); 175 es2panda_AstNode *(*BinaryExpressionRight)(es2panda_AstNode *ast); 176 char const *(*BinaryExpressionOperator)(es2panda_AstNode *ast); 177 void (*BinaryExpressionSetOperator)(es2panda_AstNode *ast, char const *operator_type); 178 179 bool (*IsBlockStatement)(es2panda_AstNode *ast); 180 es2panda_AstNode *(*CreateBlockStatement)(es2panda_Context *context); 181 es2panda_AstNode **(*BlockStatementStatements)(es2panda_AstNode *ast, size_t *size_p); 182 void (*BlockStatementAddStatement)(es2panda_AstNode *ast, es2panda_AstNode *statement); 183 184 bool (*IsCallExpression)(es2panda_AstNode *ast); 185 es2panda_AstNode *(*CreateCallExpression)(es2panda_Context *context, es2panda_AstNode *callee, 186 es2panda_AstNode *type_arguments, es2panda_AstNode **arguments, 187 size_t n_arguments, bool optional); 188 es2panda_AstNode const *(*CallExpressionCallee)(es2panda_AstNode *ast); 189 es2panda_AstNode const *(*CallExpressionTypeArguments)(es2panda_AstNode *ast); 190 es2panda_AstNode **(*CallExpressionArguments)(es2panda_AstNode *ast, size_t *size_p); 191 bool (*CallExpressionIsOptional)(es2panda_AstNode *ast); 192 void (*CallExpressionSetTypeArguments)(es2panda_AstNode *ast, es2panda_AstNode *type_arguments); 193 194 bool (*IsChainExpression)(es2panda_AstNode *ast); 195 es2panda_AstNode *(*CreateChainExpression)(es2panda_Context *context, es2panda_AstNode *child); 196 es2panda_AstNode const *(*ChainExpressionChild)(es2panda_AstNode *ast); 197 198 bool (*IsClassDeclaration)(es2panda_AstNode *ast); 199 es2panda_AstNode *(*CreateClassDeclaration)(es2panda_Context *context, es2panda_AstNode *definition); 200 es2panda_AstNode *(*ClassDeclarationDefinition)(es2panda_AstNode *ast); 201 202 bool (*IsClassDefinition)(es2panda_AstNode *ast); 203 es2panda_AstNode *(*CreateClassDefinition)(es2panda_Context *context, es2panda_AstNode *identifier, 204 es2panda_ModifierFlags flags); 205 es2panda_AstNode *(*ClassDefinitionIdentifier)(es2panda_AstNode *ast); 206 es2panda_AstNode *(*ClassDefinitionTypeParameters)(es2panda_AstNode *ast); 207 es2panda_AstNode *(*ClassDefinitionSuperClass)(es2panda_AstNode *ast); 208 es2panda_AstNode **(*ClassDefinitionImplements)(es2panda_AstNode *ast, size_t *size_p); 209 es2panda_AstNode *(*ClassDefinitionConstructor)(es2panda_AstNode *ast); 210 es2panda_AstNode **(*ClassDefinitionBody)(es2panda_AstNode *ast, size_t *size_p); 211 void (*ClassDefinitionSetIdentifier)(es2panda_AstNode *ast, es2panda_AstNode *identifier); 212 void (*ClassDefinitionSetTypeParameters)(es2panda_AstNode *ast, es2panda_AstNode *type_params); 213 void (*ClassDefinitionSetSuperClass)(es2panda_AstNode *ast, es2panda_AstNode *super_class); 214 void (*ClassDefinitionSetImplements)(es2panda_AstNode *ast, es2panda_AstNode **implements, size_t n_implements); 215 void (*ClassDefinitionAddImplements)(es2panda_AstNode *ast, es2panda_AstNode *implements); 216 void (*ClassDefinitionSetConstructor)(es2panda_AstNode *ast, es2panda_AstNode *constructor); 217 void (*ClassDefinitonSetBody)(es2panda_AstNode *ast, es2panda_AstNode **body, size_t n_elems); 218 void (*ClassDefinitonAddToBody)(es2panda_AstNode *ast, es2panda_AstNode *statement); 219 220 es2panda_AstNode *(*ClassElementKey)(es2panda_AstNode *ast); 221 es2panda_AstNode *(*ClassElementValue)(es2panda_AstNode *ast); 222 223 bool (*IsClassImplementsClause)(es2panda_AstNode *ast); 224 es2panda_AstNode *(*CreateClassImplementsClause)(es2panda_Context *context, es2panda_AstNode *expression, 225 es2panda_AstNode *type_arguments); 226 es2panda_AstNode *(*ClassImplementsClauseExpression)(es2panda_AstNode *ast); 227 es2panda_AstNode const *(*ClassImplementsClauseTypeArguments)(es2panda_AstNode *ast); 228 229 bool (*IsClassProperty)(es2panda_AstNode *ast); 230 es2panda_AstNode *(*CreateClassProperty)(es2panda_Context *context, es2panda_AstNode *key, es2panda_AstNode *value, 231 es2panda_AstNode *type_annotation, es2panda_ModifierFlags modifier_flags, 232 bool is_computed); 233 es2panda_AstNode *(*ClassPropertyTypeAnnotation)(es2panda_AstNode *ast); 234 235 bool (*IsExpressionStatement)(es2panda_AstNode *ast); 236 es2panda_AstNode *(*CreateExpressionStatement)(es2panda_Context *context, es2panda_AstNode *expression); 237 es2panda_AstNode *(*ExpressionStatementExpression)(es2panda_AstNode *ast); 238 239 bool (*IsFunctionDeclaration)(es2panda_AstNode *ast); 240 es2panda_AstNode *(*CreateFunctionDeclaration)(es2panda_Context *context, es2panda_AstNode *function); 241 es2panda_AstNode *(*FunctionDeclarationFunction)(es2panda_AstNode *ast); 242 243 bool (*IsFunctionExpression)(es2panda_AstNode *ast); 244 es2panda_AstNode *(*CreateFunctionExpression)(es2panda_Context *context, es2panda_AstNode *function); 245 es2panda_AstNode *(*FunctionExpressionFunction)(es2panda_AstNode *ast); 246 247 bool (*IsFunctionTypeNode)(es2panda_AstNode *ast); 248 es2panda_AstNode *(*CreateFunctionTypeNode)(es2panda_Context *context, es2panda_AstNode *type_params, 249 es2panda_AstNode **params, size_t n_params, 250 es2panda_AstNode *return_type, es2panda_ScriptFunctionFlags func_flags); 251 es2panda_AstNode const *(*FunctionTypeNodeTypeParams)(es2panda_AstNode *ast); 252 es2panda_AstNode *const *(*FunctionTypeNodeParams)(es2panda_AstNode *ast, size_t *size_p); 253 es2panda_AstNode *(*FunctionTypeNodeReturnType)(es2panda_AstNode *ast); 254 es2panda_ScriptFunctionFlags (*FunctionTypeNodeFlags)(es2panda_AstNode *ast); 255 256 bool (*IsIdentifier)(es2panda_AstNode *ast); 257 es2panda_AstNode *(*CreateIdentifier)(es2panda_Context *context, char const *name, 258 es2panda_AstNode *type_annotation); 259 char const *(*IdentifierName)(es2panda_Context *context, es2panda_AstNode *identifier); 260 es2panda_AstNode *(*IdentifierTypeAnnotation)(es2panda_AstNode *identifier); 261 es2panda_Variable *(*IdentifierVariable)(es2panda_AstNode *identifier); 262 void (*IdentifierSetVariable)(es2panda_AstNode *identifier, es2panda_Variable *variable); 263 264 bool (*IsIfStatement)(es2panda_AstNode *ast); 265 es2panda_AstNode *(*CreateIfStatement)(es2panda_Context *context, es2panda_AstNode *test, 266 es2panda_AstNode *consequent, es2panda_AstNode *alternate); 267 es2panda_AstNode const *(*IfStatementTest)(es2panda_AstNode *ast); 268 es2panda_AstNode const *(*IfStatementConsequent)(es2panda_AstNode *ast); 269 es2panda_AstNode const *(*IfStatementAlternate)(es2panda_AstNode *ast); 270 271 bool (*IsImportDeclaration)(es2panda_AstNode *ast); 272 es2panda_AstNode *(*CreateImportDeclaration)(es2panda_Context *context, es2panda_AstNode *source, 273 es2panda_AstNode **specifiers, size_t n_specifiers); 274 es2panda_AstNode const *(*ImportDeclarationSource)(es2panda_AstNode *ast); 275 es2panda_AstNode *const *(*ImportDeclarationSpecifiers)(es2panda_AstNode *ast, size_t *size_p); 276 277 bool (*IsImportExpression)(es2panda_AstNode *ast); 278 es2panda_AstNode *(*CreateImportExpression)(es2panda_Context *context, es2panda_AstNode *source); 279 es2panda_AstNode *(*ImportExpressionSource)(es2panda_AstNode *ast); 280 281 bool (*IsImportSpecifier)(es2panda_AstNode *ast); 282 es2panda_AstNode *(*CreateImportSpecifier)(es2panda_Context *context, es2panda_AstNode *imported, 283 es2panda_AstNode *local); 284 es2panda_AstNode *(*ImportSpecifierImported)(es2panda_AstNode *ast); 285 es2panda_AstNode *(*ImportSpecifierLocal)(es2panda_AstNode *ast); 286 287 bool (*IsMemberExpression)(es2panda_AstNode *ast); 288 es2panda_AstNode *(*CreateMemberExpression)(es2panda_Context *context, es2panda_AstNode *object, 289 es2panda_AstNode *property, es2panda_MemberExpressionKind kind, 290 bool is_computed, bool is_optional); 291 es2panda_AstNode *(*MemberExpressionObject)(es2panda_AstNode *ast); 292 es2panda_AstNode *(*MemberExpressionProperty)(es2panda_AstNode *ast); 293 es2panda_MemberExpressionKind (*MemberExpressionKind)(es2panda_AstNode *ast); 294 bool (*MemberExpressionIsComputed)(es2panda_AstNode *ast); 295 bool (*MemberExpressionIsOptional)(es2panda_AstNode *ast); 296 297 bool (*IsMethodDefinition)(es2panda_AstNode *ast); 298 es2panda_AstNode *(*CreateMethodDefinition)(es2panda_Context *context, char const *kind, es2panda_AstNode *key, 299 es2panda_AstNode *value, es2panda_ModifierFlags modifiers, 300 bool is_computed); 301 char const *(*MethodDefinitionKind)(es2panda_AstNode *ast); 302 es2panda_AstNode const *(*MethodDefinitionKey)(es2panda_AstNode *ast); 303 es2panda_AstNode const *(*MethodDefinitionValue)(es2panda_AstNode *ast); 304 es2panda_ModifierFlags (*MethodDefinitionModifiers)(es2panda_AstNode *ast); 305 bool (*MethodDefinitionIsComputed)(es2panda_AstNode *ast); 306 es2panda_AstNode *const *(*MethodDefinitionOverloads)(es2panda_AstNode *ast, size_t *size_p); 307 void (*MethodDefinitionSetOverloads)(es2panda_AstNode *ast, es2panda_AstNode **overloads, size_t n_overloads); 308 void (*MethodDefinitionAddOverload)(es2panda_AstNode *ast, es2panda_AstNode *overload); 309 310 bool (*IsNewClassInstanceExpression)(es2panda_AstNode *ast); 311 es2panda_AstNode *(*CreateNewClassInstanceExpression)(es2panda_Context *context, es2panda_AstNode *type_reference, 312 es2panda_AstNode **arguments, size_t n_arguments, 313 es2panda_AstNode *class_definition); 314 es2panda_AstNode *(*NewClassInstanceExpressionTypeReference)(es2panda_AstNode *ast); 315 es2panda_AstNode *const *(*NewClassInstanceExpressionArguments)(es2panda_AstNode *ast, size_t *size_p); 316 es2panda_AstNode *(*NewClassInstanceExpressionClassDefinition)(es2panda_AstNode *ast); 317 318 bool (*IsNewArrayInstanceExpression)(es2panda_AstNode *ast); 319 es2panda_AstNode *(*CreateNewArrayInstanceExpression)(es2panda_Context *context, es2panda_AstNode *type_reference, 320 es2panda_AstNode *dimension); 321 es2panda_AstNode *(*NewArrayInstanceExpressionTypeReference)(es2panda_AstNode *ast); 322 es2panda_AstNode *(*NewArrayInstanceExpressionDimension)(es2panda_AstNode *ast); 323 324 bool (*IsNewMultiDimArrayInstanceExpression)(es2panda_AstNode *ast); 325 es2panda_AstNode *(*CreateNewMultiDimArrayInstanceExpression)(es2panda_Context *context, 326 es2panda_AstNode *type_reference, 327 es2panda_AstNode **dimensions, size_t n_dimensions); 328 es2panda_AstNode *(*NewMultiDimArrayInstanceExpressionTypeReference)(es2panda_AstNode *ast); 329 es2panda_AstNode *const *(*NewMultiDimArrayInstanceExpressionDimensions)(es2panda_AstNode *ast, size_t *size_p); 330 331 bool (*IsNonNullExpression)(es2panda_AstNode *ast); 332 bool (*IsNumberLiteral)(es2panda_AstNode *ast); 333 bool (*IsObjectExpression)(es2panda_AstNode *ast); 334 335 bool (*IsParameterDeclaration)(es2panda_AstNode *ast); 336 es2panda_AstNode *(*CreateParameterDeclaration)(es2panda_Context *context, es2panda_AstNode *identifier_or_spread, 337 es2panda_AstNode *initializer); 338 es2panda_AstNode *(*ParameterDeclarationIdentifierOrSpread)(es2panda_AstNode *ast); 339 es2panda_AstNode *(*ParameterDeclarationInitializer)(es2panda_AstNode *ast); 340 341 bool (*IsPrimitiveTypeNode)(es2panda_AstNode *ast); 342 es2panda_AstNode *(*CreatePrimitiveTypeNode)(es2panda_Context *context, char const *type); 343 char const *(*PrimitiveTypeNodeType)(es2panda_AstNode *ast); 344 345 bool (*IsReturnStatement)(es2panda_AstNode *ast); 346 es2panda_AstNode *(*CreatereturnStatement)(es2panda_Context *context, es2panda_AstNode *argument); 347 es2panda_AstNode *(*ReturnStatementArgument)(es2panda_AstNode *ast); 348 es2panda_Type *(*ReturnStatementReturnType)(es2panda_AstNode *ast); 349 350 bool (*IsScriptFunction)(es2panda_AstNode *ast); 351 es2panda_AstNode *(*CreateScriptFunction)(es2panda_Context *context, es2panda_AstNode *type_params, 352 es2panda_AstNode **params, size_t n_params, 353 es2panda_AstNode *return_type_annotation, 354 es2panda_ScriptFunctionFlags function_flags, 355 es2panda_ModifierFlags modifier_flags, bool is_declare); 356 es2panda_AstNode *(*ScriptFunctionTypeParams)(es2panda_AstNode *ast); 357 es2panda_AstNode *const *(*ScriptFunctionParams)(es2panda_AstNode *ast, size_t *size_p); 358 es2panda_AstNode *(*ScriptFunctionReturnTypeAnnotation)(es2panda_AstNode *ast); 359 es2panda_ScriptFunctionFlags (*ScriptFunctionScriptFunctionFlags)(es2panda_AstNode *ast); 360 bool (*ScriptFunctionIsDeclare)(es2panda_AstNode *ast); 361 es2panda_AstNode *(*ScriptFunctionIdentifier)(es2panda_AstNode *ast); 362 es2panda_AstNode *(*ScriptFunctionBody)(es2panda_AstNode *ast); 363 void (*ScriptFunctionSetIdentifier)(es2panda_AstNode *ast, es2panda_AstNode *ident); 364 void (*ScriptFunctionSetBody)(es2panda_AstNode *ast, es2panda_AstNode *body); 365 void (*ScriptFunctionSetParams)(es2panda_AstNode *ast, es2panda_AstNode **params, size_t n_params); 366 void (*ScripFunctionAddParam)(es2panda_AstNode *ast, es2panda_AstNode *param); 367 368 bool (*IsStringLiteral)(es2panda_AstNode *ast); 369 es2panda_AstNode *(*CreateStringLiteral)(es2panda_Context *context, char const *string); 370 char const *(*StringLiteralString)(es2panda_Context *context, es2panda_AstNode *ast); 371 372 bool (*IsThisExpression)(es2panda_AstNode *ast); 373 es2panda_AstNode *(*CreateThisExpression)(es2panda_Context *context); 374 375 bool (*IsTypeParameter)(es2panda_AstNode *ast); 376 es2panda_AstNode *(*CreateTypeParameter)(es2panda_Context *context, es2panda_AstNode *name, 377 es2panda_AstNode *constraint, es2panda_AstNode *defaultType); 378 es2panda_AstNode const *(*TypeParameterName)(es2panda_AstNode *ast); 379 es2panda_AstNode const *(*TypeParameterConstraint)(es2panda_AstNode *ast); 380 es2panda_AstNode const *(*TypeParameterDefaultType)(es2panda_AstNode *ast); 381 382 bool (*IsTypeParameterDeclaration)(es2panda_AstNode *ast); 383 es2panda_AstNode *(*CreateTypeParameterDeclaration)(es2panda_Context *context); 384 void (*TypeParameterDeclarationAddTypeParameter)(es2panda_AstNode *ast, es2panda_AstNode *type_parameter); 385 es2panda_AstNode *const *(*TypeParameterDeclarationTypeParameters)(es2panda_AstNode *ast, size_t *size_p); 386 387 bool (*IsTypeParameterInstantiation)(es2panda_AstNode *ast); 388 es2panda_AstNode *(*CreateTypeParameterInstantiation)(es2panda_Context *context, es2panda_AstNode **params, 389 size_t n_params); 390 es2panda_AstNode *const *(*TypeParameterInstantiationTypeParameters)(es2panda_AstNode *ast, size_t *size_p); 391 392 bool (*IsTypeReferenceNode)(es2panda_AstNode *ast); 393 es2panda_AstNode *(*CreateTypeReferenceNode)(es2panda_Context *context, es2panda_AstNode *part); 394 es2panda_AstNode *(*TypeRefrenceNodePart)(es2panda_AstNode *ast); 395 396 bool (*IsTypeReferencePart)(es2panda_AstNode *ast); 397 es2panda_AstNode *(*CreateTypeReferencePart)(es2panda_Context *context, es2panda_AstNode *name, 398 es2panda_AstNode *type_arguments, es2panda_AstNode *previous); 399 es2panda_AstNode *(*TypeReferencePartName)(es2panda_AstNode *ast); 400 es2panda_AstNode *(*TypeReferencePartTypeArguments)(es2panda_AstNode *ast); 401 es2panda_AstNode *(*TypeReferencePartPrevious)(es2panda_AstNode *ast); 402 403 bool (*IsUnionTypeNode)(es2panda_AstNode *ast); 404 es2panda_AstNode *(*CreateUnionTypeNode)(es2panda_Context *context, es2panda_AstNode **types, size_t n_types); 405 es2panda_AstNode *const *(*UnionTypeNodeTypes)(es2panda_AstNode *ast, size_t *size_p); 406 407 bool (*IsVariableDeclaration)(es2panda_AstNode *ast); 408 es2panda_AstNode *(*CreateVariableDeclaration)(es2panda_Context *context, char const *kind, 409 es2panda_AstNode **declarators, size_t n_declarators, 410 bool is_declare); 411 char const *(*VariableDeclarationKind)(es2panda_AstNode *ast); 412 es2panda_AstNode *const *(*VariableDeclarationDeclarators)(es2panda_AstNode *ast, size_t *size_p); 413 bool (*VariableDeclarationIsDeclare)(es2panda_AstNode *ast); 414 415 bool (*IsVariableDeclarator)(es2panda_AstNode *ast); 416 es2panda_AstNode *(*CreateVariableDeclarator)(es2panda_Context *context, es2panda_AstNode *identifier, 417 es2panda_AstNode *initializer); 418 es2panda_AstNode *(*VariableDeclaratorIdentifier)(es2panda_AstNode *ast); 419 es2panda_AstNode *(*VariableDeclaratorInitializer)(es2panda_AstNode *ast); 420 }; 421 422 struct es2panda_Impl const *es2panda_GetImpl(int version); 423 // NOLINTEND 424 425 #ifdef __cplusplus 426 } 427 #endif 428 429 #endif // ES2PANDA_LIB 430