win@wrkof.UUCP (Winfried Koenig) (09/13/89)
--------------
On my Interactive UNIX Rel. 2.0.2 Perl 3.0 dumps core
on the command:
write(); # no filehandle, write to stdout
With my patch for eval.c it seems to work.
The same code is also used for close(), but this
command may be not valide without filehandle.
--------------
With Perl 2.0 the illegal command
write; # illegal
had the same effect as
write();
but with Perl 3.0 the illegal version is no-op
and no syntax error. Any help?
--------------
*** eval.c.dist Wed Sep 6 02:36:05 1989
--- eval.c Tue Sep 12 19:07:00 1989
***************
*** 409,415 ****
STABSET(str);
break;
case O_WRITE:
! if (maxarg == 0)
stab = defoutstab;
else if ((arg[1].arg_type & A_MASK) == A_WORD)
stab = arg[1].arg_ptr.arg_stab;
--- 409,415 ----
STABSET(str);
break;
case O_WRITE:
! if (maxarg == 1)
stab = defoutstab;
else if ((arg[1].arg_type & A_MASK) == A_WORD)
--
Winfried Koenig Phone: +49 69 868707
Arendsstrasse 12 Smart: win@incom.de
D-6050 Offenbach Bang: {unido,watzman}!wrkof!win
West-Germanylwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (09/15/89)
In article <399@wrkof.UUCP> win@incom.de (Winfried Koenig) writes:
: --------------
: On my Interactive UNIX Rel. 2.0.2 Perl 3.0 dumps core
: on the command:
:
: write(); # no filehandle, write to stdout
:
: With my patch for eval.c it seems to work.
: ...
: --------------
: *** eval.c.dist Wed Sep 6 02:36:05 1989
: --- eval.c Tue Sep 12 19:07:00 1989
: ***************
: *** 409,415 ****
: STABSET(str);
: break;
: case O_WRITE:
: ! if (maxarg == 0)
: stab = defoutstab;
: else if ((arg[1].arg_type & A_MASK) == A_WORD)
: stab = arg[1].arg_ptr.arg_stab;
: --- 409,415 ----
: STABSET(str);
: break;
: case O_WRITE:
: ! if (maxarg == 1)
: stab = defoutstab;
: else if ((arg[1].arg_type & A_MASK) == A_WORD)
:
A more correct patch would be:
*** eval.c.old Wed Sep 13 13:20:22 1989
--- eval.c Wed Sep 13 13:24:10 1989
***************
*** 415,422 ****
case O_WRITE:
if (maxarg == 0)
stab = defoutstab;
! else if ((arg[1].arg_type & A_MASK) == A_WORD)
! stab = arg[1].arg_ptr.arg_stab;
else
stab = stabent(str_get(st[1]),TRUE);
if (!stab_io(stab)) {
--- 415,424 ----
case O_WRITE:
if (maxarg == 0)
stab = defoutstab;
! else if ((arg[1].arg_type & A_MASK) == A_WORD) {
! if (!(stab = arg[1].arg_ptr.arg_stab))
! stab = defoutstab;
! }
else
stab = stabent(str_get(st[1]),TRUE);
if (!stab_io(stab)) {