59
59
string return_value_str;
60
60
vector<string> return_str_stack;
62
GLESubArgNames::GLESubArgNames() :
63
m_ArgNames(new GLEStringHash())
67
void GLESubArgNames::addArgName(const char* argName) {
68
GLERC<GLEString> strArgName(new GLEString(argName));
69
m_ArgNames->setObjectByKey(strArgName, strArgName.get());
72
GLESubRoot::GLESubRoot(GLEString* name, GLESubArgNames* argNames) :
75
m_IgnoredArgNames(new GLEStringHash()),
76
m_Signatures(new GLEArrayImpl())
80
void GLESubRoot::updateArgNames(GLESubArgNames* argNames) {
83
GLESubSignature::GLESubSignature(GLESubRoot* root) :
85
m_Subroutines(new GLEArrayWithFreeList()),
86
m_Callables(new GLEArrayWithFreeList())
90
void GLECallable::execute(GLEArrayImpl* stack, unsigned int top) {
93
GLEArgTypeDefaults::GLEArgTypeDefaults(unsigned int arity) :
95
m_ArgTypes(new unsigned int[arity]),
96
m_Defaults(new GLEArrayImpl())
100
GLEArgTypeDefaults::~GLEArgTypeDefaults() {
104
GLEAbstractSub::GLEAbstractSub() :
109
void GLEAbstractSub::setArgTypeDefaults(GLEArgTypeDefaults* defaults) {
110
m_ArgTypeDefaults = defaults;
111
m_ArgTypes = m_ArgTypeDefaults->getArgTypes();
114
GLEBuiltInFactory::GLEBuiltInFactory(GLESubMap* map) :
117
// default binary argument names (x, y)
118
m_BinaryArgNamesXY = new GLESubArgNames();
119
m_BinaryArgNamesXY->addArgName("x");
120
m_BinaryArgNamesXY->addArgName("y");
121
// binary function with two double arguments
122
m_BinaryDoubleDoubleArgTypeDefaults = new GLEArgTypeDefaults(2);
123
m_BinaryDoubleDoubleArgTypeDefaults->setArgType(0, GLEObjectTypeDouble);
124
m_BinaryDoubleDoubleArgTypeDefaults->setArgType(1, GLEObjectTypeDouble);
127
GLESubArgNames* GLEBuiltInFactory::getBinaryArgNamesXY() {
128
return m_BinaryArgNamesXY.get();
131
GLEArgTypeDefaults* GLEBuiltInFactory::getBinaryDoubleDoubleArgTypeDefaults() {
132
return m_BinaryDoubleDoubleArgTypeDefaults.get();
135
GLESubRoot* GLEBuiltInFactory::createRoot(const char* name, GLESubArgNames* argNames)
137
return m_Map->createRoot(name, argNames);
62
140
GLESub::GLESub() {
63
141
m_ParentSub = NULL;
64
142
m_Typ = m_Idx = 0;
121
GLESubMap::GLESubMap() {
199
GLESubMap::GLESubMap() :
200
m_SubRoots(new GLEStringHash())
124
204
GLESubMap::~GLESubMap() {
208
GLESubRoot* GLESubMap::getRoot(const char* name) {
209
GLERC<GLEString> strName(new GLEString(name));
210
return (GLESubRoot*)m_SubRoots->getObjectByKey(strName);
213
GLESubRoot* GLESubMap::createRoot(const char* name, GLESubArgNames* argNames) {
214
GLERC<GLEString> strName(new GLEString(name));
215
GLESubRoot* root = (GLESubRoot*)m_SubRoots->getObjectByKey(strName);
217
root->updateArgNames(argNames);
220
GLESubRoot* newRoot = new GLESubRoot(strName.get(), argNames);
221
m_SubRoots->setObjectByKey(strName, newRoot);
226
void GLESubMap::add(GLEAbstractSub* sub) {
128
229
void GLESubMap::clear(int i) {
129
230
delete m_Subs[i];
130
231
m_Subs[i] = NULL;