Mailing List Archive

r3683 - trunk/boilerplater/lib/Boilerplater
Author: creamyg
Date: 2008-07-30 19:20:14 -0700 (Wed, 30 Jul 2008)
New Revision: 3683

Modified:
trunk/boilerplater/lib/Boilerplater/Method.pm
trunk/boilerplater/lib/Boilerplater/Type.pm
Log:
Fix callback function generator so that CharBufs are translated back and forth
to the native string type, both as arguments and as return types.


Modified: trunk/boilerplater/lib/Boilerplater/Method.pm
===================================================================
--- trunk/boilerplater/lib/Boilerplater/Method.pm 2008-07-31 02:14:42 UTC (rev 3682)
+++ trunk/boilerplater/lib/Boilerplater/Method.pm 2008-07-31 02:20:14 UTC (rev 3683)
@@ -248,9 +248,10 @@
my $name = $var->get_name;
my $type = $var->get_type;
my $param
- = $type->is_object ? qq|KINO_ARG_OBJ("$name", $name)|
- : $type->is_integer ? qq|KINO_ARG_I32("$name", $name)|
- : qq|KINO_ARG_F("$name", $name)|;
+ = $type->is_string_type ? qq|KINO_ARG_STR("$name", $name)|
+ : $type->is_object ? qq|KINO_ARG_OBJ("$name", $name)|
+ : $type->is_integer ? qq|KINO_ARG_I32("$name", $name)|
+ : qq|KINO_ARG_F("$name", $name)|;
push @params, $param;
}
return join( ', ', 'self', qq|"$micro_name"|, $num_params, @params );
@@ -292,12 +293,16 @@
my $callback_params = _callback_params($self);
my $params = $self->{param_list}->to_c;
my $return_type = $self->{return_type}->to_c;
+ my $cb_func_name
+ = $self->{return_type}->is_string_type
+ ? 'kino_Native_callback_str'
+ : 'kino_Native_callback_obj';
if ( $self->incremented ) {
return <<END_CALLBACK_DEF;
$return_type
$full_func_name($params)
{
- return ($return_type)kino_Native_callback_obj($callback_params);
+ return ($return_type)$cb_func_name($callback_params);
}
END_CALLBACK_DEF
}
@@ -306,7 +311,7 @@
$return_type
$full_func_name($params)
{
- $return_type retval = ($return_type)kino_Native_callback_obj($callback_params);
+ $return_type retval = ($return_type)$cb_func_name($callback_params);
KINO_REFCOUNT_DEC(retval);
return retval;
}

Modified: trunk/boilerplater/lib/Boilerplater/Type.pm
===================================================================
--- trunk/boilerplater/lib/Boilerplater/Type.pm 2008-07-31 02:14:42 UTC (rev 3682)
+++ trunk/boilerplater/lib/Boilerplater/Type.pm 2008-07-31 02:20:14 UTC (rev 3683)
@@ -87,6 +87,13 @@
sub is_integer { shift->{is_integer} }
sub is_floating { shift->{is_floating} }

+sub is_string_type {
+ my $self = shift;
+ return 0 unless $self->{is_object};
+ return 0 unless $self->{specifier} =~ /CharBuf/;
+ return 1;
+}
+
sub equals {
my ( $self, $other ) = @_;
return 0 unless $self->{indirection} == $other->{indirection};


_______________________________________________
kinosearch-commits mailing list
kinosearch-commits@rectangular.com
http://www.rectangular.com/mailman/listinfo/kinosearch-commits