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.