You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by ma...@apache.org on 2015/02/13 22:46:00 UTC
[10/16] lucy-clownfish git commit: Move many Clownfish defs out of
Obj.cfh.
Move many Clownfish defs out of Obj.cfh.
Refcounting, SUPER dispatch, and so on belong to Clownfish as a whole --
not to Obj specifically.
Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/886c3472
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/886c3472
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/886c3472
Branch: refs/heads/master
Commit: 886c34726ace60bfbdc749eafe619f78e940e8d9
Parents: 436a685
Author: Marvin Humphrey <ma...@rectangular.com>
Authored: Sat Feb 7 15:49:53 2015 -0800
Committer: Marvin Humphrey <ma...@rectangular.com>
Committed: Sat Feb 7 15:49:53 2015 -0800
----------------------------------------------------------------------
compiler/src/CFCBindCore.c | 76 +++++++++++++++++++++++++++++++++++--
runtime/core/Clownfish/Obj.cfh | 76 -------------------------------------
2 files changed, 73 insertions(+), 79 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/886c3472/compiler/src/CFCBindCore.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBindCore.c b/compiler/src/CFCBindCore.c
index 2bf6119..80080b5 100644
--- a/compiler/src/CFCBindCore.c
+++ b/compiler/src/CFCBindCore.c
@@ -185,7 +185,7 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
"#include \"cfish_hostdefs.h\"\n";
// Special definitions for Clownfish parcel.
- const char *cfish_defs =
+ const char *cfish_defs_1 =
"#define CFISH_UNUSED_VAR(var) ((void)var)\n"
"#define CFISH_UNREACHABLE_RETURN(type) return (type)0\n"
"\n"
@@ -234,6 +234,70 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
" return cfish_method(*parent_ptr, offset);\n"
"}\n"
"\n"
+ "typedef void\n"
+ "(*cfish_destroy_t)(void *vself);\n"
+ "extern CFISH_VISIBLE size_t CFISH_Obj_Destroy_OFFSET;\n"
+ "\n"
+ "/** Invoke the [](cfish:.Destroy) method found in `klass` on\n"
+ " * `self`.\n"
+ " *\n"
+ " * TODO: Eliminate this function if we can arrive at a proper SUPER syntax.\n"
+ " */\n"
+ "static CFISH_INLINE void\n"
+ "cfish_super_destroy(void *vself, cfish_Class *klass) {\n"
+ " cfish_Obj *self = (cfish_Obj*)vself;\n"
+ " if (self != NULL) {\n"
+ " cfish_destroy_t super_destroy\n"
+ " = (cfish_destroy_t)cfish_super_method(klass, CFISH_Obj_Destroy_OFFSET);\n"
+ " super_destroy(self);\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "#define CFISH_SUPER_DESTROY(_self, _class) \\\n"
+ " cfish_super_destroy(_self, _class)\n"
+ "\n"
+ "extern CFISH_VISIBLE cfish_Obj*\n"
+ "cfish_inc_refcount(void *vself);\n"
+ "\n"
+ "/** NULL-safe invocation invocation of `cfish_inc_refcount`.\n"
+ " *\n"
+ " * @return NULL if `self` is NULL, otherwise the return value\n"
+ " * of `cfish_inc_refcount`.\n"
+ " */\n"
+ "static CFISH_INLINE cfish_Obj*\n"
+ "cfish_incref(void *vself) {\n"
+ " if (vself != NULL) { return cfish_inc_refcount(vself); }\n"
+ " else { return NULL; }\n"
+ "}\n"
+ "\n"
+ "#define CFISH_INCREF(_self) cfish_incref(_self)\n"
+ "#define CFISH_INCREF_NN(_self) cfish_inc_refcount(_self)\n"
+ "\n"
+ "extern CFISH_VISIBLE uint32_t\n"
+ "cfish_dec_refcount(void *vself);\n"
+ "\n"
+ "/** NULL-safe invocation of `cfish_dec_refcount`.\n"
+ " *\n"
+ " * @return NULL if `self` is NULL, otherwise the return value\n"
+ " * of `cfish_dec_refcount`.\n"
+ " */\n"
+ "static CFISH_INLINE uint32_t\n"
+ "cfish_decref(void *vself) {\n"
+ " if (vself != NULL) { return cfish_dec_refcount(vself); }\n"
+ " else { return 0; }\n"
+ "}\n"
+ "\n"
+ "#define CFISH_DECREF(_self) cfish_decref(_self)\n"
+ "#define CFISH_DECREF_NN(_self) cfish_dec_refcount(_self)\n"
+ "\n"
+ "extern CFISH_VISIBLE uint32_t\n"
+ "cfish_get_refcount(void *vself);\n"
+ "\n"
+ "#define CFISH_REFCOUNT_NN(_self) \\\n"
+ " cfish_get_refcount(_self)\n"
+ "\n"
+ ;
+ const char *cfish_defs_2 =
"/* Structs for Class initialization.\n"
" */\n"
"\n"
@@ -274,17 +338,23 @@ S_write_parcel_h(CFCBindCore *self, CFCParcel *parcel) {
" #define UNREACHABLE_RETURN CFISH_UNREACHABLE_RETURN\n"
" #define METHOD_PTR CFISH_METHOD_PTR\n"
" #define SUPER_METHOD_PTR CFISH_SUPER_METHOD_PTR\n"
+ " #define SUPER_DESTROY(_self, _class) CFISH_SUPER_DESTROY(_self, _class)\n"
+ " #define INCREF(_self) CFISH_INCREF(_self)\n"
+ " #define INCREF_NN(_self) CFISH_INCREF_NN(_self)\n"
+ " #define DECREF(_self) CFISH_DECREF(_self)\n"
+ " #define DECREF_NN(_self) CFISH_DECREF_NN(_self)\n"
+ " #define REFCOUNT_NN(_self) CFISH_REFCOUNT_NN(_self)\n"
"#endif\n"
"\n";
const char *extra_defs;
char *extra_includes;
if (strcmp(prefix, "cfish_") == 0) {
- extra_defs = cfish_defs;
+ extra_defs = CFCUtil_sprintf("%s%s", cfish_defs_1, cfish_defs_2);
extra_includes = CFCUtil_strdup(cfish_includes);
}
else {
- extra_defs = "";
+ extra_defs = CFCUtil_strdup("");
extra_includes = CFCUtil_strdup("");
// Include parcel.h of prerequisite parcels.
http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/886c3472/runtime/core/Clownfish/Obj.cfh
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Obj.cfh b/runtime/core/Clownfish/Obj.cfh
index 2feadfa..7fcc894 100644
--- a/runtime/core/Clownfish/Obj.cfh
+++ b/runtime/core/Clownfish/Obj.cfh
@@ -111,79 +111,3 @@ public class Clownfish::Obj {
Mimic(Obj *self, Obj *other);
}
-__C__
-
-typedef void
-(*cfish_destroy_t)(void *vself);
-extern CFISH_VISIBLE size_t CFISH_Obj_Destroy_OFFSET;
-
-/** Invoke the [](cfish:.Destroy) method found in `klass` on
- * `self`.
- *
- * TODO: Eliminate this function if we can arrive at a proper SUPER syntax.
- */
-static CFISH_INLINE void
-cfish_super_destroy(void *vself, cfish_Class *klass) {
- cfish_Obj *self = (cfish_Obj*)vself;
- if (self != NULL) {
- cfish_destroy_t super_destroy
- = (cfish_destroy_t)cfish_super_method(klass, CFISH_Obj_Destroy_OFFSET);
- super_destroy(self);
- }
-}
-
-#define CFISH_SUPER_DESTROY(_self, _class) \
- cfish_super_destroy(_self, _class)
-
-extern CFISH_VISIBLE cfish_Obj*
-cfish_inc_refcount(void *vself);
-
-/** NULL-safe invocation invocation of `cfish_inc_refcount`.
- *
- * @return NULL if `self` is NULL, otherwise the return value
- * of `cfish_inc_refcount`.
- */
-static CFISH_INLINE cfish_Obj*
-cfish_incref(void *vself) {
- if (vself != NULL) { return cfish_inc_refcount(vself); }
- else { return NULL; }
-}
-
-#define CFISH_INCREF(_self) cfish_incref(_self)
-#define CFISH_INCREF_NN(_self) cfish_inc_refcount(_self)
-
-extern CFISH_VISIBLE uint32_t
-cfish_dec_refcount(void *vself);
-
-/** NULL-safe invocation of `cfish_dec_refcount`.
- *
- * @return NULL if `self` is NULL, otherwise the return value
- * of `cfish_dec_refcount`.
- */
-static CFISH_INLINE uint32_t
-cfish_decref(void *vself) {
- if (vself != NULL) { return cfish_dec_refcount(vself); }
- else { return 0; }
-}
-
-#define CFISH_DECREF(_self) cfish_decref(_self)
-#define CFISH_DECREF_NN(_self) cfish_dec_refcount(_self)
-
-extern CFISH_VISIBLE uint32_t
-cfish_get_refcount(void *vself);
-
-#define CFISH_REFCOUNT_NN(_self) \
- cfish_get_refcount(_self)
-
-#ifdef CFISH_USE_SHORT_NAMES
- #define SUPER_DESTROY(_self, _class) CFISH_SUPER_DESTROY(_self, _class)
- #define INCREF(_self) CFISH_INCREF(_self)
- #define INCREF_NN(_self) CFISH_INCREF_NN(_self)
- #define DECREF(_self) CFISH_DECREF(_self)
- #define DECREF_NN(_self) CFISH_DECREF_NN(_self)
- #define REFCOUNT_NN(_self) CFISH_REFCOUNT_NN(_self)
-#endif
-
-__END_C__
-
-