polserver/pol-core/bscript/compiler/astbuilder/ModuleProcessor.cpp
Eric Swanson 86c0efbc21
Build AST nodes for module function declarations (#239)
Adds enough to build the AST nodes for the module function declarations in a .em file.

Adds:

- Function: base class for module function declarations and user functions
- FunctionParameterDeclaration: declaration for a function parameter, as well as its default value if any
- FunctionParameterList: just a holder for function parameter declarations
- ModuleFunctionDeclaration: for function declarations in .em files
- FunctionResolver: hooks up function calls to module functions or user functions
- ModuleProcessor: a visitor for processing const declarations and module function declarations (const declarations are yet to come from the main branch)
2020-08-23 15:01:39 -07:00

37 lines
1.2 KiB
C++

#include "ModuleProcessor.h"
#include "compiler/Profile.h"
#include "compiler/ast/ModuleFunctionDeclaration.h"
#include "compiler/astbuilder/BuilderWorkspace.h"
#include "compiler/file/SourceFile.h"
#include "compiler/model/CompilerWorkspace.h"
namespace Pol::Bscript::Compiler
{
ModuleProcessor::ModuleProcessor( const SourceFileIdentifier& source_file_identifier,
BuilderWorkspace& workspace, std::string modulename )
: profile( workspace.profile ),
report( workspace.report ),
source_file_identifier( source_file_identifier ),
workspace( workspace ),
tree_builder( source_file_identifier, workspace ),
modulename( std::move( modulename ) )
{
}
antlrcpp::Any ModuleProcessor::visitModuleDeclarationStatement(
EscriptGrammar::EscriptParser::ModuleDeclarationStatementContext* ctx )
{
if ( auto moduleFunctionDeclaration = ctx->moduleFunctionDeclaration() )
{
auto ast =
tree_builder.module_function_declaration( moduleFunctionDeclaration, modulename );
workspace.function_resolver.register_module_function( ast.get() );
workspace.compiler_workspace.module_function_declarations.push_back( std::move( ast ) );
}
return antlrcpp::Any();
}
} // namespace Pol::Bscript::Compiler