diff options
author | Larry Wall <larry@netlabs.com> | 1993-12-10 00:00:00 +0000 |
---|---|---|
committer | Larry Wall <larry@netlabs.com> | 1993-12-10 00:00:00 +0000 |
commit | ed6116ce9b9d13712ea252ee248b0400653db7f9 (patch) | |
tree | 348e8de37401fa4381f6bfe0989abef2e3b409e0 /toke.c | |
parent | 9bbf408117c16189b372e6657c9e5a15d01ea504 (diff) | |
download | perl-ed6116ce9b9d13712ea252ee248b0400653db7f9.tar.gz |
perl 5.0 alpha 5
[editor's note: the sparc executables have not been included,
and emacs backup files and other cruft such as patch backup files have
been removed. This was reconstructed from a tarball found on the
September 1994 InfoMagic CD]
Diffstat (limited to 'toke.c')
-rw-r--r-- | toke.c | 48 |
1 files changed, 23 insertions, 25 deletions
@@ -168,6 +168,8 @@ no_op(what) char *what; { warn("%s found where operator expected", what); + if (bufptr == SvPVX(linestr)) + warn("\t(Missing semicolon on previous line?)\n", what); } void @@ -433,7 +435,7 @@ SV *sv; if (s == send) return sv; d = s; - delim = SvSTORAGE(sv); + delim = SvIVX(sv); while (s < send) { if (*s == '\\') { if (s + 1 < send && (s[1] == '\\' || s[1] == delim)) @@ -569,7 +571,7 @@ char *start; SV *sv = NEWSV(93, send - start); register char *s = start; register char *d = SvPVX(sv); - char delim = SvSTORAGE(linestr); + char delim = SvIVX(linestr); bool dorange = FALSE; I32 len; char *leave = @@ -951,7 +953,7 @@ yylex() if (bufptr == bufend) return sublex_done(); - if (SvSTORAGE(linestr) == '\'') { + if (SvIVX(linestr) == '\'') { SV *sv = newSVsv(linestr); if (!lex_inpat) sv = q(sv); @@ -1257,14 +1259,14 @@ yylex() if (in_my) { if (strchr(tokenbuf,':')) croak("\"my\" variable %s can't be in a package",tokenbuf); - nextval[nexttoke].opval = newOP(OP_PADHV, 0); + nextval[nexttoke].opval = newOP(OP_PADANY, 0); nextval[nexttoke].opval->op_targ = pad_allocmy(tokenbuf); force_next(PRIVATEREF); TERM('%'); } if (!strchr(tokenbuf,':')) { if (tmp = pad_findmy(tokenbuf)) { - nextval[nexttoke].opval = newOP(OP_PADHV, 0); + nextval[nexttoke].opval = newOP(OP_PADANY, 0); nextval[nexttoke].opval->op_targ = tmp; force_next(PRIVATEREF); TERM('%'); @@ -1506,22 +1508,17 @@ yylex() if (in_my) { if (strchr(tokenbuf,':')) croak("\"my\" variable %s can't be in a package",tokenbuf); - nextval[nexttoke].opval = newOP(OP_PADSV, 0); + nextval[nexttoke].opval = newOP(OP_PADANY, 0); nextval[nexttoke].opval->op_targ = pad_allocmy(tokenbuf); force_next(PRIVATEREF); } else if (!strchr(tokenbuf,':')) { - I32 optype = OP_PADSV; - if (*s == '[') { + if (*s == '[') tokenbuf[0] = '@'; - optype = OP_PADAV; - } - else if (*s == '{') { + else if (*s == '{') tokenbuf[0] = '%'; - optype = OP_PADHV; - } if (tmp = pad_findmy(tokenbuf)) { - nextval[nexttoke].opval = newOP(optype, 0); + nextval[nexttoke].opval = newOP(OP_PADANY, 0); nextval[nexttoke].opval->op_targ = tmp; force_next(PRIVATEREF); } @@ -1548,19 +1545,16 @@ yylex() if (in_my) { if (strchr(tokenbuf,':')) croak("\"my\" variable %s can't be in a package",tokenbuf); - nextval[nexttoke].opval = newOP(OP_PADAV, 0); + nextval[nexttoke].opval = newOP(OP_PADANY, 0); nextval[nexttoke].opval->op_targ = pad_allocmy(tokenbuf); force_next(PRIVATEREF); TERM('@'); } else if (!strchr(tokenbuf,':')) { - I32 optype = OP_PADAV; - if (*s == '{') { + if (*s == '{') tokenbuf[0] = '%'; - optype = OP_PADHV; - } if (tmp = pad_findmy(tokenbuf)) { - nextval[nexttoke].opval = newOP(optype, 0); + nextval[nexttoke].opval = newOP(OP_PADANY, 0); nextval[nexttoke].opval->op_targ = tmp; force_next(PRIVATEREF); TERM('@'); @@ -1843,6 +1837,7 @@ yylex() goto fake_eof; } + case KEY_DESTROY: case KEY_BEGIN: case KEY_END: s = skipspace(s); @@ -2275,8 +2270,8 @@ yylex() if (!s) croak("EOF in string"); yylval.ival = OP_SCALAR; - if (SvSTORAGE(lex_stuff) == '\'') - SvSTORAGE(lex_stuff) = 0; /* qq'$foo' should intepolate */ + if (SvIVX(lex_stuff) == '\'') + SvIVX(lex_stuff) = 0; /* qq'$foo' should intepolate */ TERM(sublex_start()); case KEY_qx: @@ -2690,6 +2685,9 @@ I32 len; break; } break; + case 'D': + if (strEQ(d,"DESTROY")) return KEY_DESTROY; + break; case 'd': switch (len) { case 2: @@ -3834,8 +3832,8 @@ char *start; multi_close = term; sv = NEWSV(87,80); - sv_upgrade(sv, SVt_PV); - SvSTORAGE(sv) = term; + sv_upgrade(sv, SVt_PVIV); + SvIVX(sv) = term; SvPOK_only(sv); /* validate pointer */ s++; for (;;) { @@ -4000,7 +3998,7 @@ char *start; *d = '\0'; sv = NEWSV(92,0); value = atof(tokenbuf); - tryi32 = (I32)value; + tryi32 = I_32(value); if (!floatit && (double)tryi32 == value) sv_setiv(sv,tryi32); else |