hobbes
a language, embedded compiler, and runtime for efficient dynamic expression evaluation, data storage and analysis
Public Types | Public Member Functions | Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
hobbes::cc Class Reference

#include <cc.H>

Inheritance diagram for hobbes::cc:
Inheritance graph
Collaboration diagram for hobbes::cc:
Collaboration graph

Public Types

typedef ModulePtr(* readModuleFileFn) (cc *, const std::string &)
 
typedef ModulePtr(* readModuleFn) (cc *, const std::string &)
 
typedef std::pair< std::string, ExprPtr >(* readExprDefnFn) (cc *, const std::string &)
 
typedef ExprPtr(* readExprFn) (cc *, const std::string &)
 
typedef std::vector< unsigned char > bytes
 

Public Member Functions

 cc ()
 
virtual ~cc ()
 
ModulePtr readModuleFile (const std::string &)
 
void setReadModuleFileFn (readModuleFileFn)
 
ModulePtr readModule (const std::string &)
 
void setReadModuleFn (readModuleFn)
 
std::pair< std::string, ExprPtrreadExprDefn (const std::string &)
 
void setReadExprDefnFn (readExprDefnFn)
 
ExprPtr readExpr (const std::string &)
 
void setReadExprFn (readExprFn)
 
template<typename RFn , typename ... NamesAndExpr>
func< RFn >::type compileFn (NamesAndExpr ... args)
 
ExprPtr unsweetenExpression (const TEnvPtr &te, const ExprPtr &e)
 
ExprPtr unsweetenExpression (const TEnvPtr &te, const std::string &vname, const ExprPtr &e)
 
ExprPtr unsweetenExpression (const ExprPtr &e)
 
ExprPtr unsweetenExpression (const std::string &vname, const ExprPtr &e)
 
ExprPtr normalize (const ExprPtr &e)
 
llvm::IRBuilder * builder () const
 
llvm::Module * module () const
 
void dumpTypeEnv () const
 
void dumpTypeEnv (str::seq *syms, str::seq *types) const
 
std::string showTypeEnv () const
 
const TEnvPtrtypeEnv () const
 
void forwardDeclare (const std::string &vname, const QualTypePtr &qt)
 
bool hasValueBinding (const std::string &vname)
 
void drainUnqualifyDefs (const Definitions &ds)
 
void define (const std::string &vname, const ExprPtr &e)
 
void define (const std::string &vname, const std::string &expr)
 
void overload (const std::string &, const MonoTypes &)
 
void overload (const std::string &, const MonoTypes &, const ExprPtr &)
 
void overload (const std::string &, const MonoTypes &, const std::string &)
 
void addInstance (const TClassPtr &, const TCInstancePtr &)
 
void dumpModule ()
 
bytes machineCodeForExpr (const std::string &expr)
 
template<typename T >
void addObj ()
 
template<typename T >
PolyTypePtr liftType ()
 
template<typename T >
MonoTypePtr liftMonoType ()
 
void bind (const PolyTypePtr &tn, const std::string &vn, void *x)
 
template<typename T >
void bind (const std::string &vn, T *x)
 
template<typename T , int N>
void bindArr (const std::string &vn, T x[N])
 
template<typename R , typename ... Args>
void bind (const std::string &fn, R(*pfn)(Args...))
 
void defineTypeAlias (const std::string &name, const str::seq &argNames, const MonoTypePtr &ty)
 
bool isTypeAliasName (const std::string &name) const
 
MonoTypePtr replaceTypeAliases (const MonoTypePtr &ty) const
 
PolyTypePtr opaquePtrPolyType (const std::type_info &ti, unsigned int sz, bool inStruct)
 
MonoTypePtr opaquePtrMonoType (const std::type_info &ti, unsigned int sz, bool inStruct)
 
PolyTypePtr generalize (const MonoTypePtr &mt) const
 
MonoTypePtr defineNamedType (const std::string &name, const str::seq &argNames, const MonoTypePtr &ty)
 
bool isTypeName (const std::string &) const
 
MonoTypePtr namedTypeRepresentation (const std::string &) const
 
void * unsafeCompileFn (const MonoTypePtr &retTy, const str::seq &names, const MonoTypes &argTys, const ExprPtr &exp)
 
void * unsafeCompileFn (const MonoTypePtr &fnTy, const str::seq &names, const ExprPtr &exp)
 
