Browse Source

Added a way to automatically call user implemented instance free

Marco Bambini 6 years ago
parent
commit
dac82ba29f
3 changed files with 8 additions and 2 deletions
  1. 1 0
      src/shared/gravity_opcodes.h
  2. 5 0
      src/shared/gravity_value.c
  3. 2 2
      src/shared/gravity_value.h

+ 1 - 0
src/shared/gravity_opcodes.h

@@ -200,6 +200,7 @@ typedef enum {
 #define GRAVITY_INTERNAL_STOREAT_NAME   "storeat"
 #define GRAVITY_INTERNAL_NOTFOUND_NAME  "notfound"
 #define GRAVITY_INTERNAL_EXEC_NAME      "exec"
+#define GRAVITY_INTERNAL_FREE_NAME      "free"
 #define GRAVITY_INTERNAL_LOOP_NAME      "loop"
 
 #define GRAVITY_CLASS_INT_NAME          "Int"

+ 5 - 0
src/shared/gravity_value.c

@@ -1617,6 +1617,11 @@ void gravity_instance_free (gravity_vm *vm, gravity_instance_t *i) {
     if (i->xdata && vm) {
         gravity_delegate_t *delegate = gravity_vm_delegate(vm);
         if (delegate->bridge_free) delegate->bridge_free(vm, (gravity_object_t *)i);
+        else {
+            // check if closure implements a free method
+            gravity_closure_t *closure = gravity_instance_lookup_event (i, GRAVITY_INTERNAL_FREE_NAME);
+            if (closure) gravity_vm_runclosure(vm, closure, VALUE_FROM_OBJECT(i), NULL, 0);
+        }
     }
 
     if (i->ivars) mem_free(i->ivars);

+ 2 - 2
src/shared/gravity_value.h

@@ -66,8 +66,8 @@
 extern "C" {
 #endif
 
-#define GRAVITY_VERSION						"0.6.1"     // git tag 0.6.1
-#define GRAVITY_VERSION_NUMBER				0x000601    // git push --tags
+#define GRAVITY_VERSION						"0.6.2"     // git tag 0.6.2
+#define GRAVITY_VERSION_NUMBER				0x000602    // git push --tags
 #define GRAVITY_BUILD_DATE                  __DATE__
 
 #ifndef GRAVITY_ENABLE_DOUBLE