ArkScript
A small, lisp-inspired, functional scripting language
Ark::Welder Class Referencefinal

The welder joins all the compiler passes. More...

#include <Welder.hpp>

Collaboration diagram for Ark::Welder:
[legend]

Public Member Functions

 Welder (unsigned debug, const std::vector< std::filesystem::path > &lib_env, uint16_t features=DefaultFeatures)
 Create a new Welder.
 
void registerSymbol (const std::string &name)
 Register a symbol as a global in the compiler.
 
bool computeASTFromFile (const std::string &filename)
 
bool computeASTFromString (const std::string &code)
 
bool computeASTFromStringWithKnownSymbols (const std::string &code, const std::vector< std::string > &symbols)
 Compile code from a string, with a set of known symbols (useful for the debugger)
 
bool generateBytecode ()
 Compile the AST processed by computeASTFromFile / computeASTFromString.
 
bool generateBytecodeUsingTables (const std::vector< std::string > &symbols, const std::vector< Value > &constants, std::size_t start_page_at_offset)
 Compile the AST processed by computeASTFromFile / computeASTFromString, with prefilled symbols and constants tables (useful for the debugger)
 
bool saveBytecodeToFile (const std::string &filename)
 Save the generated bytecode to a given file.
 
void redirectLogsTo (std::ostream &os)
 Redirect the logs to a given stream.
 
const internal::Nodeast () const noexcept
 
std::string textualIR () const noexcept
 
const bytecode_tbytecode () const noexcept
 

Private Member Functions

void dumpIRToFile () const
 
bool computeAST (const std::string &filename, const std::string &code)
 

Private Attributes

std::vector< std::filesystem::path > m_lib_env
 
uint16_t m_features
 
std::filesystem::path m_root_file
 
std::vector< std::string > m_imports
 
std::vector< internal::IR::Blockm_ir
 
bytecode_t m_bytecode
 
internal::Node m_computed_ast
 
internal::Parser m_parser
 
internal::ImportSolver m_import_solver
 
internal::MacroProcessor m_macro_processor
 
internal::Optimizer m_ast_optimizer
 
internal::NameResolutionPass m_name_resolver
 
internal::Logger m_logger
 
internal::ASTLowerer m_lowerer
 
internal::IROptimizer m_ir_optimizer
 
internal::IRCompiler m_ir_compiler
 

Detailed Description

The welder joins all the compiler passes.

Definition at line 38 of file Welder.hpp.

Constructor & Destructor Documentation

◆ Welder()

Ark::Welder::Welder ( unsigned debug,
const std::vector< std::filesystem::path > & lib_env,
uint16_t features = DefaultFeatures )

Create a new Welder.

Parameters
debugdebug level
lib_envlist of paths to the standard library
featuresfeature flags to toggle features on/off

Definition at line 19 of file Welder.cpp.

Member Function Documentation

◆ ast()

const internal::Node & Ark::Welder::ast ( ) const
nodiscardnoexcept

Definition at line 150 of file Welder.cpp.

References m_computed_ast.

Referenced by JsonCompiler::compile().

◆ bytecode()

const bytecode_t & Ark::Welder::bytecode ( ) const
nodiscardnoexcept

◆ computeAST()

◆ computeASTFromFile()

bool Ark::Welder::computeASTFromFile ( const std::string & filename)
Parameters
filename
Returns
true on success

Definition at line 38 of file Welder.cpp.

References computeAST(), m_root_file, and Ark::Utils::readFile().

Referenced by Ark::State::compile(), JsonCompiler::feed(), and main().

◆ computeASTFromString()

bool Ark::Welder::computeASTFromString ( const std::string & code)
Parameters
code
Returns
true on success

Definition at line 46 of file Welder.cpp.

References ARK_NO_NAME_FILE, computeAST(), and m_root_file.

Referenced by Ark::State::doString().

◆ computeASTFromStringWithKnownSymbols()

bool Ark::Welder::computeASTFromStringWithKnownSymbols ( const std::string & code,
const std::vector< std::string > & symbols )

Compile code from a string, with a set of known symbols (useful for the debugger)

Parameters
code
symbols
Returns
true on success

Definition at line 53 of file Welder.cpp.

References Ark::internal::NameResolutionPass::addDefinedSymbol(), ARK_NO_NAME_FILE, computeAST(), m_name_resolver, and m_root_file.

Referenced by Ark::internal::Debugger::compile().

◆ dumpIRToFile()

void Ark::Welder::dumpIRToFile ( ) const
private

◆ generateBytecode()

◆ generateBytecodeUsingTables()

