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/16 22:11:02 UTC

[lucy-commits] svn commit: r1071397 - in /incubator/lucy/trunk/clownfish: lib/Clownfish.xs lib/Clownfish/Dumpable.pm lib/Clownfish/ParamList.pm lib/Clownfish/Parser.pm src/CFCParamList.c src/CFCParamList.h

Author: marvin
Date: Wed Feb 16 21:11:01 2011
New Revision: 1071397

URL: http://svn.apache.org/viewvc?rev=1071397&view=rev
Log:
Add add_param() method to Clownfish::ParamList and simplify its constructor.

Modified:
    incubator/lucy/trunk/clownfish/lib/Clownfish.xs
    incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm
    incubator/lucy/trunk/clownfish/lib/Clownfish/ParamList.pm
    incubator/lucy/trunk/clownfish/lib/Clownfish/Parser.pm
    incubator/lucy/trunk/clownfish/src/CFCParamList.c
    incubator/lucy/trunk/clownfish/src/CFCParamList.h

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish.xs
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish.xs?rev=1071397&r1=1071396&r2=1071397&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish.xs (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish.xs Wed Feb 16 21:11:01 2011
@@ -341,13 +341,11 @@ PPCODE:
 MODULE = Clownfish    PACKAGE = Clownfish::ParamList
 
 SV*
-_new(klass, variables, values, variadic)
+_new(klass, variadic)
     const char *klass;
-    SV *variables;
-    SV *values;
     int variadic;
 CODE:
-    CFCParamList *self = CFCParamList_new(variables, values, variadic);
+    CFCParamList *self = CFCParamList_new(variadic);
     RETVAL = newSV(0);
 	sv_setref_pv(RETVAL, klass, (void*)self);
 OUTPUT: RETVAL
@@ -359,6 +357,14 @@ PPCODE:
     CFCParamList_destroy(self);
 
 void
+add_param(self, variable, value)
+    CFCParamList *self;
+    SV *variable;
+    SV *value;
+PPCODE:
+    CFCParamList_add_param(self, variable, value);
+
+void
 _set_or_get(self, ...)
     CFCParamList *self;
 ALIAS:
@@ -369,10 +375,10 @@ PPCODE:
 {
     START_SET_OR_GET_SWITCH
         case 2:
-            retval = newSVsv((SV*)CFCParamList_get_variables(self));
+            retval = newRV((SV*)CFCParamList_get_variables(self));
             break;
         case 4:
-            retval = newSVsv((SV*)CFCParamList_get_initial_values(self));
+            retval = newRV((SV*)CFCParamList_get_initial_values(self));
             break;
         case 6:
             retval = newSViv(CFCParamList_variadic(self));

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm?rev=1071397&r1=1071396&r2=1071397&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Dumpable.pm Wed Feb 16 21:11:01 2011
@@ -69,7 +69,8 @@ sub _make_method_obj {
 
     my $param_list;
     if ( $dump_or_load eq 'Dump' ) {
-        $param_list = Clownfish::ParamList->new( variables => [$self_var], );
+        $param_list = Clownfish::ParamList->new;
+        $param_list->add_param( $self_var, undef );
     }
     else {
         my $dump_type = Clownfish::Type->new_object(
@@ -82,8 +83,9 @@ sub _make_method_obj {
             parcel    => $class->get_parcel,
             micro_sym => 'dump',
         );
-        $param_list = Clownfish::ParamList->new(
-            variables => [ $self_var, $dump_var ], );
+        $param_list = Clownfish::ParamList->new;
+        $param_list->add_param( $self_var, undef );
+        $param_list->add_param( $dump_var, undef );
     }
 
     return Clownfish::Method->new(

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/ParamList.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/ParamList.pm?rev=1071397&r1=1071396&r2=1071397&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/ParamList.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/ParamList.pm Wed Feb 16 21:11:01 2011
@@ -21,44 +21,14 @@ use Clownfish::Variable;
 use Clownfish::Util qw( verify_args );
 use Carp;
 
-our %new_PARAMS = (
-    variables      => undef,
-    initial_values => undef,
-    variadic       => undef,
-);
+our %new_PARAMS = ( variadic => undef, );
 
 sub new {
     my ( $either, %args ) = @_;
     verify_args( \%new_PARAMS, %args ) or confess $@;
     my $class_name = ref($either) || $either;
-    my $variables  = delete $args{variables};
-    my $values     = delete $args{initial_values};
     my $variadic   = delete $args{variadic} || 0;
-
-    # Validate variables.
-    confess "variables must be an arrayref"
-        unless ref($variables) eq 'ARRAY';
-    for my $var (@$variables) {
-        confess "invalid variable: '$var'"
-            unless ref($var) && $var->isa("Clownfish::Variable");
-    }
-
-    # Validate or init initial_values.
-    if ( defined $values ) {
-        confess "variables must be an arrayref"
-            unless ref($values) eq 'ARRAY';
-        my $num_init = scalar @$values;
-        my $num_vars = scalar @$variables;
-        confess("mismatch of num vars and init values: $num_vars $num_init")
-            unless $num_init == $num_vars;
-    }
-    else {
-        my @initial_values;
-        $#initial_values = $#$variables;
-        $values          = \@initial_values;
-    }
-
-    return $class_name->_new( $variables, $values, $variadic );
+    return $class_name->_new($variadic);
 }
 
 sub num_vars           { scalar @{ shift->get_variables } }
@@ -91,21 +61,28 @@ Clownfish::ParamList - parameter list.
 
 =head2 new
 
-    my $type = Clownfish::ParamList->new(
-        variables      => \@vars,    # required
-        initial_values => \@vals,    # default: undef
-        variadic       => 1,         # default: false
+    my $param_list = Clownfish::ParamList->new(
+        variadic => 1,    # default: false
     );
 
 =over
 
-=item * B<variables> - An array where each element is a
-L<Clownfish::Variable>. 
+=item * B<variadic> - Should be true if the function is variadic.
+
+=back
 
-=item * B<initial_values> - If supplied, an array of default values, one for
-each variable.
+=head2 add_param
 
-=item * B<variadic> - Should be true if the function is variadic.
+    $param_list->add_param( $variable, $value );
+
+Add a parameter to the ParamList.
+
+=over
+
+=item * B<variable> - A L<Clownfish::Variable>. 
+
+=item * B<value> - The default value for the parameter, which should be undef
+if there is no such value and the parameter is required.
 
 =back
 

Modified: incubator/lucy/trunk/clownfish/lib/Clownfish/Parser.pm
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/lib/Clownfish/Parser.pm?rev=1071397&r1=1071396&r2=1071397&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/lib/Clownfish/Parser.pm (original)
+++ incubator/lucy/trunk/clownfish/lib/Clownfish/Parser.pm Wed Feb 16 21:11:01 2011
@@ -423,13 +423,11 @@ sub new_var {
 
 sub new_param_list {
     my ( undef, $param_list_elems, $variadic ) = @_;
-    my @vars = map { $_->[0] } @$param_list_elems;
-    my @vals = map { $_->[1] } @$param_list_elems;
-    return Clownfish::ParamList->new(
-        variables      => \@vars,
-        initial_values => \@vals,
-        variadic       => $variadic,
-    );
+    my $param_list = Clownfish::ParamList->new( variadic => $variadic, );
+    for my $param (@$param_list_elems) {
+        $param_list->add_param( $param->[0], $param->[1] );
+    }
+    return $param_list;
 }
 
 sub new_sub {

Modified: incubator/lucy/trunk/clownfish/src/CFCParamList.c
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCParamList.c?rev=1071397&r1=1071396&r2=1071397&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCParamList.c (original)
+++ incubator/lucy/trunk/clownfish/src/CFCParamList.c Wed Feb 16 21:11:01 2011
@@ -28,24 +28,30 @@ struct CFCParamList {
 };
 
 CFCParamList*
-CFCParamList_new(void *variables, void *values, int variadic)
+CFCParamList_new(int variadic)
 {
     CFCParamList *self = (CFCParamList*)malloc(sizeof(CFCParamList));
     if (!self) { croak("malloc failed"); }
-    return CFCParamList_init(self, variables, values, variadic);
+    return CFCParamList_init(self, variadic);
 }
 
 CFCParamList*
-CFCParamList_init(CFCParamList *self, void *variables, void *values, 
-                  int variadic)
+CFCParamList_init(CFCParamList *self, int variadic)
 {
-    self->variables   = newSVsv((SV*)variables);
-    self->values      = newSVsv((SV*)values);
+    self->variables   = newAV();
+    self->values      = newAV();
     self->variadic    = variadic;
     return self;
 }
 
 void
+CFCParamList_add_param(CFCParamList *self, void *variable, void *value)
+{
+    av_push((AV*)self->variables, newSVsv((SV*)variable));
+    av_push((AV*)self->values,    newSVsv((SV*)value));
+}
+
+void
 CFCParamList_destroy(CFCParamList *self)
 {
     SvREFCNT_dec((SV*)self->variables);

Modified: incubator/lucy/trunk/clownfish/src/CFCParamList.h
URL: http://svn.apache.org/viewvc/incubator/lucy/trunk/clownfish/src/CFCParamList.h?rev=1071397&r1=1071396&r2=1071397&view=diff
==============================================================================
--- incubator/lucy/trunk/clownfish/src/CFCParamList.h (original)
+++ incubator/lucy/trunk/clownfish/src/CFCParamList.h Wed Feb 16 21:11:01 2011
@@ -17,15 +17,17 @@
 typedef struct CFCParamList CFCParamList;
 
 CFCParamList*
-CFCParamList_new(void *variables, void *initial_values, int variadic);
+CFCParamList_new(int variadic);
 
 CFCParamList*
-CFCParamList_init(CFCParamList *self, void *variables, void *initial_values,
-                  int variadic);
+CFCParamList_init(CFCParamList *self, int variadic);
 
 void
 CFCParamList_destroy(CFCParamList *self);
 
+void
+CFCParamList_add_param(CFCParamList *self, void *variable, void *value);
+
 void*
 CFCParamList_get_variables(CFCParamList *self);