Skip to content

Commit 60e2c02

Browse files
Merge pull request livecode#2789 from peter-b/libscript-moduledata
libscript: Add MCScriptCreateModuleFromData().
2 parents 0219116 + 824f862 commit 60e2c02

4 files changed

Lines changed: 29 additions & 19 deletions

File tree

engine/src/exec-extension.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "uuid.h"
5050

5151
#include "libscript/script.h"
52+
#include "libscript/script-auto.h"
5253

5354
////////////////////////////////////////////////////////////////////////////////
5455

@@ -168,28 +169,20 @@ bool MCEngineLookupResourcePathForModule(MCScriptModuleRef p_module, MCStringRef
168169

169170
void MCEngineLoadExtensionFromData(MCExecContext& ctxt, MCDataRef p_extension_data, MCStringRef p_resource_path)
170171
{
171-
MCStreamRef t_stream;
172-
/* UNCHECKED */ MCMemoryInputStreamCreate(MCDataGetBytePtr(p_extension_data), MCDataGetLength(p_extension_data), t_stream);
173-
174-
MCScriptModuleRef t_module;
175-
if (!MCScriptCreateModuleFromStream(t_stream, t_module))
172+
MCAutoScriptModuleRef t_module;
173+
if (!MCScriptCreateModuleFromData(p_extension_data, &t_module))
176174
{
177175
MCAutoErrorRef t_error;
178176
if (MCErrorCatch(Out(t_error)))
179177
ctxt . SetTheResultToValue(MCErrorGetMessage(In(t_error)));
180178
else
181179
ctxt . SetTheResultToStaticCString("failed to load module");
182-
MCValueRelease(t_stream);
183180
return;
184181
}
185182

186-
MCValueRelease(t_stream);
187-
188-
MCEngineAddExtensionFromModule(t_module);
183+
MCEngineAddExtensionFromModule(*t_module);
189184
if (p_resource_path != nil)
190-
MCEngineAddResourcePathForModule(t_module, p_resource_path);
191-
192-
MCScriptReleaseModule(t_module);
185+
MCEngineAddResourcePathForModule(*t_module, p_resource_path);
193186

194187
return;
195188
}

libscript/include/libscript/script.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ bool MCScriptUnloadPackage(MCScriptPackageRef package);
162162
// Load a module from a stream.
163163
bool MCScriptCreateModuleFromStream(MCStreamRef stream, MCScriptModuleRef& r_module);
164164

165+
// Load a module from a blob
166+
MC_DLLEXPORT bool MCScriptCreateModuleFromData(MCDataRef data, MCScriptModuleRef & r_module);
167+
165168
// Lookup the module with the given name. Returns false if no such module exists.
166169
bool MCScriptLookupModule(MCNameRef name, MCScriptModuleRef& r_module);
167170

libscript/src/script-module.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <foundation-auto.h>
1919

2020
#include "libscript/script.h"
21+
#include <libscript/script-auto.h>
2122
#include "script-private.h"
2223

2324
#include <stddef.h>
@@ -502,6 +503,25 @@ bool MCScriptCreateModuleFromStream(MCStreamRef stream, MCScriptModuleRef& r_mod
502503
return true;
503504
}
504505

506+
MC_DLLEXPORT_DEF bool
507+
MCScriptCreateModuleFromData (MCDataRef data,
508+
MCScriptModuleRef & r_module)
509+
{
510+
MCAutoValueRefBase<MCStreamRef> t_stream;
511+
MCAutoScriptModuleRef t_module;
512+
513+
if (!MCMemoryInputStreamCreate (MCDataGetBytePtr (data),
514+
MCDataGetLength (data),
515+
&t_stream))
516+
return false;
517+
518+
if (!MCScriptCreateModuleFromStream (*t_stream, &t_module))
519+
return false;
520+
521+
r_module = MCScriptRetainModule (*t_module);
522+
return true;
523+
}
524+
505525
bool MCScriptLookupModule(MCNameRef p_name, MCScriptModuleRef& r_module)
506526
{
507527
for(MCScriptModule *t_module = s_modules; t_module != nil; t_module = t_module -> next_module)

toolchain/lc-compile/src/lc-run.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -348,18 +348,12 @@ MCRunLoadModule (MCStringRef p_filename,
348348
MCScriptModuleRef & r_module)
349349
{
350350
MCAutoDataRef t_module_data;
351-
MCAutoValueRefBase<MCStreamRef> t_stream;
352351
MCAutoScriptModuleRef t_module;
353352

354353
if (!MCSFileGetContents (p_filename, &t_module_data))
355354
return false;
356355

357-
if (!MCMemoryInputStreamCreate (MCDataGetBytePtr (*t_module_data),
358-
MCDataGetLength (*t_module_data),
359-
&t_stream))
360-
return false;
361-
362-
if (!MCScriptCreateModuleFromStream (*t_stream, &t_module))
356+
if (!MCScriptCreateModuleFromData (*t_module_data, &t_module))
363357
return false;
364358

365359
r_module = MCScriptRetainModule (*t_module);

0 commit comments

Comments
 (0)