From cb8af6dd3376ada0fc2e7409d8d7ea828cc461c8 Mon Sep 17 00:00:00 2001
From: cremno <cremno@mail.ru>
Date: Wed, 9 Apr 2014 22:36:56 +0200
Subject: [PATCH 1/2] MRI: add $RGSS_SCRIPTS

---
 binding-mri/binding-mri.cpp | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/binding-mri/binding-mri.cpp b/binding-mri/binding-mri.cpp
index 0160757..2a8a623 100644
--- a/binding-mri/binding-mri.cpp
+++ b/binding-mri/binding-mri.cpp
@@ -210,6 +210,8 @@ static void runRMXPScripts()
 		return;
 	}
 
+	rb_gv_set("$RGSS_SCRIPTS", scriptArray);
+
 	long scriptCount = RARRAY_LEN(scriptArray);
 
 	std::string decodeBuffer;
@@ -259,14 +261,25 @@ static void runRMXPScripts()
 			break;
 		}
 
+		rb_ary_store(script, 3, rb_str_new_cstr(decodeBuffer.c_str()));
+	}
+
+	for (long i = 0; i < scriptCount; ++i)
+	{
+		VALUE script = rb_ary_entry(scriptArray, i);
+		VALUE scriptDecoded = rb_ary_entry(script, 3);
+
 		/* Store encoding header + the decoded script
 		 * in 'sc.decData' */
 		std::string decData = "#encoding:utf-8\n";
 		size_t hdSize = decData.size();
-		decData.resize(hdSize + bufferLen);
-		memcpy(&decData[hdSize], decodeBuffer.c_str(), bufferLen);
+		const char *scriptDecPtr;
+		long scriptDecLen;
+		RSTRING_GETMEM(scriptDecoded, scriptDecPtr, scriptDecLen);
+		decData.resize(hdSize + scriptDecLen);
+		memcpy(&decData[hdSize], scriptDecPtr, scriptDecLen);
 
-		ruby_script(RSTRING_PTR(scriptName));
+		ruby_script(RSTRING_PTR(rb_ary_entry(script, 1)));
 
 		rb_gc_start();
 
@@ -279,6 +292,7 @@ static void runRMXPScripts()
 	}
 }
 
+
 static void mriBindingExecute()
 {
 	ruby_setup();

From fcc84373bcf8431744101f39076e7d90649066f7 Mon Sep 17 00:00:00 2001
From: cremno <cremno@mail.ru>
Date: Wed, 9 Apr 2014 23:45:24 +0200
Subject: [PATCH 2/2] MRI: don't manually peform GC

---
 binding-mri/binding-mri.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/binding-mri/binding-mri.cpp b/binding-mri/binding-mri.cpp
index 2a8a623..189368a 100644
--- a/binding-mri/binding-mri.cpp
+++ b/binding-mri/binding-mri.cpp
@@ -281,8 +281,6 @@ static void runRMXPScripts()
 
 		ruby_script(RSTRING_PTR(rb_ary_entry(script, 1)));
 
-		rb_gc_start();
-
 		/* Execute code */
 		rb_eval_string_protect(decData.c_str(), 0);