Add support for compiled ".mrb" scripts
A compiled ".mrb" script can be specified in the Binding config subgroup with key 'mrbFile='. If a 'customScript' is specified it still takes priority however.
This commit is contained in:
		
							parent
							
								
									57c806e9b5
								
							
						
					
					
						commit
						2ddb31016d
					
				
					 1 changed files with 38 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -28,6 +28,7 @@
 | 
			
		|||
#include "mruby/irep.h"
 | 
			
		||||
#include "mruby/compile.h"
 | 
			
		||||
#include "mruby/proc.h"
 | 
			
		||||
#include "mruby/dump.h"
 | 
			
		||||
 | 
			
		||||
#include "binding-util.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -208,6 +209,37 @@ runCustomScript(mrb_state *mrb, mrbc_context *ctx, const char *filename)
 | 
			
		|||
	fclose(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
runMrbFile(mrb_state *mrb, const char *filename)
 | 
			
		||||
{
 | 
			
		||||
	/* Execute compiled script */
 | 
			
		||||
	FILE *f = fopen(filename, "r");
 | 
			
		||||
 | 
			
		||||
	if (!f)
 | 
			
		||||
	{
 | 
			
		||||
		static char buffer[256];
 | 
			
		||||
		snprintf(buffer, sizeof(buffer), "Unable to open compiled script '%s'", filename);
 | 
			
		||||
		showError(buffer);
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	int n = mrb_read_irep_file(mrb, f);
 | 
			
		||||
 | 
			
		||||
	if (n < 0)
 | 
			
		||||
	{
 | 
			
		||||
		static char buffer[256];
 | 
			
		||||
		snprintf(buffer, sizeof(buffer), "Unable to read compiled script '%s'", filename);
 | 
			
		||||
		showError(buffer);
 | 
			
		||||
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
 | 
			
		||||
 | 
			
		||||
	fclose(f);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
runRMXPScripts(mrb_state *mrb, mrbc_context *ctx)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -323,9 +355,14 @@ void mrbBindingExecute()
 | 
			
		|||
	mrbc_context *ctx = mrbc_context_new(mrb);
 | 
			
		||||
	ctx->capture_errors = 1;
 | 
			
		||||
 | 
			
		||||
	QByteArray &customScript = gState->rtData().config.customScript;
 | 
			
		||||
	Config &conf = gState->rtData().config;
 | 
			
		||||
	QByteArray &customScript = conf.customScript;
 | 
			
		||||
	QByteArray mrbFile = conf.bindingConf.value("mrbFile").toByteArray();
 | 
			
		||||
 | 
			
		||||
	if (!customScript.isEmpty())
 | 
			
		||||
		runCustomScript(mrb, ctx, customScript.constData());
 | 
			
		||||
	else if (!mrbFile.isEmpty())
 | 
			
		||||
		runMrbFile(mrb, mrbFile.constData());
 | 
			
		||||
	else
 | 
			
		||||
		runRMXPScripts(mrb, ctx);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue