[Rt-commit] [svn] r1018 - in mzscheme: . Inline-MzScheme/lib/Inline
autrijus at pallas.eruditorum.org
autrijus at pallas.eruditorum.org
Mon Jun 7 12:03:32 EDT 2004
Author: autrijus
Date: Mon Jun 7 12:03:32 2004
New Revision: 1018
Modified:
mzscheme/ (props changed)
mzscheme/Inline-MzScheme/lib/Inline/MzScheme.pm
Log:
----------------------------------------------------------------------
r5459 at not: autrijus | 2004-06-07T16:03:44.979660Z
* True type inflection from perl sode on passed args.
----------------------------------------------------------------------
Modified: mzscheme/Inline-MzScheme/lib/Inline/MzScheme.pm
==============================================================================
--- mzscheme/Inline-MzScheme/lib/Inline/MzScheme.pm (original)
+++ mzscheme/Inline-MzScheme/lib/Inline/MzScheme.pm Mon Jun 7 12:03:32 2004
@@ -4,8 +4,8 @@
use strict;
+use B ();
use Inline ();
-use Scalar::Util ();
use Language::MzScheme ();
use Carp qw(croak confess);
@@ -93,24 +93,15 @@
# try to lookup a procedure object
my $sym = Language::MzScheme::scheme_intern_symbol($name) or next;
- my $proc = Language::MzScheme::scheme_eval($sym, $env) or next;
+ my $proc = Language::MzScheme::scheme_lookup_global($sym, $env) or next;
Language::MzScheme::SCHEME_PROCP($proc) or next;
no strict 'refs';
*{"${pkg}::$name"} = sub {
- my $list = join(
- ' ',
- map {
- Scalar::Util::looks_like_number($_) ? $_ : do {
- my $str = $_;
- $str =~ s/(?:["\\])/\\/g;
- qq("$str");
- };
- } @_
- );
+ my $list = [map $self->pscalar_to_sobject($_), @_];
my $out = Language::MzScheme::scheme_make_string_output_port() or return;
- my $rv = Language::MzScheme::scheme_eval_string("($name $list)", $env) or return;
+ my $rv = Language::MzScheme::scheme_apply($proc, scalar @$list, $list) or return;
Language::MzScheme::scheme_display($rv, $out);
return Language::MzScheme::scheme_get_string_output($out);
@@ -119,6 +110,24 @@
}
+sub pscalar_to_sobject {
+ my $self = shift;
+ my $flags = B::svref_2object(\$_[0])->FLAGS;
+
+ if ($flags & B::SVf_IOK()) {
+ return Language::MzScheme::scheme_make_integer_value($_[0]);
+ }
+ elsif ($flags & B::SVf_NOK()) {
+ return Language::MzScheme::scheme_make_double($_[0]);
+ }
+ elsif ($flags & B::SVf_POK()) {
+ return Language::MzScheme::scheme_make_string($_[0]);
+ }
+ else {
+ die "Passing reference value into MzScheme is currently unsupported\n";
+ }
+}
+
# no info implementation yet
sub info { }
More information about the Rt-commit
mailing list