Navigation Menu

Skip to content

Commit

Permalink
fix return value of set on an array
Browse files Browse the repository at this point in the history
  • Loading branch information
coke committed Jun 25, 2010
1 parent 32a24fc commit a6a25c1
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions src/Partcl/commands/main.pm
Expand Up @@ -434,6 +434,8 @@ our sub set(*@args) {
my $value := @args[1];

# Does it look like foo(bar) ?
# XXX Can we use the variable term in the grammar for this?
my $result;
if pir::ord__isi($varname, -1) == 41 && pir::index__iss($varname, '(' ) != -1 {
# find the variable name and key name
my $left_paren := pir::index__iss($varname, '(');
Expand All @@ -447,33 +449,32 @@ our sub set(*@args) {
lexpad = find_dynamic_lex '%LEXPAD'
%r = vivify lexpad, varname, ['TclArray']
};
if !pir::isa($var, 'TclArray') {
error("can't set \"$varname\": variable isn't array");
}

if pir::defined($value) {
$var{$keyname} := $value;

}
return '';
$result := $var{$keyname};
} else {
# scalar

my $var := Q:PIR {
$result := Q:PIR {
.local pmc varname, lexpad
varname = find_lex '$varname'
lexpad = find_dynamic_lex '%LEXPAD'
%r = vivify lexpad, varname, ['Undef']
};
if pir::isa($var, 'TclArray') {
if pir::isa($result, 'TclArray') {
error("can't set \"$varname\": variable is array");
} elsif pir::defined($value) {
pir::copy__0PP($var, $value)
} elsif ! pir::defined($var) {
pir::copy__0PP($result, $value)
} elsif ! pir::defined($result) {
error("can't read \"$varname\": no such variable");
}
return $var;

}
$result;
}

our sub socket(*@args) {
Expand Down

0 comments on commit a6a25c1

Please sign in to comment.