Skip to content

Commit 9b038c1

Browse files
author
Fraser J. Gordon
committed
Module loading now works on Win32
1 parent 7d7fd7c commit 9b038c1

7 files changed

Lines changed: 102 additions & 40 deletions

File tree

engine/src/dskw32main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ along with LiveCode. If not see <http://www.gnu.org/licenses/>. */
2828
#include "mcerror.h"
2929
#include "globals.h"
3030
#include "util.h"
31+
#include "script.h"
3132

3233
#include <msctf.h>
3334

@@ -180,7 +181,7 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
180181
csptr++;
181182
}
182183

183-
if (!MCInitialize())
184+
if (!MCInitialize() || !MCScriptInitialize())
184185
exit(-1);
185186

186187
// Ensure the command line variable gets set

libscript/libscript.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
4D79B6E31A27405600DD750C /* type.mlc in Sources */ = {isa = PBXBuildFile; fileRef = 4D79B67E1A273BA000DD750C /* type.mlc */; };
5858
4DDA20451A136FF4001B0CA2 /* script-builder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DDA20441A136FF4001B0CA2 /* script-builder.cpp */; };
5959
4DDA20701A139BC0001B0CA2 /* script-test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DDA206F1A139BC0001B0CA2 /* script-test.cpp */; };
60+
7210DCA41A37102F00C23D23 /* module-helper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7210DCA31A37102F00C23D23 /* module-helper.cpp */; };
6061
766113441A2F298E0042DE7F /* list.mlc in Sources */ = {isa = PBXBuildFile; fileRef = 4D79B6751A273BA000DD750C /* list.mlc */; };
6162
766113541A2F4F720042DE7F /* type-convert.mlc in Sources */ = {isa = PBXBuildFile; fileRef = 766113531A2F4F720042DE7F /* type-convert.mlc */; };
6263
766113891A31FB640042DE7F /* module-array.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 766113881A31FB640042DE7F /* module-array.cpp */; };
@@ -198,6 +199,7 @@
198199
4DDA20441A136FF4001B0CA2 /* script-builder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "script-builder.cpp"; path = "src/script-builder.cpp"; sourceTree = "<group>"; };
199200
4DDA20661A139BA1001B0CA2 /* libscript-test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "libscript-test"; sourceTree = BUILT_PRODUCTS_DIR; };
200201
4DDA206F1A139BC0001B0CA2 /* script-test.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "script-test.cpp"; path = "src/script-test.cpp"; sourceTree = "<group>"; };
202+
7210DCA31A37102F00C23D23 /* module-helper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "module-helper.cpp"; path = "src/module-helper.cpp"; sourceTree = "<group>"; };
201203
766113531A2F4F720042DE7F /* type-convert.mlc */ = {isa = PBXFileReference; lastKnownFileType = text; name = "type-convert.mlc"; path = "src/type-convert.mlc"; sourceTree = "<group>"; };
202204
766113881A31FB640042DE7F /* module-array.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "module-array.cpp"; path = "src/module-array.cpp"; sourceTree = "<group>"; };
203205
7661138C1A31FDFD0042DE7F /* array.mlc */ = {isa = PBXFileReference; lastKnownFileType = text; name = array.mlc; path = src/array.mlc; sourceTree = "<group>"; };
@@ -314,6 +316,7 @@
314316
4D79B65C1A273BA000DD750C /* module-byte.cpp */,
315317
4D79B65D1A273BA000DD750C /* module-char.cpp */,
316318
4D79B65E1A273BA000DD750C /* module-encoding.cpp */,
319+
7210DCA31A37102F00C23D23 /* module-helper.cpp */,
317320
4D79B6601A273BA000DD750C /* module-list.cpp */,
318321
4D79B6611A273BA000DD750C /* module-logic.cpp */,
319322
4D79B6631A273BA000DD750C /* module-math_foundation.cpp */,
@@ -536,6 +539,7 @@
536539
766113541A2F4F720042DE7F /* type-convert.mlc in Sources */,
537540
766113441A2F298E0042DE7F /* list.mlc in Sources */,
538541
7661138A1A31FB690042DE7F /* module-array.cpp in Sources */,
542+
7210DCA41A37102F00C23D23 /* module-helper.cpp in Sources */,
539543
4D79B6CF1A27405600DD750C /* arithmetic.mlc in Sources */,
540544
4D79B6D01A27405600DD750C /* binary.mlc in Sources */,
541545
4D79B6D11A27405600DD750C /* bitwise.mlc in Sources */,

