Spicy
Public Member Functions | List of all members
hilti::detail::CodeGen Class Reference

#include <codegen.h>

Public Member Functions

 CodeGen (const std::shared_ptr< Context > &context)
 
Result< cxx::UnitcompileModule (Node &root, hilti::Unit *hilti_unit, bool include_implementation)
 
Result< cxx::UnitlinkUnits (const std::vector< cxx::linker::MetaData > &mds)
 
std::shared_ptr< Contextcontext () const
 
const Optionsoptions () const
 
std::optional< cxx::declaration::TypetypeDeclaration (const hilti::Type &t)
 
std::list< cxx::declaration::TypetypeDependencies (const hilti::Type &t)
 
cxx::Type compile (const hilti::Type &t, codegen::TypeUsage usage)
 
cxx::Expression compile (const hilti::Expression &e, bool lhs=false)
 
cxx::Expression compile (const hilti::Ctor &c, bool lhs=false)
 
cxx::Expression compile (const hilti::expression::ResolvedOperator &o, bool lhs=false)
 
cxx::Block compile (const hilti::Statement &s, cxx::Block *b=nullptr)
 
cxx::declaration::Function compile (const ID &id, type::Function ft, declaration::Linkage linkage, function::CallingConvention cc=function::CallingConvention::Standard, const std::optional< AttributeSet > &fattrs={}, std::optional< cxx::ID > namespace_={})
 
std::vector< cxx::ExpressioncompileCallArguments (const hilti::node::Range< Expression > &args, const hilti::node::Set< declaration::Parameter > &params)
 
std::vector< cxx::ExpressioncompileCallArguments (const hilti::node::Range< Expression > &args, const hilti::node::Range< declaration::Parameter > &params)
 
std::optional< cxx::ExpressiontypeDefaultValue (const hilti::Type &t)
 
codegen::TypeUsage parameterKindToTypeUsage (declaration::parameter::Kind)
 
cxx::Expression typeInfo (const hilti::Type &t)
 
void addTypeInfoDefinition (const hilti::Type &t)
 
cxx::Expression coerce (const cxx::Expression &e, const Type &src, const Type &dst)
 
cxx::Expression pack (const Expression &data, const std::vector< Expression > &args)
 
cxx::Expression pack (const hilti::Type &t, const cxx::Expression &data, const std::vector< cxx::Expression > &args)
 
cxx::Expression unpack (const hilti::Type &t, const Expression &data, const std::vector< Expression > &args, bool throw_on_error)
 
cxx::Expression unpack (const hilti::Type &t, const cxx::Expression &data, const std::vector< cxx::Expression > &args, bool throw_on_error)
 
void addDeclarationFor (const hilti::Type &t)
 
cxx::Expression addTmp (const std::string &prefix, const cxx::Type &t)
 
cxx::Expression addTmp (const std::string &prefix, const cxx::Expression &init)
 
cxx::ID uniqueID (const std::string &prefix, const Node &n)
 
cxx::Expression self () const
 
cxx::Expression dollardollar () const
 
void pushSelf (detail::cxx::Expression e)
 
void popSelf ()
 
auto cxxBlock () const
 
void pushCxxBlock (cxx::Block *b)
 
void popCxxBlock ()
 
void enablePrioritizeTypes ()
 
void disablePrioritizeTypes ()
 
bool prioritizeTypes () const
 
cxx::Unitunit () const
 
hilti::UnithiltiUnit () const
 

Detailed Description

HILTI's code generator. This is the main internal entry point for generating C++ code from HILTI source code.

Member Function Documentation

◆ compileModule()

Result< cxx::Unit > CodeGen::compileModule ( Node root,
hilti::Unit hilti_unit,
bool  include_implementation 
)

Entry point for code generation.

◆ linkUnits()

Result< cxx::Unit > CodeGen::linkUnits ( const std::vector< cxx::linker::MetaData > &  mds)

Entry point for generating additional cross-unit C++ code through HILTI's linker.

◆ uniqueID()

cxx::ID CodeGen::uniqueID ( const std::string &  prefix,
const Node n 
)

Returns an ID that's unique for a given node. The ID is derived from the node's location information, which must be present.

Parameters
prefixconstant prefix that will be added to ID
nnode to generate the ID for

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