void * unsafeCompileFn (const MonoTypePtr &fnTy, const str::seq &names, const std::string &exp)
 
void releaseMachineCode (void *)
 
void enableModuleInlining (bool f)
 
bool enableModuleInlining () const
 
void buildInterpretedMatches (bool f)
 
bool buildInterpretedMatches () const
 
void requireMatchReachability (bool f)
 
bool requireMatchReachability () const
 
void alwaysLowerPrimMatchTables (bool)
 
bool alwaysLowerPrimMatchTables () const
 
void bindLLFunc (const std::string &, op *)
 
void bindExternFunction (const std::string &fname, const MonoTypePtr &fty, void *fn)
 
bool preludeLoaded () const
 

Public Attributes

bool drainingDefs
 
LetRec::Bindings drainDefs
 
UnreachableMatchRowsPtr unreachableMatchRowsPtr
 

Private Types

typedef std::pair< str::seq, MonoTypePtrTTyDef
 
typedef std::unordered_map< std::string, TTyDefTTyDefs
 

Private Member Functions

PolyTypePtr lookupVarType (const std::string &vname) const
 
void definePolyValue (const std::string &vname, const ExprPtr &unsweetExp)
 
 cc (const cc &)
 
void operator= (const cc &)
 

Private Attributes

readModuleFileFn readModuleFileF
 
readModuleFn readModuleF
 
readExprDefnFn readExprDefnF
 
readExprFn readExprF
 
TTyDefs ttyDefs
 
jitcc jit
 
bool runModInlinePass
 
bool genInterpretedMatch
 
bool checkMatchReachability
 
bool lowerPrimMatchTables
 
TEnvPtr tenv
 
TypeAliasMap typeAliases
 
bool booted
 
ObjsPtr objs
 

Member Typedef Documentation

◆ bytes

typedef std::vector<unsigned char> hobbes::cc::bytes

◆ readExprDefnFn

typedef std::pair<std::string, ExprPtr>(* hobbes::cc::readExprDefnFn) (cc *, const std::string &)

◆ readExprFn

typedef ExprPtr(* hobbes::cc::readExprFn) (cc *, const std::string &)

◆ readModuleFileFn

typedef ModulePtr(* hobbes::cc::readModuleFileFn) (cc *, const std::string &)

◆ readModuleFn

typedef ModulePtr(* hobbes::cc::readModuleFn) (cc *, const std::string &)

◆ TTyDef

typedef std::pair<str::seq, MonoTypePtr> hobbes::cc::TTyDef
private

◆ TTyDefs

typedef std::unordered_map<std::string, TTyDef> hobbes::cc::TTyDefs
private

Constructor & Destructor Documentation

◆ cc() [1/2]

hobbes::cc::cc ( )

◆ ~cc()

hobbes::cc::~cc ( )
virtual

◆ cc() [2/2]

hobbes::cc::cc ( const cc )
private

Member Function Documentation

◆ addInstance()

void hobbes::cc::addInstance ( const TClassPtr c,
const TCInstancePtr i 
)

◆ addObj()

template<typename T >
void hobbes::cc::addObj ( )
inline

◆ alwaysLowerPrimMatchTables() [1/2]

void hobbes::cc::alwaysLowerPrimMatchTables ( bool  f)

◆ alwaysLowerPrimMatchTables() [2/2]

bool hobbes::cc::alwaysLowerPrimMatchTables ( ) const

◆ bind() [1/3]

void hobbes::cc::bind ( const PolyTypePtr tn,
const std::string &  vn,
void *  x 
)

◆ bind() [2/3]

template<typename T >
void hobbes::cc::bind ( const std::string &  vn,
T *  x 
)
inline

◆ bind() [3/3]

template<typename R , typename ... Args>
void hobbes::cc::bind ( const std::string &  fn,
R(*)(Args...)  pfn 
)
inline

◆ bindArr()

template<typename T , int N>
void hobbes::cc::bindArr ( const std::string &  vn,
x[N] 
)
inline

◆ bindExternFunction()

void hobbes::cc::bindExternFunction ( const std::string &  fname,
const MonoTypePtr fty,
void *  fn 
)

◆ bindLLFunc()

void hobbes::cc::bindLLFunc ( const std::string &  fname,
op f 
)

◆ builder()

