diff options
author | Mike Pall <mike> | 2013-05-24 17:44:55 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2013-05-24 17:44:55 +0200 |
commit | 992f7d4b71d0f39266c9b2d7f8ce28c278afb667 (patch) | |
tree | f12f1ec3a7df3dee5035b499a98292a2f78aa8f1 /src/lib_ffi.c | |
parent | 4c1f9dd0f7fdbf79ed62588c64417d6238fd5c51 (diff) | |
download | luajit-992f7d4b71d0f39266c9b2d7f8ce28c278afb667.tar.gz luajit-992f7d4b71d0f39266c9b2d7f8ce28c278afb667.tar.bz2 luajit-992f7d4b71d0f39266c9b2d7f8ce28c278afb667.zip |
FFI: Refactor ffi.gc()/__gc. Compile ffi.gc(cdata, nil), too.
Diffstat (limited to 'src/lib_ffi.c')
-rw-r--r-- | src/lib_ffi.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/src/lib_ffi.c b/src/lib_ffi.c index 562255aa..3310b205 100644 --- a/src/lib_ffi.c +++ b/src/lib_ffi.c | |||
@@ -768,19 +768,11 @@ LJLIB_CF(ffi_gc) LJLIB_REC(.) | |||
768 | GCcdata *cd = ffi_checkcdata(L, 1); | 768 | GCcdata *cd = ffi_checkcdata(L, 1); |
769 | TValue *fin = lj_lib_checkany(L, 2); | 769 | TValue *fin = lj_lib_checkany(L, 2); |
770 | CTState *cts = ctype_cts(L); | 770 | CTState *cts = ctype_cts(L); |
771 | GCtab *t = cts->finalizer; | ||
772 | CType *ct = ctype_raw(cts, cd->ctypeid); | 771 | CType *ct = ctype_raw(cts, cd->ctypeid); |
773 | if (!(ctype_isptr(ct->info) || ctype_isstruct(ct->info) || | 772 | if (!(ctype_isptr(ct->info) || ctype_isstruct(ct->info) || |
774 | ctype_isrefarray(ct->info))) | 773 | ctype_isrefarray(ct->info))) |
775 | lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE); | 774 | lj_err_arg(L, 1, LJ_ERR_FFI_INVTYPE); |
776 | if (gcref(t->metatable)) { /* Update finalizer table, if still enabled. */ | 775 | lj_cdata_setfin(L, cd, gcval(fin), itype(fin)); |
777 | copyTV(L, lj_tab_set(L, t, L->base), fin); | ||
778 | lj_gc_anybarriert(L, t); | ||
779 | if (!tvisnil(fin)) | ||
780 | cd->marked |= LJ_GC_CDATA_FIN; | ||
781 | else | ||
782 | cd->marked &= ~LJ_GC_CDATA_FIN; | ||
783 | } | ||
784 | L->top = L->base+1; /* Pass through the cdata object. */ | 776 | L->top = L->base+1; /* Pass through the cdata object. */ |
785 | return 1; | 777 | return 1; |
786 | } | 778 | } |