| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
This makes a qw(...) list literal a distinct token type for the
parser, where previously it was munged into a "(",THING,")" sequence.
The change means that qw(...) can't accidentally supply parens to parts
of the grammar that want real parens. Due to many bits of code taking
advantage of that by "foreach my $x qw(...) {}", this patch also includes
a hack to coerce qw(...) to the old-style parenthesised THING, emitting
a deprecation warning along the way.
|
| |
|
|
|
|
|
| |
The third production of <listexprcom>, "expr ','", could never be invoked,
because <expr> can already end with arbitrarily many commas.
|
|
|
|
|
|
| |
There was a broken TOKEN_GETMAD attempting to handle the label preceding a
package-block statement, where no label is actually possible. The correct
behaviour for no label is a no-op, so just remove the TOKEN_GETMAD.
|
|
|
|
|
|
| |
OPs relating to the package name and version were subject to double
freeing during error recovery from an incomplete package block. Fixed by
using the op_latefree mechanism to shift the op free time.
|
|
|
|
|
|
| |
Package block syntax limits the scope of the package declaration to the
attached block. It's cleaner than requiring the declaration to come
inside the block.
|
|
|
|
|
|
| |
VERSION;" statements
Fixes [perl #72432]
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Currently no flags bits are used, and the length is cross-checked against
strlen() on the pointer, but the intent is to re-work the entire pad API to
be UTF-8 aware, from the current situation of char * pointers only.
|
|
|
|
| |
syntax triggered by keywords
|
| |
|
|
|
|
|
| |
Since the version seems unused by MAD in "use", do the same
for "package"...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds support for setting the $VERSION of a namespace
when the namespace is declared with 'package'. It eliminates the
need for 'our $VERSION = ...' and similar constructs. E.g.
package Foo::Bar 1.23;
# $Foo::Bar::VERSION == 1.23
There are several advantages to this:
* VERSION is parsed in *exactly* the same way as 'use NAME VERSION'
* $VERSION is set at compile time
* Eliminates '$VERSION = ...' and 'eval $VERSION' clutter
* As it requires VERSION to be a numeric literal or v-string
literal, it can be statically parsed by toolchain modules
without 'eval' the way MM->parse_version does for '$VERSION = ...'
* Alpha versions with underscores do not need to be quoted; static
parsing will preserve the underscore, but during compilation, Perl
will remove underscores as it does for all numeric literals
During development of this, there was discussion on #corehackers and
elsewhere that this should also allow other metadata to be set such as
"status" (stable/alpha) or "author/authority". On reflection, those
metadata are not very well defined yet and likely should never be
encoded into Perl core parsing so they can be freely changed in the
future. (They could perhaps be achieved via a comment on the same line
as 'package NAME VERSION'.)
Version numbers, however, already have a very specific definition and
use defined in the core through 'use NAME VERSION'. This patch merely
provides appropriate symmetry for setting $VERSION with the exact same
parsing and semantics as 'use'.
It does not break old code with only 'package NAME', but code that
uses 'package NAME VERSION' will need to be restricted to perl 5.11.X.
This is analogous to the change to open() from two-args to three-args.
Users requiring the latest Perl will benefit, and perhaps N years from
now it will become standard practice when Perl 5.12 is targeted the
way that 5.6 is today.
The patch does not prevent 'package NAME VERSION' from being used
multiple times for the same package with different version numbers, but
nothing prevents $VERSION from being modified arbitrarily at runtime,
either, so I see no urgen reason to add limitations or warnings so
long as Perl uses a global $VERSION variable for package version
numbers.
I am posting this patch to the p5p list for discussion and review. If
there seems to be general assent (or lack of dissent), I will go ahead
and commit the patch to blead.
|
|
|
|
|
|
|
| |
The newer bison generated perly.h with a GPL3 or later license statement
rather than the previous GPL2 statement. Our use appears to be subject
to the exception that's immediately below that, so this shouldn't
matter.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Message-Id: <200805101252.11961.chromatic@wgz.org>
p4raw-id: //depot/perl@33858
|
|
|
|
|
|
|
|
|
|
| |
This patch does two things :
- newSTATEOP now nullifies the state op it
just created if OPf_SPECIAL is passed to it
in flags
- the parser now inserts a nullified stateop
in the expression block of an elsif
p4raw-id: //depot/perl@33710
|
|
|
| |
p4raw-id: //depot/perl@33269
|
|
|
| |
p4raw-id: //depot/perl@32054
|
|
|
|
|
|
|
|
|
| |
Change 22306# inadvertently made 'local $[' statement-scoped
rather than block-scoped; so revert that change and add a
different fix. The problem was to ensure that the savestack got
popped correctly while popping errored tokens. We how record the
current value of PL_savestack_ix with each pushed parser state.
p4raw-id: //depot/perl@31615
|
|
|
| |
p4raw-id: //depot/perl@31209
|
|
|
|
|
|
|
|
| |
declaration don't have multiple 'd' keys.
Subject: [PATCH] mad: different key for the locale declarator
Message-Id: <20070508171125.GI17043@ostwald>
p4raw-id: //depot/perl@31208
|
|
|
| |
p4raw-id: //depot/perl@31203
|
|
|
| |
p4raw-id: //depot/perl@31200
|
|
|
| |
p4raw-id: //depot/perl@31134
|
|
|
| |
p4raw-id: //depot/perl@30900
|
|
|
|
|
|
| |
Subject: [PATCH] MAD C-style for loop
Message-Id: <20070321181852.GD31539@ostwald>
p4raw-id: //depot/perl@30676
|
|
|
| |
p4raw-id: //depot/perl@30599
|
|
|
| |
p4raw-id: //depot/perl@29601
|
|
|
| |
p4raw-id: //depot/perl@29569
|
|
|
|
|
|
|
|
|
| |
- fix MAD coredump in tr///
- fix mad coredump in multi-line string literals
- kill some MAD uninit value warnings
- don't allow assignment to $n in perly.y
- make op_dump handle op_latefree flags
p4raw-id: //depot/perl@29548
|
|
|
| |
p4raw-id: //depot/perl@29542
|
|
|
|
|
|
|
|
|
|
|
|
| |
Repeat of change #28319 (backed out by change #28720), this time
freeing ops using the right pad. Also backs out the remempad
parser addition from change #29501; instead a new auxiliary
paser stack is added, which records the current value of
PL_comppad for every state.
p4raw-link: @29501 on //depot/perl: 2af555bf3f2b3ca8e114df3f5f680d40bd24d6bf
p4raw-link: @28720 on //depot/perl: c86b7e916b443ee192c5638ad9d077ad4e244713
p4raw-link: @28319 on //depot/perl: eb7d7d25d2f780edcbedc124a5bdca0d53ad8687
p4raw-id: //depot/perl@29504
|
|
|
|
|
|
| |
Add hook to parser to record current PL_comppad, then use this
when popping ops off the parser stack after parser error
p4raw-id: //depot/perl@29501
|
|
|
|
|
|
| |
and rename to yy_type_tab[]. Then use this table to improve stack
dumping with -Dpv
p4raw-id: //depot/perl@29500
|
|
|
| |
p4raw-id: //depot/perl@29461
|
|
|
| |
p4raw-id: //depot/perl@29455
|
|
|
|
|
|
| |
(that is, a function mimicing an unary op) without parentheses.
Bug reported by Ævar Arnfjörð Bjarmason.
p4raw-id: //depot/perl@29258
|
|
|
|
|
| |
Message-ID: <20061019120412.GA12290@the.earth.li>
p4raw-id: //depot/perl@29053
|
|
|
| |
p4raw-id: //depot/perl@28314
|
|
|
| |
p4raw-id: //depot/perl@27437
|
|
|
|
|
| |
Message-Id: <20051217204431.GB28940@rpc142.cs.man.ac.uk>
p4raw-id: //depot/perl@26400
|
|
|
|
|
|
|
| |
nonassoc, just like the UNIOP token it's patterned after.
(While we're at it, allow to use bison 2.1 to regenerate
the parser files.)
p4raw-id: //depot/perl@25746
|
|
|
|
|
| |
was fixing the overriding of CORE::require
p4raw-id: //depot/perl@25616
|
|
|
|
|
|
|
|
|
|
|
| |
That's because require() isn't overridable at tokenizer-level
like other overridable built-ins, but is handled by the optree
builder. So, find a way to pass the information that require()
was written as CORE::require() to Perl_ck_require. This is
done by adding a new token type REQUIRE and by adding OPf_SPECIAL
to OP_REQUIRE when it's saw as CORE::require in the program text.
This fixes bug [perl #37274] The "CORE" in CORE::require is ignored.
p4raw-id: //depot/perl@25599
|
|
|
| |
p4raw-id: //depot/perl@25530
|