llvm::IRBuilder * hobbes::cc::builder ( ) const

◆ buildInterpretedMatches() [1/2]

void hobbes::cc::buildInterpretedMatches ( bool  f)

◆ buildInterpretedMatches() [2/2]

bool hobbes::cc::buildInterpretedMatches ( ) const

◆ compileFn()

template<typename RFn , typename ... NamesAndExpr>
func<RFn>::type hobbes::cc::compileFn ( NamesAndExpr ...  args)
inline

◆ define() [1/2]

void hobbes::cc::define ( const std::string &  vname,
const ExprPtr e 
)

◆ define() [2/2]

void hobbes::cc::define ( const std::string &  vname,
const std::string &  expr 
)

◆ defineNamedType()

MonoTypePtr hobbes::cc::defineNamedType ( const std::string &  name,
const str::seq argNames,
const MonoTypePtr ty 
)
virtual

Implements hobbes::typedb.

◆ definePolyValue()

void hobbes::cc::definePolyValue ( const std::string &  vname,
const ExprPtr unsweetExp 
)
private

◆ defineTypeAlias()

void hobbes::cc::defineTypeAlias ( const std::string &  name,
const str::seq argNames,
const MonoTypePtr ty 
)
virtual

Implements hobbes::typedb.

◆ drainUnqualifyDefs()

void hobbes::cc::drainUnqualifyDefs ( const Definitions ds)

◆ dumpModule()

void hobbes::cc::dumpModule ( )

◆ dumpTypeEnv() [1/2]

void hobbes::cc::dumpTypeEnv ( ) const

◆ dumpTypeEnv() [2/2]

void hobbes::cc::dumpTypeEnv ( str::seq syms,
str::seq types 
) const

◆ enableModuleInlining() [1/2]

void hobbes::cc::enableModuleInlining ( bool  f)

◆ enableModuleInlining() [2/2]

bool hobbes::cc::enableModuleInlining ( ) const

◆ forwardDeclare()

void hobbes::cc::forwardDeclare ( const std::string &  vname,
const QualTypePtr qt 
)

◆ generalize()

PolyTypePtr hobbes::cc::generalize ( const MonoTypePtr mt) const
virtual

Implements hobbes::typedb.

◆ hasValueBinding()

bool hobbes::cc::hasValueBinding ( const std::string &  vname)

◆ isTypeAliasName()

bool hobbes::cc::isTypeAliasName ( const std::string &  name) const
virtual

Implements hobbes::typedb.

◆ isTypeName()

bool hobbes::cc::isTypeName ( const std::string &  tn) const
virtual

Implements hobbes::typedb.

◆ liftMonoType()

template<typename T >
MonoTypePtr hobbes::cc::liftMonoType ( )
inline

◆ liftType()

template<typename T >
PolyTypePtr hobbes::cc::liftType ( )
inline

◆ lookupVarType()

PolyTypePtr hobbes::cc::lookupVarType ( const std::string &  vname) const
private

◆ machineCodeForExpr()

cc::bytes hobbes::cc::machineCodeForExpr ( const std::string &  expr)

◆ module()

llvm::Module * hobbes::cc::module ( ) const

◆ namedTypeRepresentation()

MonoTypePtr hobbes::cc::namedTypeRepresentation ( const std::string &  tn) const
virtual

Implements hobbes::typedb.

◆ normalize()

ExprPtr hobbes::cc::normalize ( const ExprPtr e)

◆ opaquePtrMonoType()

MonoTypePtr hobbes::cc::opaquePtrMonoType ( const std::type_info &  ti,
unsigned int  sz,
bool  inStruct 
)
virtual

Implements hobbes::typedb.

◆ opaquePtrPolyType()

PolyTypePtr hobbes::cc::opaquePtrPolyType ( const std::type_info &  ti,
unsigned int  sz,
bool  inStruct 
)
virtual

Implements hobbes::typedb.

◆ operator=()

void hobbes::cc::operator= ( const cc )
private

◆ overload() [1/3]

void hobbes::cc::overload ( const std::string &  tyclass,
const MonoTypes tys 
)

◆ overload() [2/3]

void hobbes::cc::overload ( const std::string &  tyclass,
const MonoTypes tys,
const ExprPtr e 
)

◆ overload() [3/3]

void hobbes::cc::overload ( const std::string &  tyclass,
const MonoTypes tys,
const std::string &  v 
)