bool Ark::Welder::generateBytecodeUsingTables ( const std::vector< std::string > & symbols,
const std::vector< Value > & constants,
std::size_t start_page_at_offset )

Compile the AST processed by computeASTFromFile / computeASTFromString, with prefilled symbols and constants tables (useful for the debugger)

Parameters
symbols
constants
start_page_at_offset
Returns
true on success

Definition at line 93 of file Welder.cpp.

References Ark::internal::ASTLowerer::addToTables(), generateBytecode(), m_lowerer, Ark::Number, Ark::internal::ASTLowerer::offsetPagesBy(), Ark::PageAddr, and Ark::String.

Referenced by Ark::internal::Debugger::compile().

◆ redirectLogsTo()

void Ark::Welder::redirectLogsTo ( std::ostream & os)

◆ registerSymbol()

void Ark::Welder::registerSymbol ( const std::string & name)

Register a symbol as a global in the compiler.

Parameters
name

Definition at line 33 of file Welder.cpp.

References Ark::internal::NameResolutionPass::addDefinedSymbol(), and m_name_resolver.

Referenced by Ark::State::compile(), and Ark::State::doString().

◆ saveBytecodeToFile()

bool Ark::Welder::saveBytecodeToFile ( const std::string & filename)

Save the generated bytecode to a given file.

Parameters
filename
Returns
true on success

Definition at line 123 of file Welder.cpp.

References Ark::internal::Logger::info(), m_bytecode, and m_logger.

Referenced by Ark::State::compile().

◆ textualIR()

std::string Ark::Welder::textualIR ( ) const
nodiscardnoexcept

Definition at line 155 of file Welder.cpp.

References Ark::internal::IRCompiler::dumpToStream(), and m_ir_compiler.

Member Data Documentation

◆ m_ast_optimizer

internal::Optimizer Ark::Welder::m_ast_optimizer
private

Definition at line 126 of file Welder.hpp.

Referenced by computeAST(), and redirectLogsTo().

◆ m_bytecode

bytecode_t Ark::Welder::m_bytecode
private

Definition at line 120 of file Welder.hpp.

Referenced by bytecode(), generateBytecode(), and saveBytecodeToFile().

◆ m_computed_ast

internal::Node Ark::Welder::m_computed_ast
private

Definition at line 121 of file Welder.hpp.

Referenced by ast(), computeAST(), and generateBytecode().

◆ m_features

uint16_t Ark::Welder::m_features
private

Definition at line 115 of file Welder.hpp.

Referenced by computeAST(), and generateBytecode().

◆ m_import_solver

internal::ImportSolver Ark::Welder::m_import_solver
private

Definition at line 124 of file Welder.hpp.

Referenced by computeAST(), and redirectLogsTo().

◆ m_imports

std::vector<std::string> Ark::Welder::m_imports
private

Definition at line 118 of file Welder.hpp.

◆ m_ir

std::vector<internal::IR::Block> Ark::Welder::m_ir
private

Definition at line 119 of file Welder.hpp.

Referenced by generateBytecode().

◆ m_ir_compiler

internal::IRCompiler Ark::Welder::m_ir_compiler
private

Definition at line 132 of file Welder.hpp.

Referenced by dumpIRToFile(), generateBytecode(), redirectLogsTo(), and textualIR().

◆ m_ir_optimizer

internal::IROptimizer Ark::Welder::m_ir_optimizer
private

Definition at line 131 of file Welder.hpp.

Referenced by generateBytecode(), and redirectLogsTo().

◆ m_lib_env

std::vector<std::filesystem::path> Ark::Welder::m_lib_env
private

Definition at line 114 of file Welder.hpp.

◆ m_logger

internal::Logger Ark::Welder::m_logger
private

Definition at line 129 of file Welder.hpp.

Referenced by redirectLogsTo(), and saveBytecodeToFile().

◆ m_lowerer

internal::ASTLowerer Ark::Welder::m_lowerer
private

Definition at line 130 of file Welder.hpp.

Referenced by generateBytecode(), generateBytecodeUsingTables(), and redirectLogsTo().

◆ m_macro_processor

internal::MacroProcessor Ark::Welder::m_macro_processor
private

Definition at line 125 of file Welder.hpp.

Referenced by computeAST(), and redirectLogsTo().

◆ m_name_resolver

internal::NameResolutionPass Ark::Welder::m_name_resolver
private

◆ m_parser

internal::Parser Ark::Welder::m_parser
private

Definition at line 123 of file Welder.hpp.

Referenced by computeAST().

◆ m_root_file

std::filesystem::path Ark::Welder::m_root_file
private

The documentation for this class was generated from the following files: