1#ifndef ROSE_CodeGen_Factory_H
2#define ROSE_CodeGen_Factory_H
4#include <Rose/CodeGen/API.h>
6namespace Rose {
namespace CodeGen {
17template <
typename CRT,
typename API>
28template <
typename CRT,
typename apiT, Object otag>
31using tplargs_t = std::vector<SgTemplateArgument *>;
33template <
typename CRT,
typename API>
58 template <
Object otag,
typename... Args>
74 template <
Object otag,
typename... Args>
90 template <
Object otag,
typename... Args>
101 template <Object otag>
102 using access_return_t = std::conditional_t<otag == Object::a_class || otag == Object::a_typedef, SgType, SgExpression>;
104 template <Object otag, std::enable_if_t<otag == Object::a_
class || otag == Object::a_typedef> * =
nullptr>
107 template <Object otag, std::enable_if_t<otag != Object::a_
class && otag != Object::a_typedef> * =
nullptr>
122 template <
Object otag,
typename... Args>
128#include "Rose/CodeGen/factory/factory.txx"
129#include "Rose/CodeGen/factory/namespaces.txx"
130#include "Rose/CodeGen/factory/classes.txx"
131#include "Rose/CodeGen/factory/typedefs.txx"
132#include "Rose/CodeGen/factory/variables.txx"
133#include "Rose/CodeGen/factory/functions.txx"
permits to gather types and symbols to extract an API from a set of headers.
facilitates the manipulation of source-files (esp.
constructs expressions and types for the given API
reference_t< otag > * reference(symbol_t< otag > *API::*obj, SgNamedType *parent, Args... args) const
Return an expression or type referencing the object.
std::conditional_t< otag==Object::a_class||otag==Object::a_typedef, SgType, SgExpression > access_return_t
Select return type for access based on Object type.
declaration_t< otag > * instantiate(symbol_t< otag > *API::*obj, SgNamedType *parent, Args... args) const
Return an instantiation.
access_return_t< otag > * access(symbol_t< otag > *API::*obj, SgNamedType *parent, Args... args) const
Build expression or type to access static member and subtype of the parent type.
SgExpression * access(symbol_t< otag > *API::*obj, SgExpression *parent, Args... args) const
Build expression to access a member of the parent expression.
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
typename object_helper< otag >::symbol_t symbol_t
The SgSymbol specialization for an Object kind /tparam otag an Object kind.
typename object_helper< otag >::decl_t declaration_t
The SgDeclarationStatement specialization for an Object kind /tparam otag an Object kind.
typename object_helper< otag >::ref_t reference_t
The SgReference specialization for an Object kind /tparam otag an Object kind.
Object
The five kind of objects manipulated by Rose::CodeGen::API and associated Rose::CodeGen::Factory.
enables partial specializations w.r.t the template parameter otag