Lines Matching refs:ir

20 #include "ir/statements/classDeclaration.h"
21 #include "ir/base/classDefinition.h"
22 #include "ir/base/classProperty.h"
23 #include "ir/base/classStaticBlock.h"
24 #include "ir/base/scriptFunction.h"
25 #include "ir/base/methodDefinition.h"
26 #include "ir/expressions/identifier.h"
27 #include "ir/expressions/classExpression.h"
28 #include "ir/expressions/functionExpression.h"
29 #include "ir/expressions/callExpression.h"
30 #include "ir/statements/expressionStatement.h"
31 #include "ir/statements/blockStatement.h"
39 static bool FunctionExists(const ArenaVector<ir::Statement *> &statements, const std::string_view name)
55 ir::ClassDeclaration *const globalDecl = CreateGlobalClass();
56 ir::ClassDefinition *const globalClass = globalDecl->Definition();
58 auto addStaticBlock = [this](ir::AstNode *node) {
102 ir::MethodDefinition *GlobalClassHandler::CreateGlobalMethod(const std::string_view name,
103 ArenaVector<ir::Statement *> &&statements)
105 const auto functionFlags = ir::ScriptFunctionFlags::NONE;
106 auto functionModifiers = ir::ModifierFlags::STATIC | ir::ModifierFlags::PUBLIC;
107 auto ident = NodeAllocator::Alloc<ir::Identifier>(allocator_, name, allocator_);
108 auto body = NodeAllocator::ForceSetParent<ir::BlockStatement>(allocator_, allocator_, std::move(statements));
109 auto funcSignature = ir::FunctionSignature(nullptr, ArenaVector<ir::Expression *>(allocator_->Adapter()), nullptr);
111 auto *func = NodeAllocator::Alloc<ir::ScriptFunction>(
113 ir::ScriptFunction::ScriptFunctionData {
119 auto *funcExpr = NodeAllocator::Alloc<ir::FunctionExpression>(allocator_, func);
120 return NodeAllocator::Alloc<ir::MethodDefinition>(allocator_, ir::MethodDefinitionKind::METHOD,
125 void GlobalClassHandler::AddInitCallFromStaticBlock(ir::ClassDefinition *globalClass, ir::MethodDefinition *initMethod)
131 [](ir::AstNode *node) { return node->IsClassStaticBlock(); });
137 auto *const callExpr = NodeAllocator::Alloc<ir::CallExpression>(
138 allocator_, callee, ArenaVector<ir::Expression *>(allocator_->Adapter()), nullptr, false, false);
141 auto exprStmt = NodeAllocator::Alloc<ir::ExpressionStatement>(allocator_, callExpr);
146 ir::Identifier *GlobalClassHandler::RefIdent(const util::StringView &name)
148 auto *const callee = NodeAllocator::Alloc<ir::Identifier>(allocator_, name, allocator_);
210 ArenaVector<ir::Statement *> GlobalClassHandler::FormInitMethodStatements(parser::Program *program,
214 ArenaVector<ir::Statement *> statements(allocator_->Adapter());
227 void GlobalClassHandler::FormDependentInitTriggers(ArenaVector<ir::Statement *> &statements,
230 auto const sequence = [&statements](ir::Statement *stmt) { statements.push_back(stmt); };
249 ir::ClassStaticBlock *GlobalClassHandler::CreateStaticBlock(ir::ClassDefinition *classDef)
265 ArenaVector<ir::Expression *> params(allocator_->Adapter());
267 auto *id = NodeAllocator::Alloc<ir::Identifier>(allocator_, compiler::Signatures::CCTOR, allocator_);
269 ArenaVector<ir::Statement *> statements(allocator_->Adapter());
271 auto *body = NodeAllocator::Alloc<ir::BlockStatement>(allocator_, allocator_, std::move(statements));
272 auto *func = NodeAllocator::Alloc<ir::ScriptFunction>(
274 ir::ScriptFunction::ScriptFunctionData {body, ir::FunctionSignature(nullptr, std::move(params), nullptr),
275 ir::ScriptFunctionFlags::STATIC_BLOCK | ir::ScriptFunctionFlags::HIDDEN,
276 ir::ModifierFlags::STATIC, false, Language(Language::Id::ETS)});
280 auto *funcExpr = NodeAllocator::Alloc<ir::FunctionExpression>(allocator_, func);
281 auto *staticBlock = NodeAllocator::Alloc<ir::ClassStaticBlock>(allocator_, funcExpr, allocator_);
282 staticBlock->AddModifier(ir::ModifierFlags::STATIC);
287 ArenaVector<ir::Statement *> GlobalClassHandler::CollectProgramGlobalStatements(parser::Program *program,
288 ir::ClassDefinition *classDef,
294 classDef->AddProperties(util::Helpers::ConvertVector<ir::AstNode>(statements.classProperties));
299 ir::ClassDeclaration *GlobalClassHandler::CreateGlobalClass()
301 auto *ident = NodeAllocator::Alloc<ir::Identifier>(allocator_, compiler::Signatures::ETS_GLOBAL, allocator_);
304 NodeAllocator::Alloc<ir::ClassDefinition>(allocator_, allocator_, ident, ir::ClassDefinitionModifiers::GLOBAL,
305 ir::ModifierFlags::ABSTRACT, Language(Language::Id::ETS));
306 auto *classDecl = NodeAllocator::Alloc<ir::ClassDeclaration>(allocator_, classDef, allocator_);
310 void GlobalClassHandler::SetupGlobalMethods(parser::Program *program, ArenaVector<ir::Statement *> &&initStatements,
313 ir::ClassDefinition *const globalClass = program->GlobalClass();
315 auto const insertInGlobal = [globalClass](ir::AstNode *node) {
322 ir::MethodDefinition *initMethod =
333 ir::MethodDefinition *mainMethod =
334 CreateGlobalMethod(compiler::Signatures::MAIN, ArenaVector<ir::Statement *>(allocator_->Adapter()));