| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
This commit makes the __FILE__, __LINE__ and __PACKAGE__ token parse
the same way as nullary functions.
It adds two extra rules to perly.y to allow the op to be created in
toke.c, instead of directly inside the parser.
|
|
|
|
|
|
|
| |
Move several pad functions into the core API. Document the pad
functions more consistently for perlapi. Fix the interface issues
around delimitation of lexical variable names, providing _pvn, _pvs,
_pv, and _sv forms of pad_add_name and pad_findmy.
|
|
|
|
| |
There’s no arrow there.
|
|
|
|
| |
Merge together many calls to open_new() and read_only_top().
|
|
|
|
| |
Update the SHA256s where necessary in the generated files.
|
|
|
|
|
|
|
| |
bison isn't available everywhere, so we can't simply re-run regen_perly.pl to
verify that perly.{act,h,tab} are up to date. So instead store the SHA-256 of
the input files, and extend t/porting/regen.t to check that the input files
haven't been changed subsequently.
|
|
|
|
|
|
|
|
|
| |
Use safer_open() and read_only_bottom_close_and_rename() from regen_lib.pl
Consistently use 3 argument open and lexical file handles.
A side effect of this change is that the generated files are no longer made
read-only on disk - if this is desirable, then probably better to change
regen_lib.pl so that all generated files are made read-only.
|
|
|
|
|
| |
Liberalise label syntax a little more, by allowing multiple adjacent
labels with no intervening statements, as in "foo: bar: baz:".
|
|
|
|
|
|
| |
New API functions parse_fullexpr(), parse_listexpr(), parse_termexpr(),
and parse_arithexpr(), to parse an expression at various precedence
levels.
|
| |
|
|
|
|
|
| |
Shift the structure of the GRAMPROG production (whole-file grammar)
to more closely match that of the other top-level productions.
|
|
|
|
|
|
| |
The function scope() goes into the API as op_scope(), and mod() goes
into the API as op_lvalue(). Both marked experimental, because their
behaviour is a little quirky and not trivially dequirkable.
|
|
|
|
|
| |
New API function parse_barestmt() parses a pure statement, with no label,
and returns just the statement's core ops, not attaching a state op.
|
|
|
|
|
|
|
|
|
| |
Remove the line number parameter from newWHILEOP() and newFOROP()
functions. Instead, the line number for the impending COP is set by
parser code after constructing the ops. (In fact the parser was doing
this anyway in most cases.) This brings newWHILEOP() and newFOROP()
in line with the other op constructors, in that they do not concern
themselves with COPs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Refactoring of the grammar around statements. New production <barestmt>
encompasses a statement without label. It includes all statement types,
including declarations, with no unnecessary intermediate non-terminals.
It generates an op tree for the statement's content, with no leading
state op. The <fullstmt> production has just one rule, consisting of
optional label followed by <barestmt>. It puts a state op on the front
of the statement's content ops.
To support the regular statement op structure, the op sequence for for(;;)
loops no longer has a second state op between the initialisation and
the loop. Instead, the unstack op type is slightly adapted to achieve
the stack clearing without a state op.
The newFOROP() constructor function no longer generates a state op,
that now being the job of the <fullstmt> production. Consequently it
no longer takes a parameter stating what label is to go in the state op.
This brings it in line with the other op constructors.
|
|
|
|
|
|
|
|
| |
Include <label> in productions before <decl> and <package_block>. This
means that labels can now appear at the beginning of all statement-like
things. There was no technical reason for the restriction of labels
to substantive statements, and that restriction in any case couldn't be
applied to PLUGSTMT-based plugged-in declarations.
|
|
|
|
|
| |
New API function parse_block() parses a code block, including surrounding
braces. The block is a lexical scope, but not inherently a dynamic scope.
|
|
|
|
|
| |
Set PL_expect at the start of parse_fullstmt() as well as at the start
of parse_stmtseq(). Test both.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When recursing into the parser for recursive-descent parsing, put
a special entry on the bracket stack that generates a fake EOF if a
closing bracket belonging to an outer parser frame is seen. This keeps
the bracket stack balanced across a parse_stmtseq() frame, fixing
[perl #78222].
If a recursive-descent parser frame ends by yyunlex()ing an opening
bracket, pop its entry off the bracket stack and stash it in the
forced-token queue, to be revived when the token is re-lexed. This keeps
the bracket stack balanced across a parse_fullstmt() frame.
|
|
|
|
|
|
| |
Put into the API op_append_elem, op_prepend_elem, and op_append_list. All
renamed from op_-less internal names. Parameter types for op_append_list
changed to match the rest of the op API and avoid some casting.
|
|
|
|
|
| |
New API function parse_stmtseq() parses a sequence of statements, up to
closing brace or EOF.
|
|
|
|
|
|
| |
VMS seems to have a 31 character limitation for external symbols. To be able to
fit into that, rename 'coerce_qwlist_to_paren_list' to
'munge_qwlist_to_paren_list'.
|
|
|
|
|
|
|
|
|
|
| |
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
|