Perlito5
view release on metacpan or search on metacpan
lib/Perlito5/Grammar/Block.pm view on Meta::CPAN
# Do not edit this file - Generated by Perlito5 9.027
{
package main;
package Perlito5::Grammar::Block;
use Perlito5::Grammar::Expression ;
use Perlito5::Grammar::Scope ;
use Perlito5::AST::BeginScratchpad ;
use Perlito5::AST::Captures ;
use Perlito5::FoldConstant ;
use strict ;
our %Named_block = ("BEGIN", 1, "UNITCHECK", 1, "CHECK", 1, "INIT", 1, "END", 1, "AUTOLOAD", 1, "DESTROY", 1);
sub Perlito5::Grammar::Block::block {
my $str = $_[0];
my $pos = $_[1];
my $m = Perlito5::Grammar::Space::opt_ws($str, $pos);
$pos = $m->{"to"};
if ($str->[$pos] ne "{") {;
return
}
$pos++;
Perlito5::Grammar::Scope::check_variable_declarations();
Perlito5::Grammar::Scope::create_new_compile_time_scope();
$m = Perlito5::Grammar::exp_stmts($str, $pos);
if (!$m) {;
Perlito5::Compiler::error("syntax error")
}
$pos = $m->{"to"};
my $capture = Perlito5::Match::flat($m);
$m = Perlito5::Grammar::Space::opt_ws($str, $pos);
$pos = $m->{"to"};
if ($str->[$pos] ne "}") {;
Perlito5::Compiler::error("syntax error")
}
$m->{"to"} = $pos + 1;
$m->{"capture"} = Perlito5::AST::Block::->new("stmts", $capture, "sig", undef);
Perlito5::Grammar::Scope::end_compile_time_scope();
return $m
}
sub Perlito5::Grammar::Block::closure_block {
my $str = $_[0];
my $pos = $_[1];
my $m = Perlito5::Grammar::Space::opt_ws($str, $pos);
$pos = $m->{"to"};
if ($str->[$pos] ne "{") {;
return
}
$pos++;
Perlito5::Grammar::Scope::check_variable_declarations();
Perlito5::Grammar::Scope::create_new_compile_time_scope();
local $Perlito5::CLOSURE_SCOPE = $#Perlito5::BASE_SCOPE;
$m = Perlito5::Grammar::exp_stmts($str, $pos);
if (!$m) {;
Perlito5::Compiler::error("syntax error")
}
$pos = $m->{"to"};
my $capture = Perlito5::Match::flat($m);
$m = Perlito5::Grammar::Space::opt_ws($str, $pos);
$pos = $m->{"to"};
if ($str->[$pos] ne "}") {;
Perlito5::Compiler::error("syntax error")
}
$m->{"to"} = $pos + 1;
$m->{"capture"} = Perlito5::AST::Block::->new("stmts", $capture, "sig", undef);
Perlito5::Grammar::Scope::end_compile_time_scope();
return $m
}
sub Perlito5::Grammar::Block::eval_end_block {
(my $block, my $phase) = @_;
$block = Perlito5::AST::Block::->new("stmts", [Perlito5::AST::Sub::->new("attributes", [], "block", $block, "name", undef, "namespace", $Perlito5::PKG_NAME, "sig", undef, "pos", Perlito5::Compiler::compiler_pos())]);
return Perlito5::Grammar::Block::eval_begin_block($block, "BEGIN")
}
lib/Perlito5/Grammar/Block.pm view on Meta::CPAN
$MATCH->{"capture"}->{"is_continue"} = 1;
1
}))) || ($MATCH->{"to"} = $tmp119, (do {
$MATCH->{"capture"} = Perlito5::AST::Block::->new("stmts", [], "sig", undef);
1
}))
}));
$tmp ? $MATCH : undef
}
sub Perlito5::Grammar::Block::anon_block {
my $str = $_[0];
my $pos = $_[1];
my $p = $pos;
local $Perlito5::BLOCK_HAS_SEMICOLON;
my $m = Perlito5::Grammar::block($str, $p);
!$m && return;
$p = $m->{"to"};
my $block = Perlito5::Match::flat($m);
$m = Perlito5::Grammar::opt_continue_block($str, $p);
$p = $m->{"to"};
my $continue = Perlito5::Match::flat($m);
my $v = $block;
!$continue->{"is_continue"} && !$Perlito5::BLOCK_HAS_SEMICOLON && ($v = Perlito5::Grammar::Expression::block_or_hash($v));
$m->{"capture"} = $v;
if ($continue->{"is_continue"}) {;
$m->{"capture"}->{"continue"} = $continue
}
return $m
}
sub Perlito5::Grammar::Block::ast_nop {;
Perlito5::AST::Apply::->new("code", "nop", "namespace", "Perlito5", "arguments", [])
}
sub Perlito5::Grammar::Block::special_named_block {
my $str = $_[0];
my $pos = $_[1];
my $p = $pos;
my $block_name;
my $m_name = Perlito5::Grammar::ident($str, $p);
!$m_name && return;
$p = $m_name->{"to"};
$block_name = Perlito5::Match::flat($m_name);
my $ws = Perlito5::Grammar::Space::opt_ws($str, $p);
$p = $ws->{"to"};
my $block_start = $p;
my $m = Perlito5::Grammar::Block::closure_block($str, $p);
!$m && return;
$p = $m->{"to"};
my $block = Perlito5::Match::flat($m);
if ($block_name eq "INIT") {
push(@Perlito5::INIT_BLOCK, Perlito5::Grammar::Block::eval_end_block($block, "INIT"));
$m->{"capture"} = Perlito5::Grammar::Block::ast_nop()
}
elsif ($block_name eq "END") {
unshift(@Perlito5::END_BLOCK, Perlito5::Grammar::Block::eval_end_block($block, "END"));
$m->{"capture"} = Perlito5::Grammar::Block::ast_nop()
}
elsif ($block_name eq "CHECK") {
unshift(@Perlito5::CHECK_BLOCK, Perlito5::Grammar::Block::eval_end_block($block, "CHECK"));
$m->{"capture"} = Perlito5::Grammar::Block::ast_nop()
}
elsif ($block_name eq "UNITCHECK") {
unshift(@Perlito5::UNITCHECK_BLOCK, Perlito5::Grammar::Block::eval_end_block($block, "UNITCHECK"));
$m->{"capture"} = Perlito5::Grammar::Block::ast_nop()
}
elsif ($block_name eq "BEGIN") {
local $Perlito5::PHASE = "BEGIN";
Perlito5::Grammar::Block::eval_begin_block($block);
$m->{"capture"} = Perlito5::Grammar::Block::ast_nop()
}
elsif ($block_name eq "AUTOLOAD" || $block_name eq "DESTROY") {
my $sub = Perlito5::AST::Sub::->new("attributes", [], "block", $block, "name", $block_name, "namespace", $Perlito5::PKG_NAME, "sig", undef, "pos", Perlito5::Compiler::compiler_pos());
my $full_name = ($sub->{"namespace"}) . "::" . ($sub->{"name"});
$Perlito5::PROTO->{$full_name} = undef;
$Perlito5::GLOBAL->{$full_name} = $sub;
$block = Perlito5::AST::Block::->new("stmts", [$sub]);
Perlito5::Grammar::Block::eval_begin_block($block, "BEGIN");
$m->{"capture"} = Perlito5::Grammar::Block::ast_nop()
}
else {
$m->{"capture"} = $block;
$m->{"capture"}->{"name"} = $block_name
}
return $m
}
sub Perlito5::Grammar::Block::named_sub_def {
my $str = $_[0];
my $pos = $_[1];
my $MATCH = {"str" => $str, "from" => $pos, "to" => $pos, };
my $tmp = (((do {
my $m2 = Perlito5::Grammar::optional_namespace_before_ident($str, $MATCH->{"to"});
if ($m2) {
$MATCH->{"to"} = $m2->{"to"};
$MATCH->{"Perlito5::Grammar::optional_namespace_before_ident"} = $m2;
1
}
else {;
0
}
}) && (do {
my $m2 = Perlito5::Grammar::ident($str, $MATCH->{"to"});
if ($m2) {
$MATCH->{"to"} = $m2->{"to"};
$MATCH->{"Perlito5::Grammar::ident"} = $m2;
1
}
else {;
0
}
}) && (do {
my $m2 = Perlito5::Grammar::Block::prototype_($str, $MATCH->{"to"});
if ($m2) {
$MATCH->{"to"} = $m2->{"to"};
$MATCH->{"Perlito5::Grammar::Block::prototype_"} = $m2;
1
}
else {;
0
}
}) && (do {
my $m2 = Perlito5::Grammar::Space::opt_ws($str, $MATCH->{"to"});
if ($m2) {
$MATCH->{"to"} = $m2->{"to"};
( run in 1.393 second using v1.01-cache-2.11-cpan-d8267643d1d )