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);