libscript/src/module-helper.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/* Copyright (C) 2003-2013 Runtime Revolution Ltd.
2+
3+
This file is part of LiveCode.
4+
5+
LiveCode is free software; you can redistribute it and/or modify it under
6+
the terms of the GNU General Public License v3 as published by the Free
7+
Software Foundation.
8+
9+
LiveCode is distributed in the hope that it will be useful, but WITHOUT ANY
10+
WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
for more details.
13+
14+
You should have received a copy of the GNU General Public License
15+
along with LiveCode. If not see <http://www.gnu.org/licenses/>. */
16+
17+
18+
19+
// This file exists only to hold a reference to every other built-in module
20+
// to simplify the linking process for Win32
21+
22+
23+
extern "C"
24+
{
25+
26+
struct builtin_module_descriptor {};
27+
extern builtin_module_descriptor __com_livecode_arithmetic_module_info;
28+
extern builtin_module_descriptor __com_livecode_array_module_info;
29+
extern builtin_module_descriptor __com_livecode_binary_module_info;
30+
extern builtin_module_descriptor __com_livecode_bitwise_module_info;
31+
extern builtin_module_descriptor __com_livecode_byte_module_info;
32+
extern builtin_module_descriptor __com_livecode_char_module_info;
33+
extern builtin_module_descriptor __com_livecode_encoding_module_info;
34+
extern builtin_module_descriptor __com_livecode_item_module_info;
35+
extern builtin_module_descriptor __com_livecode_line_module_info;
36+
extern builtin_module_descriptor __com_livecode_list_module_info;
37+
extern builtin_module_descriptor __com_livecode_logic_module_info;
38+
extern builtin_module_descriptor __com_livecode_math_module_info;
39+
extern builtin_module_descriptor __com_livecode_segmentchunk_module_info;
40+
extern builtin_module_descriptor __com_livecode_sort_module_info;
41+
extern builtin_module_descriptor __com_livecode_string_module_info;
42+
extern builtin_module_descriptor __com_livecode_type_module_info;
43+
extern builtin_module_descriptor __com_livecode_typeconvert_module_info;
44+
45+
builtin_module_descriptor* g_builtin_modules[] =
46+
{
47+
&__com_livecode_arithmetic_module_info,
48+
&__com_livecode_array_module_info,
49+
&__com_livecode_binary_module_info,
50+
&__com_livecode_bitwise_module_info,
51+
&__com_livecode_byte_module_info,
52+
&__com_livecode_char_module_info,
53+
//&__com_livecode_encoding_module_info,
54+
&__com_livecode_item_module_info,
55+
&__com_livecode_line_module_info,
56+
&__com_livecode_list_module_info,
57+
&__com_livecode_logic_module_info,
58+
&__com_livecode_math_module_info,
59+
&__com_livecode_segmentchunk_module_info,
60+
&__com_livecode_sort_module_info,
61+
&__com_livecode_string_module_info,
62+
&__com_livecode_type_module_info,
63+
&__com_livecode_typeconvert_module_info
64+
};
65+
66+
unsigned int g_builtin_module_count = sizeof(g_builtin_modules) / sizeof(builtin_module_descriptor*);
67+
68+
}

libscript/src/script-object.cpp

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ struct MCBuiltinModule
1313
static MCScriptModuleRef s_builtin_module = nil;
1414
static MCScriptModuleRef *s_builtin_modules = nil;
1515
static uindex_t s_builtin_module_count = 0;
16-
static bool MCFetchBuiltinModuleSection(MCBuiltinModule*& r_modules, unsigned int& r_count);
16+
static bool MCFetchBuiltinModuleSection(MCBuiltinModule**& r_modules, unsigned int& r_count);
1717

