00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef skINTERPRETER_H
00022 #define skINTERPRETER_H
00023
00024 #include "skRValue.h"
00025 #include "skiExecutable.h"
00026 #include "skNull.h"
00027
00028 class CLASSEXPORT skRValueArray;
00029 class CLASSEXPORT skParseNode;
00030 class CLASSEXPORT skStringList;
00031 class CLASSEXPORT skMethodDefNode;
00032 class CLASSEXPORT skTraceCallback;
00033 class CLASSEXPORT skStatementStepper;
00034
00035 #ifndef EXCEPTIONS_DEFINED
00036 #include "skScriptError.h"
00037 #endif
00038
00043 class CLASSEXPORT skContext
00044 {
00045 public:
00050 skContext(const skString& location,skExecutableContext& context)
00051 : m_Location(location),m_Context(context)
00052 {};
00054 skString m_Location;
00056 int m_LineNum;
00058 skExecutableContext& m_Context;
00059 };
00060
00068 class CLASSEXPORT skInterpreter : public skExecutable
00069 {
00070 public:
00071
00072
00073
00074
00085 skMethodDefNode * parseString(const skString& location,const skString& code,skExecutableContext& ctxt);
00097 skMethodDefNode * parseExternalParams(const skString& location,skStringList& paramNames,const skString& code,skExecutableContext& ctxt);
00111 void executeString(const skString& location,skiExecutable * obj,const skString& code,skRValueArray& args,skRValue& return_value,skMethodDefNode ** parseTree,skExecutableContext& ctxt);
00112
00126 void executeStringExternalParams(const skString& location,skiExecutable * obj,skStringList& paramNames,const skString& code,skRValueArray& args,skRValue& r,skMethodDefNode ** keepParseTree,skExecutableContext& ctxt);
00127
00138 void executeParseTree(const skString& location,skiExecutable * obj,skMethodDefNode * parseTree,skRValueArray& args,skRValue& return_value,skExecutableContext& ctxt);
00139
00140
00141
00142
00148 void addGlobalVariable(const skString& name,skRValue value);
00153 void removeGlobalVariable(const skString& name);
00161 bool findGlobalVariable(const skString& name,skRValue& return_value);
00162
00163
00164
00165
00166
00171 bool setValue(const skString& s,const skString& attribute,const skRValue& v);
00172
00173
00174
00175
00176
00180 void trace(const skString& msg);
00184 void setTraceCallback(skTraceCallback * callback);
00185
00189 void setStatementStepper(skStatementStepper * stepper);
00190
00192 void runtimeError(skContext& ctxt,const skString& msg);
00193
00194
00195
00196
00197
00201 skInterpreter();
00205 ~skInterpreter();
00206
00208 class P_Interpreter * pimp;
00209
00213 static skNull g_Null;
00214
00215 private:
00216
00217
00218
00219
00220
00224 skInterpreter(const skInterpreter&);
00228 skInterpreter& operator=(const skInterpreter&);
00229 };
00230
00231
00232 #endif
00233
00234