diff options
Diffstat (limited to 'scripting/engine.h')
-rw-r--r-- | scripting/engine.h | 43 |
1 files changed, 13 insertions, 30 deletions
diff --git a/scripting/engine.h b/scripting/engine.h index 62afd77..1f9f1f5 100644 --- a/scripting/engine.h +++ b/scripting/engine.h @@ -27,18 +27,8 @@ namespace mongo { const StringData& source; }; - namespace JSFiles { - extern const JSFile collection; - extern const JSFile db; - extern const JSFile mongo; - extern const JSFile mr; - extern const JSFile query; - extern const JSFile servers; - extern const JSFile utils; - } - typedef unsigned long long ScriptingFunction; - typedef BSONObj (*NativeFunction) ( const BSONObj &args ); + typedef BSONObj (*NativeFunction) ( const BSONObj &args, void* data ); class Scope : boost::noncopyable { public: @@ -48,7 +38,7 @@ namespace mongo { virtual void reset() = 0; virtual void init( const BSONObj * data ) = 0; void init( const char * data ) { - BSONObj o( data , 0 ); + BSONObj o( data ); init( &o ); } @@ -79,14 +69,15 @@ namespace mongo { virtual int type( const char *field ) = 0; - void append( BSONObjBuilder & builder , const char * fieldName , const char * scopeName ); + virtual void append( BSONObjBuilder & builder , const char * fieldName , const char * scopeName ); virtual void setElement( const char *field , const BSONElement& e ) = 0; virtual void setNumber( const char *field , double val ) = 0; virtual void setString( const char *field , const char * val ) = 0; virtual void setObject( const char *field , const BSONObj& obj , bool readOnly=true ) = 0; virtual void setBoolean( const char *field , bool val ) = 0; - virtual void setThis( const BSONObj * obj ) = 0; + virtual void setFunction( const char *field , const char * code ) = 0; +// virtual void setThis( const BSONObj * obj ) = 0; virtual ScriptingFunction createFunction( const char * code ); @@ -94,18 +85,18 @@ namespace mongo { /** * @return 0 on success */ - virtual int invoke( ScriptingFunction func , const BSONObj& args, int timeoutMs = 0 , bool ignoreReturn = false ) = 0; - void invokeSafe( ScriptingFunction func , const BSONObj& args, int timeoutMs = 0 ) { - int res = invoke( func , args , timeoutMs ); + virtual int invoke( ScriptingFunction func , const BSONObj* args, const BSONObj* recv, int timeoutMs = 0 , bool ignoreReturn = false, bool readOnlyArgs = false, bool readOnlyRecv = false ) = 0; + void invokeSafe( ScriptingFunction func , const BSONObj* args, const BSONObj* recv, int timeoutMs = 0, bool readOnlyArgs = false, bool readOnlyRecv = false ) { + int res = invoke( func , args , recv, timeoutMs, readOnlyArgs, readOnlyRecv ); if ( res == 0 ) return; throw UserException( 9004 , (string)"invoke failed: " + getError() ); } virtual string getError() = 0; - int invoke( const char* code , const BSONObj& args, int timeoutMs = 0 ); - void invokeSafe( const char* code , const BSONObj& args, int timeoutMs = 0 ) { - if ( invoke( code , args , timeoutMs ) == 0 ) + int invoke( const char* code , const BSONObj* args, const BSONObj* recv, int timeoutMs = 0 ); + void invokeSafe( const char* code , const BSONObj* args, const BSONObj* recv, int timeoutMs = 0 ) { + if ( invoke( code , args , recv, timeoutMs ) == 0 ) return; throw UserException( 9005 , (string)"invoke failed: " + getError() ); } @@ -119,19 +110,11 @@ namespace mongo { execSetup(file.source, file.name); } - void execCoreFiles() { - // keeping same order as in SConstruct - execSetup(JSFiles::utils); - execSetup(JSFiles::db); - execSetup(JSFiles::mongo); - execSetup(JSFiles::mr); - execSetup(JSFiles::query); - execSetup(JSFiles::collection); - } + void execCoreFiles(); virtual bool execFile( const string& filename , bool printResult , bool reportError , bool assertOnError, int timeoutMs = 0 ); - virtual void injectNative( const char *field, NativeFunction func ) = 0; + virtual void injectNative( const char *field, NativeFunction func, void* data = 0 ) = 0; virtual void gc() = 0; |