◆ preludeLoaded()

bool hobbes::cc::preludeLoaded ( ) const

◆ readExpr()

ExprPtr hobbes::cc::readExpr ( const std::string &  x)

◆ readExprDefn()

std::pair< std::string, ExprPtr > hobbes::cc::readExprDefn ( const std::string &  x)

◆ readModule()

ModulePtr hobbes::cc::readModule ( const std::string &  x)

◆ readModuleFile()

ModulePtr hobbes::cc::readModuleFile ( const std::string &  x)

◆ releaseMachineCode()

void hobbes::cc::releaseMachineCode ( void *  f)

◆ replaceTypeAliases()

MonoTypePtr hobbes::cc::replaceTypeAliases ( const MonoTypePtr ty) const
virtual

Implements hobbes::typedb.

◆ requireMatchReachability() [1/2]

void hobbes::cc::requireMatchReachability ( bool  f)

◆ requireMatchReachability() [2/2]

bool hobbes::cc::requireMatchReachability ( ) const

◆ setReadExprDefnFn()

void hobbes::cc::setReadExprDefnFn ( readExprDefnFn  f)

◆ setReadExprFn()

void hobbes::cc::setReadExprFn ( readExprFn  f)

◆ setReadModuleFileFn()

void hobbes::cc::setReadModuleFileFn ( readModuleFileFn  f)

◆ setReadModuleFn()

void hobbes::cc::setReadModuleFn ( readModuleFn  f)

◆ showTypeEnv()

std::string hobbes::cc::showTypeEnv ( ) const

◆ typeEnv()

const TEnvPtr & hobbes::cc::typeEnv ( ) const

◆ unsafeCompileFn() [1/3]

void * hobbes::cc::unsafeCompileFn ( const MonoTypePtr retTy,
const str::seq names,
const MonoTypes argTys,
const ExprPtr exp 
)

◆ unsafeCompileFn() [2/3]

void * hobbes::cc::unsafeCompileFn ( const MonoTypePtr fnTy,
const str::seq names,
const ExprPtr exp 
)

◆ unsafeCompileFn() [3/3]

void * hobbes::cc::unsafeCompileFn ( const MonoTypePtr fnTy,
const str::seq names,
const std::string &  exp 
)

◆ unsweetenExpression() [1/4]

ExprPtr hobbes::cc::unsweetenExpression ( const TEnvPtr te,
const ExprPtr e 
)

◆ unsweetenExpression() [2/4]

ExprPtr hobbes::cc::unsweetenExpression ( const TEnvPtr te,
const std::string &  vname,
const ExprPtr e 
)

◆ unsweetenExpression() [3/4]

ExprPtr hobbes::cc::unsweetenExpression ( const ExprPtr e)

◆ unsweetenExpression() [4/4]

ExprPtr hobbes::cc::unsweetenExpression ( const std::string &  vname,
const ExprPtr e 
)

Member Data Documentation

◆ booted

bool hobbes::cc::booted
private

◆ checkMatchReachability

bool hobbes::cc::checkMatchReachability
private

◆ drainDefs

LetRec::Bindings hobbes::cc::drainDefs

◆ drainingDefs

bool hobbes::cc::drainingDefs

◆ genInterpretedMatch

bool hobbes::cc::genInterpretedMatch
private

◆ jit

jitcc hobbes::cc::jit
private

◆ lowerPrimMatchTables

bool hobbes::cc::lowerPrimMatchTables
private

◆ objs

ObjsPtr hobbes::cc::objs
private

◆ readExprDefnF

readExprDefnFn hobbes::cc::readExprDefnF
private

◆ readExprF

readExprFn hobbes::cc::readExprF
private

◆ readModuleF

readModuleFn hobbes::cc::readModuleF
private

◆ readModuleFileF

readModuleFileFn hobbes::cc::readModuleFileF
private

◆ runModInlinePass

bool hobbes::cc::runModInlinePass
private

◆ tenv

TEnvPtr hobbes::cc::tenv
private

◆ ttyDefs

TTyDefs hobbes::cc::ttyDefs
private

◆ typeAliases

TypeAliasMap hobbes::cc::typeAliases
private

◆ unreachableMatchRowsPtr

UnreachableMatchRowsPtr hobbes::cc::unreachableMatchRowsPtr

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