* kit sizes from getting too big.
*/
-/* $Header: evalargs.xc,v 3.0.1.2 89/11/11 04:33:05 lwall Locked $
+/* $Header: evalargs.xc,v 3.0.1.4 90/02/28 17:38:37 lwall Locked $
*
* $Log: evalargs.xc,v $
+ * Revision 3.0.1.4 90/02/28 17:38:37 lwall
+ * patch9: $#foo -= 2 didn't work
+ *
+ * Revision 3.0.1.3 89/11/17 15:25:07 lwall
+ * patch5: constant numeric subscripts disappeared in ?:
+ *
* Revision 3.0.1.2 89/11/11 04:33:05 lwall
* patch2: Configure now locates csh
*
break;
case A_LARYSTAB:
++sp;
+ switch (optype) {
+ case O_ITEM2: argtype = 2; break;
+ case O_ITEM3: argtype = 3; break;
+ default: argtype = anum; break;
+ }
str = afetch(stab_array(argptr.arg_stab),
- arg[anum].arg_len - arybase, TRUE);
+ arg[argtype].arg_len - arybase, TRUE);
#ifdef DEBUGGING
if (debug & 8) {
(void)sprintf(buf,"LARYSTAB $%s[%d]",stab_name(argptr.arg_stab),
- arg[anum].arg_len);
+ arg[argtype].arg_len);
tmps = buf;
}
#endif
goto do_crement;
case A_ARYSTAB:
+ switch (optype) {
+ case O_ITEM2: argtype = 2; break;
+ case O_ITEM3: argtype = 3; break;
+ default: argtype = anum; break;
+ }
st[++sp] = afetch(stab_array(argptr.arg_stab),
- arg[anum].arg_len - arybase, FALSE);
+ arg[argtype].arg_len - arybase, FALSE);
if (!st[sp])
st[sp] = &str_undef;
#ifdef DEBUGGING
if (debug & 8) {
(void)sprintf(buf,"ARYSTAB $%s[%d]",stab_name(argptr.arg_stab),
- arg[anum].arg_len);
+ arg[argtype].arg_len);
tmps = buf;
}
#endif
++sp;
stab = argptr.arg_stab;
str = stab_array(argptr.arg_stab)->ary_magic;
- if (argflags & (AF_PRE|AF_POST))
+ if (optype != O_SASSIGN || argflags & (AF_PRE|AF_POST))
str_numset(str,(double)(stab_array(stab)->ary_fill+arybase));
#ifdef DEBUGGING
tmps = "LARYLEN";
break;
case A_WANTARRAY:
{
- extern int wantarray;
-
if (wantarray == G_ARRAY)
st[++sp] = &str_yes;
else
str_cat(tmpstr,
"|tr -s ' \t\f\r' '\\012\\012\\012\\012'|");
#endif
- (void)do_open(last_in_stab,tmpstr->str_ptr);
+ (void)do_open(last_in_stab,tmpstr->str_ptr,
+ tmpstr->str_cur);
fp = stab_io(last_in_stab)->ifp;
str_free(tmpstr);
}