20 std::vector < std::pair < abstraction::TypeQualifiers::TypeQualifierSet, std::unique_ptr < Arg > > > m_params;
21 std::pair < abstraction::TypeQualifiers::TypeQualifierSet, std::unique_ptr < Arg > > m_result;
22 std::shared_ptr < Command > m_body;
32 std::vector < std::pair < abstraction::TypeQualifiers::TypeQualifierSet, std::string > > params;
36 params.emplace_back ( param.first, param.second->eval ( environment ) );
37 paramSpecs.emplace_back ( std::string (
"auto" ), param.first, param.second->eval ( environment ) );
41 std::shared_ptr < Command > body = m_body;
43 std::function < std::shared_ptr < abstraction::Value > (
const std::vector < std::shared_ptr < abstraction::Value > > & ) >
callback = [ = ] (
const std::vector < std::shared_ptr < abstraction::Value > > & actualParams ) {
45 newEnvironment.
setResult ( std::make_shared < abstraction::Void > ( ) );
46 for (
const ext::tuple <
const std::shared_ptr < abstraction::Value > &,
const std::pair < abstraction::TypeQualifiers::TypeQualifierSet, std::string > & > & params_bind :
ext::make_tuple_foreach ( actualParams, params ) ) {
47 std::shared_ptr < abstraction::Value >
res = std::get < 0 > ( params_bind )->clone ( std::get < 1 > ( params_bind ).first,
false );
51 body->run ( newEnvironment );
52 std::shared_ptr < abstraction::Value >
result = newEnvironment.
getResult ( );
54 if ( resultSpec.first ==
"void" &&
result->getType ( ) !=
"void" )
55 throw std::logic_error (
"Non void type returned from void routine" );
57 if (
result->getType ( ) !=
"void" ) {
59 result =
result->clone ( resultSpec.second, ! isResultLvalueRef );
static void registerRaw(std::shared_ptr< abstraction::Value >(*callback)(const std::vector< std::shared_ptr< abstraction::Value > > &), ext::pair< std::string, abstraction::TypeQualifiers::TypeQualifierSet > result, ext::vector< ext::tuple< std::string, abstraction::TypeQualifiers::TypeQualifierSet, std::string > > paramSpecs)
Definition: AlgorithmRegistry.hpp:206
TypeQualifierSet
Definition: TypeQualifiers.hpp:15
static constexpr bool isLvalueRef(TypeQualifierSet arg)
Definition: TypeQualifiers.hpp:47
Definition: DeclareRunnableCommand.h:18
DeclareRunnableCommand(std::string name, std::vector< std::pair< abstraction::TypeQualifiers::TypeQualifierSet, std::unique_ptr< Arg > > > params, std::shared_ptr< Command > body)
Definition: DeclareRunnableCommand.h:28
DeclareRunnableCommand(std::string name, std::vector< std::pair< abstraction::TypeQualifiers::TypeQualifierSet, std::unique_ptr< Arg > > > params, std::pair< abstraction::TypeQualifiers::TypeQualifierSet, std::unique_ptr< Arg > > result, std::shared_ptr< Command > body)
Definition: DeclareRunnableCommand.h:25
CommandResult run(Environment &environment) const override
Definition: DeclareRunnableCommand.h:31
Definition: Environment.h:29
void setVariable(std::string name, std::shared_ptr< abstraction::Value > value)
Definition: Environment.h:87
std::shared_ptr< abstraction::Value > getResult() const
Definition: Environment.h:105
void setResult(std::shared_ptr< abstraction::Value > value)
Definition: Environment.h:101
Class extending the pair class from the standard library. Original reason is to allow printing of the...
Definition: pair.hpp:43
Class extending the tuple class from the standard library. Original reason is to allow printing of th...
Definition: tuple.hpp:42
Class extending the vector class from the standard library. Original reason is to allow printing of t...
Definition: vector.hpp:45
Definition: AlgorithmAbstraction.hpp:11
p second
Definition: ToRegExpAlgebraic.h:126
return res
Definition: MinimizeByPartitioning.h:145
for(const StateType &state :fsm.getStates()) renamingData.insert(std Rename::RenamedAutomaton< T > result(renamingData.at(fsm.getInitialState()))
Definition: Rename.h:253
CommandResult
Definition: CommandResult.h:10
int callback(struct dl_phdr_info *info, size_t, void *data)
Definition: simpleStacktrace.cpp:25
const_tuple_foreach< Types ... > make_tuple_foreach(const Types &... args)
Function construction of foreach tuple pack helper.
Definition: foreach.hpp:280
constexpr auto make_pair(T1 &&x, T2 &&y)
Definition: pair.hpp:79
Definition: FordFulkerson.hpp:16