diff --git a/src/Partcl/Actions.pm b/src/Partcl/Actions.pm index 6c622c9..fa6315a 100644 --- a/src/Partcl/Actions.pm +++ b/src/Partcl/Actions.pm @@ -164,16 +164,24 @@ sub concat_atoms(@atoms) { method variable:sym($/) { if $ { # Array access - # XXX needs error handling. my $variable := PAST::Var.new( :scope, PAST::Var.new( :name, :scope ), ~$ ); - make PAST::Var.new( :scope, - $variable, - ~$[0] - ); + make PAST::Op.new( :pasttype, + PAST::Op.new( :pirop, + PAST::Op.new( :pirop, $variable), + PAST::Val.new( :value) + ), + PAST::Var.new( :scope, + $variable, + ~$[0] + ), + PAST::Op.new( :pasttype, :name, + "can't read \"$({$[0]})\": variable isn't array" + ) + ) } else { # Scalar diff --git a/t/tcl_var_subst.t b/t/tcl_var_subst.t index 20f7416..f24ba88 100755 --- a/t/tcl_var_subst.t +++ b/t/tcl_var_subst.t @@ -37,7 +37,7 @@ eval_is { catch {unset a} set a 2 set b $a(b) -} {can't read "a(b)": variable isn't array} {try to use scalar as array} {TODO NQPRX} +} {can't read "a(b)": variable isn't array} {try to use scalar as array} eval_is { catch {unset a}