Log Message:
-----------
Handle arbitrary variable names
Modified Files:
--------------
pg/lib:
Parser.pm
pg/lib/Parser:
Variable.pm
Revision Data
-------------
Index: Parser.pm
===================================================================
RCS file: /webwork/cvs/system/pg/lib/Parser.pm,v
retrieving revision 1.55
retrieving revision 1.56
diff -Llib/Parser.pm -Llib/Parser.pm -u -r1.55 -r1.56
--- lib/Parser.pm
+++ lib/Parser.pm
@@ -718,13 +718,24 @@
$vars = [sort(keys %{$self->{variables}})] unless $vars;
$vars = [$vars] unless ref($vars) eq 'ARRAY';
my $n = scalar(@{$vars}); my $vnames = ''; my %isArg;
+ my $variables = $self->context->variables;
if ($n > 0) {
my @v = ();
- foreach my $x (@{$vars}) {CORE::push(@v,"\$".$x); $isArg{$x} = 1}
+ foreach my $x (@{$vars}) {
+ my $perl = $variables->get($x)->{perl} || "\$".$x;
+ substr($perl,1) =~ s/([^a-z0-9_])/"_".ord($1)/ge;
+ CORE::push(@v,$perl);
+ $isArg{$x} = 1;
+ }
$vnames = "my (".join(',',@v).") = \@_;";
}
- foreach my $x (keys %{$self->{variables}})
- {$vnames .= "\n my \$$x = main::Formula('$x');" unless $isArg{$x}}
+ foreach my $x (keys %{$self->{variables}}) {
+ unless ($isArg{$x}) {
+ my $perl = $variables->get($x)->{perl} || "\$".$x;
+ substr($perl,1) =~ s/([^a-z0-9_])/"_".ord($1)/ge;
+ $vnames .= "\n my $perl = main::Formula('$x');";
+ }
+ }
my $context = $self->context;
my $fn = eval
"package main;
Index: Variable.pm
===================================================================
RCS file: /webwork/cvs/system/pg/lib/Parser/Variable.pm,v
retrieving revision 1.14
retrieving revision 1.15
diff -Llib/Parser/Variable.pm -Llib/Parser/Variable.pm -u -r1.14 -r1.15
--- lib/Parser/Variable.pm
+++ lib/Parser/Variable.pm
@@ -116,8 +116,9 @@
my $self = shift;
my $value = $self->{equation}{values}{$self->{name}};
return $value if defined($value);
- return $self->{def}{perl} if defined $self->{def}{perl};
- return '$'.$self->{name};
+ my $perl = $self->{def}{perl} || '$'.$self->{name};
+ substr($perl,1) =~ s/([^a-z0-9_])/"_".ord($1)/ge;
+ return $perl;
}
#########################################################################
|