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 2011/02/18 20:08:20 UTC

[lucy-commits] svn commit: r1072104 - in /incubator/lucy/trunk/clownfish: lib/Clownfish/Function.pm src/CFCCBlock.c src/CFCFunction.c src/CFCParamList.c src/CFCSymbol.c src/CFCUtil.c src/CFCUtil.h src/CFCVariable.c

Author: marvin
Date: Fri Feb 18 19:08:19 2011
New Revision: 1072104

URL: http://svn.apache.org/viewvc?rev=1072104&view=rev
Log:
Introduce NULL-checks at the C level for arguments which used to be checked
via typemap code at the Perl/C boundary.

Modified:
    incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm
    incubator/lucy/trunk/clownfish/src/CFCCBlock.c
    incubator/lucy/trunk/clownfish/src/CFCFunction.c
    incubator/lucy/trunk/clownfish/src/CFCParamList.c
    incubator/lucy/trunk/clownfish/src/CFCSymbol.c
    incubator/lucy/trunk/clownfish/src/CFCUtil.c
    incubator/lucy/trunk/clownfish/src/CFCUtil.h
    incubator/lucy/trunk/clownfish/src/CFCVariable.c

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Function.pm Fri Feb 18 19:08:19 2011
@@ -47,16 +47,10 @@ sub new {
             return_type param_list docucomment inline ) } );
 
     # Validate.
-    for (qw( return_type class_name param_list )) {
-        my $meth_name = "get_$_";
-        confess("$_ is mandatory") unless defined $self->$meth_name;
-    }
+    confess("class_name is mandatory")
+        unless defined $self->get_class_name;
     confess( "Invalid micro_sym: '" . $self->micro_sym . "'" )
         unless $self->micro_sym =~ /^[a-z0-9_]+$/;
-    confess 'param_list must be a ParamList object'
-        unless a_isa_b( $self->get_param_list, "Clownfish::ParamList" );
-    confess 'return_type must be a Type object'
-        unless a_isa_b( $self->get_return_type, "Clownfish::Type" );
 
     return $self;
 }

Modified: incubator/lucy/trunk/clownfish/src/CFCCBlock.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCCBlock.c?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCCBlock.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCCBlock.c Fri Feb 18 19:08:19 2011
@@ -40,6 +40,7 @@ CFCCBlock_new(const char *contents)
 CFCCBlock*
 CFCCBlock_init(CFCCBlock *self, const char *contents) 
 {
+    CFCUTIL_NULL_CHECK(contents);
     self->contents = CFCUtil_strdup(contents);
     return self;
 }

Modified: incubator/lucy/trunk/clownfish/src/CFCFunction.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCFunction.c?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCFunction.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCFunction.c Fri Feb 18 19:08:19 2011
@@ -25,6 +25,7 @@
 #include "CFCType.h"
 #include "CFCParamList.h"
 #include "CFCDocuComment.h"
+#include "CFCUtil.h"
 
 CFCFunction*
 CFCFunction_new(CFCParcel *parcel, const char *exposure,
@@ -48,6 +49,8 @@ CFCFunction_init(CFCFunction *self, CFCP
 {
     CFCSymbol_init((CFCSymbol*)self, parcel, exposure, class_name,
         class_cnick, micro_sym);
+    CFCUTIL_NULL_CHECK(return_type);
+    CFCUTIL_NULL_CHECK(param_list);
     self->return_type = (CFCType*)CFCBase_incref((CFCBase*)return_type);
     self->param_list  = (CFCParamList*)CFCBase_incref((CFCBase*)param_list);
     self->docucomment = (CFCDocuComment*)CFCBase_incref((CFCBase*)docucomment);

Modified: incubator/lucy/trunk/clownfish/src/CFCParamList.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCParamList.c?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCParamList.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCParamList.c Fri Feb 18 19:08:19 2011
@@ -55,6 +55,7 @@ void
 CFCParamList_add_param(CFCParamList *self, CFCVariable *variable, 
                        const char *value)
 {
+    CFCUTIL_NULL_CHECK(variable);
     self->num_vars++;
     size_t amount = (self->num_vars + 1) * sizeof(void*);
     self->variables = (CFCVariable**)realloc(self->variables, amount);

Modified: incubator/lucy/trunk/clownfish/src/CFCSymbol.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCSymbol.c?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCSymbol.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCSymbol.c Fri Feb 18 19:08:19 2011
@@ -131,6 +131,7 @@ CFCSymbol_init(CFCSymbol *self, struct C
                const char *exposure, const char *class_name, 
                const char *class_cnick, const char *micro_sym)
 {
+    CFCUTIL_NULL_CHECK(parcel);
     self->parcel = parcel;
 
     // Validate exposure.

Modified: incubator/lucy/trunk/clownfish/src/CFCUtil.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCUtil.c?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCUtil.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCUtil.c Fri Feb 18 19:08:19 2011
@@ -39,6 +39,14 @@ CFCUtil_make_perl_obj(void *ptr, const c
     return  inner_obj;
 }
 
+void
+CFCUtil_null_check(const void *arg, const char *name, const char *file, int line)
+{
+    if (!arg) {
+        croak("%s cannot be NULL at %s line %d", name, file, line);
+    }
+}
+
 char*
 CFCUtil_strdup(const char *string)
 {

Modified: incubator/lucy/trunk/clownfish/src/CFCUtil.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCUtil.h?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCUtil.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCUtil.h Fri Feb 18 19:08:19 2011
@@ -23,6 +23,13 @@
 void*
 CFCUtil_make_perl_obj(void *ptr, const char *klass);
 
+/** Throw an error if the supplied argument is NULL.
+ */
+void
+CFCUtil_null_check(const void *arg, const char *name, const char *file, int line);
+#define CFCUTIL_NULL_CHECK(arg) \
+    CFCUtil_null_check(arg, #arg, __FILE__, __LINE__)
+
 /** Portable, NULL-safe implementation of strdup().
  */
 char*

Modified: incubator/lucy/trunk/clownfish/src/CFCVariable.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCVariable.c?rev=1072104&r1=1072103&r2=1072104&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCVariable.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCVariable.c Fri Feb 18 19:08:19 2011
@@ -65,6 +65,7 @@ CFCVariable_init(CFCVariable *self, stru
         class_cnick, micro_sym);
 
     // Assign type.
+    CFCUTIL_NULL_CHECK(type);
     self->type = (CFCType*)CFCBase_incref((CFCBase*)type);
 
     // Cache various C string representations.