Differences From
Artifact [f8bd0edc4d]:
3 3 * 🄯 AGPLv3
4 4 * ? gdjn entry point
5 5 */
6 6
7 7 #include "gdjn.h"
8 8 #include "janet-lang.h"
9 9 #include "janet-rsrc.h"
10 +#include "vm.h"
10 11
11 12 gdjn* gdjn_ctx = nullptr;
13 +
14 +void* gdjn_janet_malloc (size_t sz) { return _alloc(char, sz); }
15 +void gdjn_janet_free (void* ptr) { _free(ptr); }
16 +void* gdjn_janet_realloc(void* ptr, size_t sz)
17 + { return _realloc(ptr, char, sz); }
18 +void* gdjn_janet_calloc (size_t n, size_t esz) {
19 + const size_t sz = esz*n;
20 + void* v = _alloc(char, sz);
21 + memset(v, 0, sz);
22 + return v;
23 +}
12 24
13 25 static void
14 26 gdjn_init
15 27 ( void* data,
16 28 GDExtensionInitializationLevel lvl
17 29 ) {
18 30 if (lvl != GDEXTENSION_INITIALIZATION_SCENE) return;
19 31 gdjn_types_fetch(&gdjn_ctx -> gd.t, gdjn_ctx -> gd.getProc);
20 32
21 33 const gdjn_typeDB* c = &gdjn_ctx -> gd.t;
22 34
35 + janet_init();
36 + gdjn_ctx -> jn.api = gdjn_vm_api_build_core();
37 + janet_gcroot(janet_wrap_table(gdjn_ctx -> jn.api));
38 +
23 39 gdjn_unit_janetLang_load();
24 40 gdjn_unit_janetRsrc_load();
25 41
26 42 gdjn_ctx -> gd.janetLang_inst = gdjn_class_JanetLang_new() -> self;
27 43
28 44 auto e = gd_engine_registerScriptLanguage(
29 45 c -> objects.engine,
................................................................................
46 62 false
47 63 );
48 64 gd_resourceSaver_addResourceFormatSaver(
49 65 gdjn_ctx -> gd.t.objects.resourceSaver,
50 66 gdjn_ctx -> gd.janetSaver_inst,
51 67 false
52 68 );
53 - /*
54 - gd_variant ret;
55 - c -> gd_object.methodBindPtrcall(
56 - c -> gd_m_engine.registerScriptLanguage_ptr,
57 - c -> objects.engine,
58 - (GDExtensionConstTypePtr[]) {
59 - &gdjn_ctx -> gd.janetLang_inst,
60 - }, &ret
61 - );
62 - */
63 69
64 70 _t(array).empty(&gdjn_ctx -> gd.dox, nullptr);
65 71 gd_stringName empty = {};
66 72 _t(stringName).empty(&empty, nullptr);
67 73 _t(array).setTyped(&gdjn_ctx -> gd.dox,
68 74 GDEXTENSION_VARIANT_TYPE_DICTIONARY, &empty, &empty);
69 75
................................................................................
75 81 ( void* data,
76 82 GDExtensionInitializationLevel lvl
77 83 ) {
78 84 if (lvl != GDEXTENSION_INITIALIZATION_SCENE) return;
79 85 /* we get double frees otherwise */
80 86
81 87 const gdjn_typeDB* c = &gdjn_ctx -> gd.t;
88 + janet_gcunroot(janet_wrap_table(gdjn_ctx -> jn.api));
82 89
83 90 gd_engine_unregisterScriptLanguage(
84 91 c -> objects.engine,
85 92 gdjn_ctx -> gd.janetLang_inst
86 93 );
87 94 /*
88 95 GDExtensionTypePtr ret;
................................................................................
99 106 gd_resourceSaver_removeResourceFormatSaver(
100 107 gdjn_ctx -> gd.t.objects.resourceSaver,
101 108 gdjn_ctx -> gd.janetSaver_inst
102 109 );
103 110 /* gd_refCounted_unreference(gdjn_ctx -> gd.janetLoader_inst); */
104 111 /* gd_refCounted_unreference(gdjn_ctx -> gd.janetSaver_inst); */
105 112 gdjn_class_JanetLang_del(nullptr, gdjn_ctx -> gd.janetLang_inst);
113 +
114 + janet_deinit();
106 115
107 116 gdjn_ctx -> gd.free(gdjn_ctx);
108 117 gdjn_ctx = nullptr;
109 118 }
110 119
111 120
112 121 gdBool