gdjn  Diff

Differences From Artifact [f8bd0edc4d]:

To Artifact [65eb39af07]:


     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