Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | /* Copyright (C) 2014 Matthew Fluet. |
2 | * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh | |
3 | * Jagannathan, and Stephen Weeks. | |
4 | * Copyright (C) 1997-2000 NEC Research Institute. | |
5 | * | |
6 | * MLton is released under a BSD-style license. | |
7 | * See the file MLton-LICENSE for details. | |
8 | */ | |
9 | ||
10 | #ifndef _COMMON_MAIN_H_ | |
11 | #define _COMMON_MAIN_H_ | |
12 | ||
13 | #include "mlton-main.h" | |
14 | ||
15 | #define MLTON_GC_INTERNAL_TYPES | |
16 | #define MLTON_GC_INTERNAL_BASIS | |
17 | #include "platform.h" | |
18 | ||
19 | /* The label must be declared as weak because gcc's optimizer may prove that | |
20 | * the code that declares the label is dead and hence eliminate the declaration. | |
21 | */ | |
22 | #define DeclareProfileLabel(l) \ | |
23 | extern char l __attribute__ ((weak)) | |
24 | ||
25 | #define BeginVectorInits static struct GC_vectorInit vectorInits[] = { | |
26 | #define VectorInitElem(es, gi, l, w) { es, gi, l, w }, | |
27 | #define EndVectorInits }; | |
28 | ||
29 | #define LoadArray(a, f) if (fread (a, sizeof(*a), cardof(a), f) != cardof(a)) return -1; | |
30 | #define SaveArray(a, f) if (fwrite(a, sizeof(*a), cardof(a), f) != cardof(a)) return -1; | |
31 | ||
32 | PRIVATE Pointer gcStateAddress; | |
33 | ||
34 | #define Initialize(al, mg, mfs, mmc, pk, ps) \ | |
35 | gcStateAddress = (pointer)&gcState; \ | |
36 | gcState.alignment = al; \ | |
37 | gcState.atMLtons = atMLtons; \ | |
38 | gcState.atMLtonsLength = cardof(atMLtons); \ | |
39 | gcState.frameLayouts = frameLayouts; \ | |
40 | gcState.frameLayoutsLength = cardof(frameLayouts); \ | |
41 | gcState.globals = (objptr*)globalObjptr; \ | |
42 | gcState.globalsLength = cardof(globalObjptr); \ | |
43 | gcState.loadGlobals = loadGlobals; \ | |
44 | gcState.magic = mg; \ | |
45 | gcState.maxFrameSize = mfs; \ | |
46 | gcState.mutatorMarksCards = mmc; \ | |
47 | gcState.objectTypes = objectTypes; \ | |
48 | gcState.objectTypesLength = cardof(objectTypes); \ | |
49 | gcState.returnAddressToFrameIndex = returnAddressToFrameIndex; \ | |
50 | gcState.saveGlobals = saveGlobals; \ | |
51 | gcState.vectorInits = vectorInits; \ | |
52 | gcState.vectorInitsLength = cardof(vectorInits); \ | |
53 | gcState.sourceMaps.frameSources = frameSources; \ | |
54 | gcState.sourceMaps.frameSourcesLength = cardof(frameSources); \ | |
55 | gcState.sourceMaps.sourceLabels = sourceLabels; \ | |
56 | gcState.sourceMaps.sourceLabelsLength = cardof(sourceLabels); \ | |
57 | gcState.sourceMaps.sourceNames = sourceNames; \ | |
58 | gcState.sourceMaps.sourceNamesLength = cardof(sourceNames); \ | |
59 | gcState.sourceMaps.sourceSeqs = sourceSeqs; \ | |
60 | gcState.sourceMaps.sourceSeqsLength = cardof(sourceSeqs); \ | |
61 | gcState.sourceMaps.sources = sources; \ | |
62 | gcState.sourceMaps.sourcesLength = cardof(sources); \ | |
63 | gcState.profiling.kind = pk; \ | |
64 | gcState.profiling.stack = ps; \ | |
65 | MLton_init (argc, argv, &gcState); \ | |
66 | ||
67 | #define LIB_PASTE(x,y) x ## y | |
68 | #define LIB_OPEN(x) LIB_PASTE(x, _open) | |
69 | #define LIB_CLOSE(x) LIB_PASTE(x, _close) | |
70 | ||
71 | static void MLton_callFromC (); | |
72 | ||
73 | #endif /* #ifndef _COMMON_MAIN_H_ */ |