summaryrefslogtreecommitdiffstats
path: root/squirrel_3_0_1_stable/sqrat/sqrat/sqratScript.h
diff options
context:
space:
mode:
Diffstat (limited to 'squirrel_3_0_1_stable/sqrat/sqrat/sqratScript.h')
-rw-r--r--squirrel_3_0_1_stable/sqrat/sqrat/sqratScript.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/squirrel_3_0_1_stable/sqrat/sqrat/sqratScript.h b/squirrel_3_0_1_stable/sqrat/sqrat/sqratScript.h
new file mode 100644
index 000000000..4ef07e309
--- /dev/null
+++ b/squirrel_3_0_1_stable/sqrat/sqrat/sqratScript.h
@@ -0,0 +1,141 @@
+//
+// SqratScript: Script Compilation and Execution
+//
+
+//
+// Copyright (c) 2009 Brandon Jones
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+// distribution.
+//
+
+#if !defined(_SCRAT_SCRIPT_H_)
+#define _SCRAT_SCRIPT_H_
+
+#include <squirrel.h>
+#include <sqstdio.h>
+#include <string.h>
+
+#include "sqratObject.h"
+
+namespace Sqrat {
+
+class Script : public Object {
+public:
+ Script(HSQUIRRELVM v = DefaultVM::Get()) : Object(v, false) {
+ }
+
+ ~Script()
+ {
+ if(!sq_isnull(obj)) {
+ sq_release(vm, &obj);
+ }
+ }
+ void CompileString(const string& script) {
+ if(!sq_isnull(obj)) {
+ sq_release(vm, &obj);
+ }
+ if(SQ_FAILED(sq_compilebuffer(vm, script.c_str(), static_cast<SQInteger>(script.size() * sizeof(SQChar)), _SC(""), true))) {
+ throw Exception(LastErrorString(vm));
+ }
+ sq_getstackobj(vm,-1,&obj);
+ sq_addref(vm, &obj);
+ sq_pop(vm, 1);
+ }
+
+ bool CompileString(const string& script, string& errMsg) {
+ if(!sq_isnull(obj)) {
+ sq_release(vm, &obj);
+ }
+ if(SQ_FAILED(sq_compilebuffer(vm, script.c_str(), static_cast<SQInteger>(script.size() * sizeof(SQChar)), _SC(""), true))) {
+ errMsg = LastErrorString(vm);
+ return false;
+ }
+ sq_getstackobj(vm,-1,&obj);
+ sq_addref(vm, &obj);
+ sq_pop(vm, 1);
+ return true;
+ }
+
+ void CompileFile(const string& path) {
+ if(!sq_isnull(obj)) {
+ sq_release(vm, &obj);
+ }
+ if(SQ_FAILED(sqstd_loadfile(vm, path.c_str(), true))) {
+ throw Exception(LastErrorString(vm));
+ }
+ sq_getstackobj(vm,-1,&obj);
+ sq_addref(vm, &obj);
+ sq_pop(vm, 1);
+ }
+
+ bool CompileFile(const string& path, string& errMsg) {
+ if(!sq_isnull(obj)) {
+ sq_release(vm, &obj);
+ }
+ if(SQ_FAILED(sqstd_loadfile(vm, path.c_str(), true))) {
+ errMsg = LastErrorString(vm);
+ return false;
+ }
+ sq_getstackobj(vm,-1,&obj);
+ sq_addref(vm, &obj);
+ sq_pop(vm, 1);
+ return true;
+ }
+
+ void Run() {
+ if(!sq_isnull(obj)) {
+ SQRESULT result;
+ sq_pushobject(vm, obj);
+ sq_pushroottable(vm);
+ result = sq_call(vm, 1, false, true);
+ sq_pop(vm, 1);
+ if(SQ_FAILED(result)) {
+ throw Exception(LastErrorString(vm));
+ }
+ }
+ }
+
+ bool Run(string& errMsg) {
+ if(!sq_isnull(obj)) {
+ SQRESULT result;
+ sq_pushobject(vm, obj);
+ sq_pushroottable(vm);
+ result = sq_call(vm, 1, false, true);
+ sq_pop(vm, 1);
+ if(SQ_FAILED(result)) {
+ errMsg = LastErrorString(vm);
+ return false;
+ }
+ }
+ return true;
+ }
+
+
+ void WriteCompiledFile(const string& path) {
+ if(!sq_isnull(obj)) {
+ sq_pushobject(vm, obj);
+ sqstd_writeclosuretofile(vm, path.c_str());
+ //sq_pop(vm, 1); // needed?
+ }
+ }
+};
+}
+
+#endif