kolibrios-gitea/contrib/media/updf/include/lispevalhash.h

47 lines
1.1 KiB
C
Raw Normal View History

/** \file lispevalhash.h
* Storage of executable commands
*
*/
#ifndef __lispevalhash_h__
#define __lispevalhash_h__
#include "yacasbase.h"
#include "lispobject.h"
#include "lisphash.h"
#include "evalfunc.h"
// new-style evaluator, passing arguments onto the stack in LispEnvironment
typedef void (*YacasEvalCaller)(LispEnvironment& aEnvironment,LispInt aStackTop);
class YacasEvaluator : public EvalFuncBase
{
public:
// FunctionFlags can be orred when passed to the constructor of this function
enum FunctionFlags
{
Function=0, // Function: evaluate arguments
Macro=1, // Function: don't evaluate arguments
Fixed = 0, // fixed number of arguments
Variable = 2 // variable number of arguments
};
YacasEvaluator(YacasEvalCaller aCaller,LispInt aNrArgs, LispInt aFlags)
: iCaller(aCaller), iNrArgs(aNrArgs), iFlags(aFlags)
{
}
virtual void Evaluate(LispPtr& aResult,LispEnvironment& aEnvironment,
LispPtr& aArguments);
private:
YacasEvalCaller iCaller;
LispInt iNrArgs;
LispInt iFlags;
};
class YacasCoreCommands : public LispAssociatedHash<YacasEvaluator>
{
};
#endif