X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FScript.hh;fp=src%2FMoof%2FScript.hh;h=a1b536cf1a3d49786725c6ac8e07f57134ff84f6;hp=4db93d5edc68501e446010fad5697bdbf86adfa1;hb=8a1acac01b444dccf8b57cedf08392ada2e473c1;hpb=bffc879fc8ee8167bb123310d39fad4e2f426ffd diff --git a/src/Moof/Script.hh b/src/Moof/Script.hh index 4db93d5..a1b536c 100644 --- a/src/Moof/Script.hh +++ b/src/Moof/Script.hh @@ -49,7 +49,6 @@ #include -#include #include @@ -64,7 +63,7 @@ struct Script { typedef boost::function Function; - enum TYPE + enum Type { NONE = LUA_TNONE, NIL = LUA_TNIL, @@ -78,7 +77,7 @@ struct Script THREAD = LUA_TTHREAD }; - enum STATUS + enum Status { SUCCESS = 0, YIELD = LUA_YIELD, @@ -89,7 +88,7 @@ struct Script FILE_ERROR = LUA_ERRFILE }; - enum PSEUDO_INDEX + enum PseudoIndex { REGISTRY = LUA_REGISTRYINDEX, ENVIRONMENT = LUA_ENVIRONINDEX, @@ -97,7 +96,7 @@ struct Script }; /** - * This is the most noticeable abstraction on top of the standard Lua API. + * This is the most prominent abstraction on top of the standard Lua API. * A Value object represents a value on the stack. More specifically, it * represents a position on the stack. The distinction is only important * when values are moved around on the stack or if the Value represents a @@ -153,17 +152,19 @@ struct Script bool isLightData() const { return (bool)lua_islightuserdata(state, index); } /** - * Check the value and throw and error if its the wrong type. This - * method never returns because it does a long jump. Consequently, - * constructed C++ objects which exist on the stack between the current - * frame and some lua function will not be destructed. That's not a - * problem for objects that only exist on the stack, but any objects - * that allocate memory on the heap (such as containers or strings) will - * leak. Therefore, you should only call this method after cleaning up - * such objects. + * Check the value and throw an error if its the wrong type. There's a + * little caveat: This method never returns because it does a long jump. + * Consequently, constructed C++ objects which exist on the stack + * between the current frame and some lua function will not be + * destructed. That's not a problem for objects that only exist on the + * stack, but any objects that allocate memory on the heap (such as + * containers or strings) will leak. Therefore, you should only call + * this method after cleaning up such objects. The best thing to do for + * defining functions is to simply check all the parameters at the + * get-go before any C++ objects are even constructed. */ - void requireType(TYPE type) const + void requireType(Type type) const { if (type != getType()) { @@ -223,9 +224,9 @@ struct Script * Get the type of the value. */ - TYPE getType() const + Type getType() const { - return (TYPE)lua_type(state, index); + return (Type)lua_type(state, index); } /** @@ -498,14 +499,14 @@ struct Script } - STATUS doString(const std::string& commands) + Status doString(const std::string& commands) { - return (STATUS)luaL_dostring(mState, commands.c_str()); + return (Status)luaL_dostring(mState, commands.c_str()); } - STATUS doFile(const std::string& file) + Status doFile(const std::string& file) { - return (STATUS)luaL_dofile(mState, file.c_str()); + return (Status)luaL_dofile(mState, file.c_str()); } @@ -523,14 +524,14 @@ struct Script lua_pushthread(mState); } - STATUS resume(int nargs) + Status resume(int nargs) { - return (STATUS)lua_resume(mState, nargs); + return (Status)lua_resume(mState, nargs); } - STATUS getStatus() const + Status getStatus() const { - return (STATUS)lua_status(mState); + return (Status)lua_status(mState); } int yield(int results) @@ -688,14 +689,14 @@ struct Script lua_xmove(thread.mState, mState, n); } - STATUS pushCode(const std::string& filename) + Status pushCode(const std::string& filename) { - return (STATUS)luaL_loadfile(mState, filename.c_str()); + return (Status)luaL_loadfile(mState, filename.c_str()); } - STATUS pushCode(const std::string& name, const char* buffer, size_t size) + Status pushCode(const std::string& name, const char* buffer, size_t size) { - return (STATUS)luaL_loadbuffer(mState, buffer, size, name.c_str()); + return (Status)luaL_loadbuffer(mState, buffer, size, name.c_str()); } void* pushNewData(size_t size) @@ -716,9 +717,9 @@ struct Script * is any number of return values, depending on the callee). */ - STATUS call(int nargs, int nresults = LUA_MULTRET) + Status call(int nargs, int nresults = LUA_MULTRET) { - return (STATUS)lua_pcall(mState, nargs, nresults, 0); + return (Status)lua_pcall(mState, nargs, nresults, 0); } @@ -793,20 +794,6 @@ struct Script lua_gc(mState, LUA_GCSETSTEPMUL, step); } - - - struct Exception : public Mf::Exception - { - explicit Exception(unsigned error) : - Mf::Exception(error) {} - - void raise() - { - throw *this; - } - }; - - private: Script(lua_State* state) :