You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2014/07/26 15:36:13 UTC

[3/3] git commit: Include OBJ_HEAD only when needed

Include OBJ_HEAD only when needed

If there's an ancestor from a different parcel, the OBJ_HEAD is already
part of that parcel's ivars struct.


Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/d33f6013
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/d33f6013
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/d33f6013

Branch: refs/heads/ivars_fixes
Commit: d33f601308c2cf750e8f4caa134c1fbd807dd55e
Parents: 6e1e407
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Fri Jul 25 18:27:00 2014 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Sat Jul 26 15:34:52 2014 +0200

----------------------------------------------------------------------
 compiler/src/CFCBindClass.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/d33f6013/compiler/src/CFCBindClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBindClass.c b/compiler/src/CFCBindClass.c
index b767f19..4b24629 100644
--- a/compiler/src/CFCBindClass.c
+++ b/compiler/src/CFCBindClass.c
@@ -423,6 +423,7 @@ CFCBindClass_to_c_data(CFCBindClass *self) {
 static char*
 S_struct_definition(CFCBindClass *self) {
     CFCClass   *const client = self->client;
+    char       *member_decs  = CFCUtil_strdup("");
     const char *struct_sym   = NULL;
 
     // Try to find first ancestor from a different parcel.
@@ -436,6 +437,8 @@ S_struct_definition(CFCBindClass *self) {
     if (!ancestor) {
         // All ancestors are in the same parcel. Populate full struct sym.
         struct_sym = CFCClass_full_struct_sym(client);
+        // Add object head.
+        member_decs = CFCUtil_cat(member_decs, "    CFISH_OBJ_HEAD\n", NULL);
     }
     else {
         // There's an ancestor from a different parcel. Populate ivars struct.
@@ -447,16 +450,16 @@ S_struct_definition(CFCBindClass *self) {
 
     // Add all member variables declared by classes in this package.
     CFCVariable **member_vars = CFCClass_member_vars(client);
-    char *member_decs = CFCUtil_strdup("");
     for (int i = num_non_package_members; member_vars[i] != NULL; i++) {
         const char *member_dec = CFCVariable_local_declaration(member_vars[i]);
-        size_t needed = strlen(member_decs) + strlen(member_dec) + 10;
-        member_decs = (char*)REALLOCATE(member_decs, needed);
-        strcat(member_decs, "\n    ");
-        strcat(member_decs, member_dec);
+        member_decs
+            = CFCUtil_cat(member_decs, "    ", member_dec, "\n", NULL);
     }
 
-    char pattern[] = "struct %s {\n    CFISH_OBJ_HEAD%s\n};\n";
+    char pattern[] =
+        "struct %s {\n"
+        "%s"
+        "};\n";
     char *struct_def = CFCUtil_sprintf(pattern, struct_sym, member_decs);
 
     FREEMEM(member_decs);