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 )