1818
bool MCScriptInitialize(void)
1919
{
20-
MCBuiltinModule *t_modules;
20+
MCBuiltinModule **t_modules;
2121
unsigned int t_module_count;
2222
if (!MCFetchBuiltinModuleSection(t_modules, t_module_count))
2323
return true;
@@ -28,7 +28,7 @@ bool MCScriptInitialize(void)
2828
for(uindex_t i = 0; i < t_module_count; i++)
2929
{
3030
MCStreamRef t_stream;
31-
if (!MCMemoryInputStreamCreate(t_modules[i] . data, t_modules[i] . size, t_stream))
31+
if (!MCMemoryInputStreamCreate(t_modules[i] -> data, t_modules[i] -> size, t_stream))
3232
return false;
3333

3434
if (!MCScriptCreateModuleFromStream(t_stream, s_builtin_modules[i]))
@@ -295,35 +295,16 @@ void __MCScriptAssertFailed__(const char *label, const char *expr, const char *f
295295

296296
////////////////////////////////////////////////////////////////////////////////
297297

298-
#if defined(_MACOSX) || defined(TARGET_SUBPLATFORM_IPHONE)
299-
300-
#include <mach-o/loader.h>
301-
#include <mach-o/getsect.h>
302-
#include <mach-o/dyld.h>
303-
304-
static bool MCFetchBuiltinModuleSection(MCBuiltinModule*& r_modules, unsigned int& r_count)
298+
extern "C"
305299
{
306-
307-
unsigned long t_section_data_size;
308-
char *t_section_data;
309-
t_section_data = getsectdata("__MODULES", "__modules", &t_section_data_size);
310-
if (t_section_data != nil)
311-
{
312-
t_section_data += (unsigned long)_dyld_get_image_vmaddr_slide(0);
313-
r_modules = (MCBuiltinModule *)t_section_data;
314-
r_count = t_section_data_size / sizeof(MCBuiltinModule);
315-
return true;
316-
}
317-
318-
return false;
300+
extern MCBuiltinModule* g_builtin_modules[];
301+
extern unsigned int g_builtin_module_count;
319302
}
320303

321-
#else
322-
323-
static bool MCFetchBuiltinModuleSection(MCBuiltinModule*& r_modules, unsigned int& r_count)
304+
static bool MCFetchBuiltinModuleSection(MCBuiltinModule**& r_modules, unsigned int& r_count)
324305
{
325-
// Not implemented
326-
return false;
306+
// Use the array defined in the module-helper.cpp file
307+
r_modules = g_builtin_modules;
308+
r_count = g_builtin_module_count;
309+
return true;
327310
}
328-
329-
#endif

libscript/stdscript.vcproj

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@
168168
RelativePath=".\src\module-file.cpp"
169169
>
170170
</File>
171+
<File
172+
RelativePath=".\src\module-helper.cpp"
173+
>
174+
</File>
171175
<File
172176
RelativePath=".\src\module-list.cpp"
173177
>
@@ -215,6 +219,10 @@
215219
RelativePath=".\src\arithmetic.mlc"
216220
>
217221
</File>
222+
<File
223+
RelativePath=".\src\array.mlc"
224+
>
225+
</File>
218226
<File
219227
RelativePath=".\src\binary.mlc"
220228
>
@@ -247,10 +255,6 @@
247255
RelativePath=".\src\logic.mlc"
248256
>
249257
</File>
250-
<File
251-
RelativePath=".\src\map.mlc"
252-
>
253-
</File>
254258
<File
255259
RelativePath=".\src\math.mlc"
256260
>
@@ -283,6 +287,10 @@
283287
RelativePath=".\generated\arithmetic.c"
284288
>
285289
</File>
290+
<File
291+
RelativePath=".\generated\array.c"
292+
>
293+
</File>
286294
<File
287295
RelativePath=".\generated\binary.c"
288296
>
@@ -315,10 +323,6 @@
315323
RelativePath=".\generated\logic.c"
316324
>
317325
</File>
318-
<File
319-
RelativePath=".\generated\map.c"
320-
>
321-
</File>
322326
<File
323327
RelativePath=".\generated\math.c"
324328
>

toolchain/lc-compile/src/main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ static void full_main(int argc, char *argv[])
118118
}
119119
}
120120

121+
// No built-in modules for the compiler
122+
void* g_builtin_modules[1] = {NULL};
123+
unsigned int g_builtin_module_count = 0;
124+
121125
int main(int argc, char *argv[])
122126
{
123127
//extern int yydebug;

toolchain/vs-rules/lc-bootstrap-compile.rules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<CustomBuildRule
88
Name="lc-bootstrap-compile"
99
DisplayName="lc-bootstrap-compile"
10-
CommandLine="$(SolutionDir)_build\windows\$(ConfigurationName)\lc-bootstrap-compile.exe -bootstrap -template &quot;$(SolutionDir)toolchain\lc-compile\src\grammar.g&quot; -output &quot;$(SolutionDir)toolchain\lc-compile\src\grammar_full.g&quot; &quot;$(SolutionDir)libscript\src\string.mlc&quot; &quot;$(SolutionDir)libscript\src\binary.mlc&quot; &quot;$(SolutionDir)libscript\src\arithmetic.mlc&quot; &quot;$(SolutionDir)libscript\src\bitwise.mlc&quot; &quot;$(SolutionDir)libscript\src\byte.mlc&quot; &quot;$(SolutionDir)libscript\src\char.mlc&quot; &quot;$(SolutionDir)libscript\src\list.mlc&quot; &quot;$(SolutionDir)libscript\src\type-convert.mlc&quot; &quot;$(SolutionDir)libscript\src\logic.mlc&quot; &quot;$(SolutionDir)libscript\src\sort.mlc&quot;"
10+
CommandLine="$(SolutionDir)_build\windows\$(ConfigurationName)\lc-bootstrap-compile.exe -bootstrap -template &quot;$(SolutionDir)toolchain\lc-compile\src\grammar.g&quot; -output &quot;$(SolutionDir)toolchain\lc-compile\src\grammar_full.g&quot; &quot;$(SolutionDir)libscript\src\string.mlc&quot; &quot;$(SolutionDir)libscript\src\binary.mlc&quot; &quot;$(SolutionDir)libscript\src\arithmetic.mlc&quot; &quot;$(SolutionDir)libscript\src\bitwise.mlc&quot; &quot;$(SolutionDir)libscript\src\byte.mlc&quot; &quot;$(SolutionDir)libscript\src\char.mlc&quot; &quot;$(SolutionDir)libscript\src\list.mlc&quot; &quot;$(SolutionDir)libscript\src\type-convert.mlc&quot; &quot;$(SolutionDir)libscript\src\logic.mlc&quot; &quot;$(SolutionDir)libscript\src\sort.mlc&quot; &quot;$(SolutionDir)libscript\src\array.mlc&quot; &quot;$(SolutionDir)engine\src\canvas.mlc&quot;"
1111
Outputs="grammar_full.g"
1212
AdditionalDependencies="$(SolutionDir)libscript\src\*.mlc"
1313
FileExtensions="*.g;*.mlc"

0 commit comments

Comments
 (0)