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 2015/05/29 12:04:27 UTC

[3/4] lucy-clownfish git commit: Make Obj_Is_A inert

Make Obj_Is_A inert


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

Branch: refs/heads/master
Commit: 5bcc19e06c618535371f4cb363dee676cdbd3855
Parents: b8aa6de
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Wed May 27 18:34:31 2015 +0200
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Thu May 28 17:43:25 2015 +0200

----------------------------------------------------------------------
 compiler/src/CFCBindClass.c                      |  9 ++++++++-
 runtime/core/Clownfish/Blob.c                    |  2 +-
 runtime/core/Clownfish/ByteBuf.c                 |  2 +-
 runtime/core/Clownfish/CharBuf.c                 |  6 +++---
 runtime/core/Clownfish/Hash.c                    |  2 +-
 runtime/core/Clownfish/Num.c                     |  8 ++++----
 runtime/core/Clownfish/Obj.c                     |  2 +-
 runtime/core/Clownfish/Obj.cfh                   |  4 ++--
 runtime/core/Clownfish/String.c                  |  4 ++--
 runtime/core/Clownfish/Test/TestObj.c            | 10 +++++-----
 runtime/core/Clownfish/Vector.c                  |  2 +-
 runtime/go/clownfish/clownfish.go                |  2 +-
 runtime/perl/buildlib/Clownfish/Build/Binding.pm |  6 +-----
 runtime/perl/xs/XSBind.c                         | 18 +++++++++---------
 runtime/ruby/ext/Bind.c                          |  4 ++--
 15 files changed, 42 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/compiler/src/CFCBindClass.c
----------------------------------------------------------------------
diff --git a/compiler/src/CFCBindClass.c b/compiler/src/CFCBindClass.c
index 661ff60..58b7024 100644
--- a/compiler/src/CFCBindClass.c
+++ b/compiler/src/CFCBindClass.c
@@ -669,10 +669,16 @@ S_wrapper_defs(CFCBindClass *self) {
         "static CFISH_INLINE cfish_String*\n"
         "%s%s_get_class_name(%s *self) {\n"
         "    return cfish_Obj_get_class_name((cfish_Obj*)self);\n"
+        "}\n"
+        "\n"
+        "static CFISH_INLINE bool\n"
+        "%s%s_is_a(%s *self, cfish_Class *ancestor) {\n"
+        "    return cfish_Obj_is_a((cfish_Obj*)self, ancestor);\n"
         "}\n";
 
     return CFCUtil_sprintf(pattern,
                            prefix, nickname, struct_sym,
+                           prefix, nickname, struct_sym,
                            prefix, nickname, struct_sym);
 }
 
