42
42
class GLEObjectDOConstructor;
44
class GLESubArgNames : public GLERefCountObject {
47
void addArgName(const char* argName);
49
GLERC<GLEStringHash> m_ArgNames;
52
class GLESubRoot : public GLEDataObject {
54
GLESubRoot(GLEString* name, GLESubArgNames* argNames);
55
void updateArgNames(GLESubArgNames* argNames);
57
GLERC<GLEString> m_Name;
58
GLERC<GLESubArgNames> m_ArgNames;
59
GLERC<GLEStringHash> m_IgnoredArgNames;
60
GLERC<GLEArrayImpl> m_Signatures;
63
class GLESubSignature : public GLEDataObject {
65
GLESubSignature(GLESubRoot* root);
68
GLERC<GLEArrayWithFreeList> m_Subroutines;
69
GLERC<GLEArrayWithFreeList> m_Callables;
72
class GLECallable : public GLEDataObject {
74
virtual void execute(GLEArrayImpl* stack, unsigned int top);
76
unsigned int* m_ArgTypes;
79
class GLEArgTypeDefaults : public GLERefCountObject {
81
GLEArgTypeDefaults(unsigned int arity);
82
~GLEArgTypeDefaults();
83
inline unsigned int* getArgTypes() { return m_ArgTypes; }
84
inline void setArgType(unsigned int i, unsigned int type) { m_ArgTypes[i] = type; }
87
unsigned int* m_ArgTypes;
88
GLERC<GLEArrayImpl> m_Defaults;
91
class GLEAbstractSub : public GLECallable {
94
inline void setRoot(GLESubRoot* root) { m_Root = root; }
95
void setArgTypeDefaults(GLEArgTypeDefaults* defaults);
98
GLERC<GLEArgTypeDefaults> m_ArgTypeDefaults;
103
class GLEBuiltInFactory {
105
GLEBuiltInFactory(GLESubMap* map);
106
GLESubArgNames* getBinaryArgNamesXY();
107
GLEArgTypeDefaults* getBinaryDoubleDoubleArgTypeDefaults();
108
GLESubRoot* createRoot(const char* name, GLESubArgNames* argNames);
111
GLERC<GLESubArgNames> m_BinaryArgNamesXY;
112
GLERC<GLEArgTypeDefaults> m_BinaryDoubleDoubleArgTypeDefaults;
115
class GLEBuiltIn : public GLEAbstractSub {
92
170
StringIntHash m_Map;
93
171
vector<GLESub*> m_Subs;
172
GLERC<GLEStringHash> m_SubRoots;
176
GLESubRoot* getRoot(const char* name);
177
GLESubRoot* createRoot(const char* name, GLESubArgNames* argNames);
98
179
void clear(int i);
100
181
GLESub* add(GLESub* parent);
182
void add(GLEAbstractSub* sub);
101
183
/* FIXME: lookup should be based on GLEString */
102
184
GLESub* add(const string& name);
103
185
GLESub* get(const string& name);