@@ -777,7 +783,8 @@ S_short_names(CFCBindClass *self) {
     if (strcmp(CFCClass_get_name(client), "Clownfish::Obj") != 0) {
         static const char *wrapped_funcs[] = {
             "get_class",
-            "get_class_name"
+            "get_class_name",
+            "is_a"
         };
         static int num_wrapped_funcs
             = sizeof(wrapped_funcs) / sizeof(wrapped_funcs[0]);

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Blob.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Blob.c b/runtime/core/Clownfish/Blob.c
index d013399..0766396 100644
--- a/runtime/core/Clownfish/Blob.c
+++ b/runtime/core/Clownfish/Blob.c
@@ -103,7 +103,7 @@ bool
 Blob_Equals_IMP(Blob *self, Obj *other) {
     Blob *const twin = (Blob*)other;
     if (twin == self)           { return true; }
-    if (!Obj_Is_A(other, BLOB)) { return false; }
+    if (!Obj_is_a(other, BLOB)) { return false; }
     return SI_equals_bytes(self, twin->buf, twin->size);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/ByteBuf.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/ByteBuf.c b/runtime/core/Clownfish/ByteBuf.c
index d7439f5..f32fa2c 100644
--- a/runtime/core/Clownfish/ByteBuf.c
+++ b/runtime/core/Clownfish/ByteBuf.c
@@ -116,7 +116,7 @@ bool
 BB_Equals_IMP(ByteBuf *self, Obj *other) {
     ByteBuf *const twin = (ByteBuf*)other;
     if (twin == self)              { return true; }
-    if (!Obj_Is_A(other, BYTEBUF)) { return false; }
+    if (!Obj_is_a(other, BYTEBUF)) { return false; }
     return SI_equals_bytes(self, twin->buf, twin->size);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/CharBuf.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/CharBuf.c b/runtime/core/Clownfish/CharBuf.c
index 089390f..e5e3aa2 100644
--- a/runtime/core/Clownfish/CharBuf.c
+++ b/runtime/core/Clownfish/CharBuf.c
@@ -182,7 +182,7 @@ CB_VCatF_IMP(CharBuf *self, const char *pattern, va_list args) {
                         if (!obj) {
                             CB_Cat_Trusted_Utf8(self, "[NULL]", 6);
                         }
-                        else if (Obj_Is_A(obj, STRING)) {
+                        else if (Obj_is_a(obj, STRING)) {
                             CB_Cat(self, (String*)obj);
                         }
                         else {
@@ -341,12 +341,12 @@ void
 CB_Mimic_IMP(CharBuf *self, Obj *other) {
     const char *ptr;
     size_t size;
-    if (Obj_Is_A(other, CHARBUF)) {
+    if (Obj_is_a(other, CHARBUF)) {
         CharBuf *twin = (CharBuf*)other;
         ptr  = twin->ptr;
         size = twin->size;
     }
-    else if (Obj_Is_A(other, STRING)) {
+    else if (Obj_is_a(other, STRING)) {
         String *twin = (String*)other;
         ptr  = twin->ptr;
         size = twin->size;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Hash.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Hash.c b/runtime/core/Clownfish/Hash.c
index 90e8959..54a4c26 100644
--- a/runtime/core/Clownfish/Hash.c
+++ b/runtime/core/Clownfish/Hash.c
@@ -262,7 +262,7 @@ Hash_Equals_IMP(Hash *self, Obj *other) {
     Hash    *twin = (Hash*)other;
 
     if (twin == self)             { return true; }
-    if (!Obj_Is_A(other, HASH))   { return false; }
+    if (!Obj_is_a(other, HASH))   { return false; }
     if (self->size != twin->size) { return false; }
 
     HashEntry *entry       = (HashEntry*)self->entries;

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Num.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Num.c b/runtime/core/Clownfish/Num.c
index aeb9429..d13c242 100644
--- a/runtime/core/Clownfish/Num.c
+++ b/runtime/core/Clownfish/Num.c
@@ -41,7 +41,7 @@ bool
 Num_Equals_IMP(Num *self, Obj *other) {
     Num *twin = (Num*)other;
     if (twin == self) { return true; }
-    if (!Obj_Is_A(other, NUM)) { return false; }
+    if (!Obj_is_a(other, NUM)) { return false; }
     if (Num_To_F64(self) != Num_To_F64(twin)) { return false; }
     if (Num_To_I64(self) != Num_To_I64(twin)) { return false; }
     return true;
@@ -84,7 +84,7 @@ IntNum_init(IntNum *self) {
 
 int32_t
 IntNum_Compare_To_IMP(IntNum *self, Obj *other) {
-    if (!Obj_Is_A(other, INTNUM)) {
+    if (!Obj_is_a(other, INTNUM)) {
         return -Obj_Compare_To(other, (Obj*)self);
     }
     int64_t self_value  = IntNum_To_I64(self);
@@ -283,8 +283,8 @@ bool
 Int64_Equals_IMP(Integer64 *self, Obj *other) {
     Num *twin = (Num*)other;
     if (twin == (Num*)self)         { return true; }
-    if (!Obj_Is_A(other, NUM)) { return false; }
-    if (Num_Is_A(twin, FLOATNUM)) {
+    if (!Obj_is_a(other, NUM)) { return false; }
+    if (Obj_is_a(other, FLOATNUM)) {
         double  floating_val = Num_To_F64(twin);
         int64_t int_val      = (int64_t)floating_val;
         if ((double)int_val != floating_val) { return false; }

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Obj.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Obj.c b/runtime/core/Clownfish/Obj.c
index a1196f8..888ebf4 100644
--- a/runtime/core/Clownfish/Obj.c
+++ b/runtime/core/Clownfish/Obj.c
@@ -43,7 +43,7 @@ Obj_Destroy_IMP(Obj *self) {
 }
 
 bool
-Obj_Is_A_IMP(Obj *self, Class *ancestor) {
+Obj_is_a(Obj *self, Class *ancestor) {
     Class *klass = self ? self->klass : NULL;
 
     while (klass != NULL) {

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Obj.cfh
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Obj.cfh b/runtime/core/Clownfish/Obj.cfh
index 7f4074b..e212ad5 100644
--- a/runtime/core/Clownfish/Obj.cfh
+++ b/runtime/core/Clownfish/Obj.cfh
@@ -75,8 +75,8 @@ public abstract class Clownfish::Obj {
 
     /** Indicate whether the object is a descendent of `ancestor`.
      */
-    public bool
-    Is_A(Obj *self, Class *ancestor);
+    public inert bool
+    is_a(Obj *self, Class *ancestor);
 
     /** Generic stringification: "ClassName@hex_mem_address".
      */

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/String.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/String.c b/runtime/core/Clownfish/String.c
index 382ef6c..a1ac875 100644
--- a/runtime/core/Clownfish/String.c
+++ b/runtime/core/Clownfish/String.c
@@ -353,7 +353,7 @@ bool
 Str_Equals_IMP(String *self, Obj *other) {
     String *const twin = (String*)other;
     if (twin == self)              { return true; }
-    if (!Obj_Is_A(other, STRING)) { return false; }
+    if (!Obj_is_a(other, STRING)) { return false; }
     return Str_Equals_Utf8_IMP(self, twin->ptr, twin->size);
 }
 
@@ -602,7 +602,7 @@ bool
 StrIter_Equals_IMP(StringIterator *self, Obj *other) {
     StringIterator *const twin = (StringIterator*)other;
     if (twin == self)                     { return true; }
-    if (!Obj_Is_A(other, STRINGITERATOR)) { return false; }
+    if (!Obj_is_a(other, STRINGITERATOR)) { return false; }
     return self->string == twin->string
            && self->byte_offset == twin->byte_offset;
 }

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Test/TestObj.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Test/TestObj.c b/runtime/core/Clownfish/Test/TestObj.c
index 42c82fa..c0d25ea 100644
--- a/runtime/core/Clownfish/Test/TestObj.c
+++ b/runtime/core/Clownfish/Test/TestObj.c
@@ -86,13 +86,13 @@ test_Equals(TestBatchRunner *runner) {
 }
 
 static void
-test_Is_A(TestBatchRunner *runner) {
+test_is_a(TestBatchRunner *runner) {
     String *string     = Str_new_from_trusted_utf8("", 0);
     Class  *str_class  = Str_get_class(string);
     String *class_name = Str_get_class_name(string);
 
-    TEST_TRUE(runner, Str_Is_A(string, STRING), "String Is_A String.");
-    TEST_TRUE(runner, Str_Is_A(string, OBJ), "String Is_A Obj.");
+    TEST_TRUE(runner, Str_is_a(string, STRING), "String is_a String.");
+    TEST_TRUE(runner, Str_is_a(string, OBJ), "String is_a Obj.");
     TEST_TRUE(runner, str_class == STRING, "get_class");
     TEST_TRUE(runner, Str_Equals(Class_Get_Name(STRING), (Obj*)class_name),
               "get_class_name");
@@ -122,7 +122,7 @@ S_verify_abstract_error(TestBatchRunner *runner, Err_Attempt_t routine,
     sprintf(message, "%s() is abstract", name);
     Err *error = Err_trap(routine, context);
     TEST_TRUE(runner, error != NULL
-              && Err_Is_A(error, ERR) 
+              && Err_is_a(error, ERR)
               && Str_Find_Utf8(Err_Get_Mess(error), "bstract", 7) != -1,
               message);
     DECREF(error);
@@ -145,7 +145,7 @@ TestObj_Run_IMP(TestObj *self, TestBatchRunner *runner) {
     test_refcounts(runner);
     test_To_String(runner);
     test_Equals(runner);
-    test_Is_A(runner);
+    test_is_a(runner);
     test_abstract_routines(runner);
 }
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/core/Clownfish/Vector.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Vector.c b/runtime/core/Clownfish/Vector.c
index 1fa775c..3f72eea 100644
--- a/runtime/core/Clownfish/Vector.c
+++ b/runtime/core/Clownfish/Vector.c
@@ -256,7 +256,7 @@ bool
 Vec_Equals_IMP(Vector *self, Obj *other) {
     Vector *twin = (Vector*)other;
     if (twin == self)             { return true; }
-    if (!Obj_Is_A(other, VECTOR)) { return false; }
+    if (!Obj_is_a(other, VECTOR)) { return false; }
     if (twin->size != self->size) {
         return false;
     }

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/go/clownfish/clownfish.go
----------------------------------------------------------------------
diff --git a/runtime/go/clownfish/clownfish.go b/runtime/go/clownfish/clownfish.go
index 143c7c6..fa239f0 100644
--- a/runtime/go/clownfish/clownfish.go
+++ b/runtime/go/clownfish/clownfish.go
@@ -97,7 +97,7 @@ func CFStringToGo(ptr unsafe.Pointer) string {
 	if cfString == nil {
 		return ""
 	}
-	if !C.CFISH_Str_Is_A(cfString, C.CFISH_STRING) {
+	if !C.cfish_Str_is_a(cfString, C.CFISH_STRING) {
 		cfString := C.CFISH_Str_To_String(cfString)
 		defer C.cfish_dec_refcount(unsafe.Pointer(cfString))
 	}

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/perl/buildlib/Clownfish/Build/Binding.pm
----------------------------------------------------------------------
diff --git a/runtime/perl/buildlib/Clownfish/Build/Binding.pm b/runtime/perl/buildlib/Clownfish/Build/Binding.pm
index aa9ca76..8097d6b 100644
--- a/runtime/perl/buildlib/Clownfish/Build/Binding.pm
+++ b/runtime/perl/buildlib/Clownfish/Build/Binding.pm
@@ -392,9 +392,6 @@ sub bind_obj {
         To_String
         Equals
     );
-    my @hand_rolled = qw(
-        Is_A
-    );
 
     my $pod_spec = Clownfish::CFC::Binding::Perl::Pod->new;
     my $synopsis = <<'END_SYNOPSIS';
@@ -509,7 +506,7 @@ is_a(self, class_name)
 CODE:
 {
     cfish_Class *target = cfish_Class_fetch_class(class_name);
-    RETVAL = CFISH_Obj_Is_A(self, target);
+    RETVAL = cfish_Obj_is_a(self, target);
 }
 OUTPUT: RETVAL
 END_XS_CODE
@@ -522,7 +519,6 @@ END_XS_CODE
         alias  => 'DESTROY',
         method => 'Destroy',
     );
-    $binding->exclude_method($_) for @hand_rolled;
     $binding->append_xs($xs_code);
     $binding->set_pod_spec($pod_spec);
 

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/perl/xs/XSBind.c
----------------------------------------------------------------------
diff --git a/runtime/perl/xs/XSBind.c b/runtime/perl/xs/XSBind.c
index eca8145..ab2d8ae 100644
--- a/runtime/perl/xs/XSBind.c
+++ b/runtime/perl/xs/XSBind.c
@@ -145,22 +145,22 @@ XSBind_cfish_to_perl(pTHX_ cfish_Obj *obj) {
     if (obj == NULL) {
         return newSV(0);
     }
-    else if (CFISH_Obj_Is_A(obj, CFISH_STRING)) {
+    else if (cfish_Obj_is_a(obj, CFISH_STRING)) {
         return XSBind_str_to_sv(aTHX_ (cfish_String*)obj);
     }
-    else if (CFISH_Obj_Is_A(obj, CFISH_BLOB)) {
+    else if (cfish_Obj_is_a(obj, CFISH_BLOB)) {
         return XSBind_blob_to_sv(aTHX_ (cfish_Blob*)obj);
     }
-    else if (CFISH_Obj_Is_A(obj, CFISH_BYTEBUF)) {
+    else if (cfish_Obj_is_a(obj, CFISH_BYTEBUF)) {
         return XSBind_bb_to_sv(aTHX_ (cfish_ByteBuf*)obj);
     }
-    else if (CFISH_Obj_Is_A(obj, CFISH_VECTOR)) {
+    else if (cfish_Obj_is_a(obj, CFISH_VECTOR)) {
         return S_cfish_array_to_perl_array(aTHX_ (cfish_Vector*)obj);
     }
-    else if (CFISH_Obj_Is_A(obj, CFISH_HASH)) {
+    else if (cfish_Obj_is_a(obj, CFISH_HASH)) {
         return S_cfish_hash_to_perl_hash(aTHX_ (cfish_Hash*)obj);
     }
-    else if (CFISH_Obj_Is_A(obj, CFISH_FLOATNUM)) {
+    else if (cfish_Obj_is_a(obj, CFISH_FLOATNUM)) {
         return newSVnv(CFISH_FloatNum_To_F64((cfish_FloatNum*)obj));
     }
     else if (obj == (cfish_Obj*)CFISH_TRUE) {
@@ -169,15 +169,15 @@ XSBind_cfish_to_perl(pTHX_ cfish_Obj *obj) {
     else if (obj == (cfish_Obj*)CFISH_FALSE) {
         return newSViv(0);
     }
-    else if (sizeof(IV) == 8 && CFISH_Obj_Is_A(obj, CFISH_INTNUM)) {
+    else if (sizeof(IV) == 8 && cfish_Obj_is_a(obj, CFISH_INTNUM)) {
         int64_t num = CFISH_IntNum_To_I64((cfish_IntNum*)obj);
         return newSViv((IV)num);
     }
-    else if (sizeof(IV) == 4 && CFISH_Obj_Is_A(obj, CFISH_INTEGER32)) {
+    else if (sizeof(IV) == 4 && cfish_Obj_is_a(obj, CFISH_INTEGER32)) {
         int32_t num = (int32_t)CFISH_Int32_To_I64((cfish_Integer32*)obj);
         return newSViv((IV)num);
     }
-    else if (sizeof(IV) == 4 && CFISH_Obj_Is_A(obj, CFISH_INTEGER64)) {
+    else if (sizeof(IV) == 4 && cfish_Obj_is_a(obj, CFISH_INTEGER64)) {
         int64_t num = CFISH_Int64_To_I64((cfish_Integer64*)obj);
         return newSVnv((double)num); // lossy
     }

http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/5bcc19e0/runtime/ruby/ext/Bind.c
----------------------------------------------------------------------
diff --git a/runtime/ruby/ext/Bind.c b/runtime/ruby/ext/Bind.c
index fa8a130..a12b1e1 100644
--- a/runtime/ruby/ext/Bind.c
+++ b/runtime/ruby/ext/Bind.c
@@ -20,10 +20,10 @@
 
 VALUE
 Bind_cfish_to_ruby(cfish_Obj *obj) {
-  if (CFISH_Obj_Is_A(obj, CFISH_STRING)) {
+  if (cfish_Obj_is_a(obj, CFISH_STRING)) {
       return Bind_str_to_ruby((cfish_String*)obj);
   }
-  else if (CFISH_Obj_Is_A(obj, CFISH_VECTOR)) {
+  else if (cfish_Obj_is_a(obj, CFISH_VECTOR)) {
       return S_cfish_array_to_ruby_array((cfish_Vector*)obj);
   }
 }