Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Perlito5 - grammar - use Apply.special_arg
  • Loading branch information
fglock committed Aug 10, 2013
1 parent ee9baec commit abcb270
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 35 deletions.
13 changes: 0 additions & 13 deletions TODO-perlito5
Expand Up @@ -32,26 +32,13 @@ TODO list for Perlito5

* Parser

-- AST - move the block parameter in sort() to Perlito5::AST::Apply->special_arg, to disambiguate this case:
sort $x 1,2,3 # $x is subroutine reference
sort $x,1,2,3 # $x is list element

-- sort SUBNAME LIST
see Grammar/Map.pm

-- attributes
http://perldoc.perl.org/attributes.html
missing MODIFY_CODE_ATTRIBUTES handlers

-- create __DATA__
%Perlito5::DATA_SECTION contains the __DATA__ for each package

http://perldoc.perl.org/SelfLoader.html#The-__DATA__-token

In package 'main', __END__ behaves like __DATA__.
In other packages, __END__ is really the end.
Only the last __DATA__ in each package use()-ed is accessible.

-- compile-time eval() is not bound to the "program" environment, but to the "compiler" environment instead
see README-perlito5-js near "Compile-time / Run-time interleaving"

Expand Down
12 changes: 6 additions & 6 deletions html/perlito5.js
Expand Up @@ -9151,7 +9151,7 @@ return r;
var v_the_object;
var v_expr;
(function () { var tmp114 = p5list_to_a(List__); var tmp115 = tmp114.slice(0); v_decl = tmp114.shift(); v_the_object = tmp114.shift(); v_expr = tmp114.shift(); return tmp115 })();
return (p5call(p5pkg["Perlito5::AST::Apply"], "new", p5list_to_a('namespace', 'Perlito5::IO', 'code', v_decl, 'arguments', (new p5ArrayRef([v_the_object, v_expr]))), p5want));
return (p5call(p5pkg["Perlito5::AST::Apply"], "new", ['namespace', '', 'code', v_decl, 'special_arg', v_the_object, 'arguments', v_expr], p5want));
});
p5make_sub("Perlito5::Grammar::Print", "term_print", function (List__, p5want) {
try {
Expand Down Expand Up @@ -9220,10 +9220,10 @@ return r;
}
})()], 0) }), function () { return p5context([(function () {
var v_m2;
(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "paren_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0)));
(v_m2 = (p5call(p5pkg["Perlito5::Expression"], "list_parse", p5list_to_a(v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')), 0)));
if ( p5bool(v_m2) ) {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((v_m2 || (v_m2 = new p5HashRef({})))._hash_.p5hget('to')));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Expression.paren_parse', (v_m2));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('Perlito5::Expression.list_parse', (v_m2));
return (p5context([1], p5want));
}

Expand All @@ -9233,11 +9233,11 @@ return r;
})()], 0) }), function () { return p5context([p5and((')' == p5pkg["Perlito5::Grammar::Print"].substr([v_str, (v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to'), 1], 0)), function () { return p5context([(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('to', ((1 + p5num((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('to')))))], 0) })], 0) }), function () { return p5context([(function () {
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('str', (v_str));
var v_list;
(v_list = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Expression.paren_parse')), 0)));
(v_list = (p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('Perlito5::Expression.list_parse')), 0)));
if ( !( p5bool(p5pkg["Perlito5::Grammar::Print"].ref([v_list], 0))) ) {
throw(p5context([], p5want));
};
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Grammar::Print"].print_ast(p5list_to_a(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('print_decl')), 1), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('the_object')), 1), v_list), 1))))));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Grammar::Print"].print_ast(p5list_to_a(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('print_decl')), 1), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('the_object')), 1), p5pkg["Perlito5::Expression"].expand_list([v_list], 1)), 1))))));
return (p5context([1], p5want));
})()], p5want) }));
})()], 0), function () { return p5context([(function () {
Expand Down Expand Up @@ -9273,7 +9273,7 @@ return r;
if ( !( p5bool(p5pkg["Perlito5::Grammar::Print"].ref([v_list], 0))) ) {
throw(p5context([], p5want));
};
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Grammar::Print"].print_ast(p5list_to_a(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('print_decl')), 1), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('the_object')), 1), v_list), 1))))));
(v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hset('capture', ((new p5ArrayRef(p5list_to_a('term', p5pkg["Perlito5::Grammar::Print"].print_ast(p5list_to_a(p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('print_decl')), 1), p5pkg["Perlito5::Match"].flat(p5list_to_a((v_MATCH || (v_MATCH = new p5HashRef({})))._hash_.p5hget('the_object')), 1), p5pkg["Perlito5::Expression"].expand_list([v_list], 1)), 1))))));
return (p5context([1], p5want));
})()], p5want) })], p5want));
})()], p5want) }));
Expand Down
12 changes: 6 additions & 6 deletions perlito5.pl
Expand Up @@ -6795,7 +6795,7 @@ sub Perlito5::Grammar::Print::typeglob {
};
sub Perlito5::Grammar::Print::print_ast {
(my($decl, $the_object, $expr) = @_);
Perlito5::AST::Apply->new('namespace', 'Perlito5::IO', 'code', $decl, 'arguments', [$the_object, $expr])
Perlito5::AST::Apply->new('namespace', '', 'code', $decl, 'special_arg', $the_object, 'arguments', $expr)
};
sub Perlito5::Grammar::Print::term_print {
((my $grammar) = $_[0]);
Expand Down Expand Up @@ -6847,22 +6847,22 @@ sub Perlito5::Grammar::Print::term_print {
0
}
}))) && ((do {
((my $m2) = Perlito5::Expression->paren_parse($str, $MATCH->{'to'}));
((my $m2) = Perlito5::Expression->list_parse($str, $MATCH->{'to'}));
if ($m2) {
($MATCH->{'to'} = $m2->{'to'});
($MATCH->{'Perlito5::Expression.paren_parse'} = $m2);
($MATCH->{'Perlito5::Expression.list_parse'} = $m2);
1
}
else {
0
}
}))) && (((')' eq substr($str, $MATCH->{'to'}, 1)) && (($MATCH->{'to'} = (1 + $MATCH->{'to'})))))) && ((do {
($MATCH->{'str'} = $str);
((my $list) = Perlito5::Match::flat($MATCH->{'Perlito5::Expression.paren_parse'}));
((my $list) = Perlito5::Match::flat($MATCH->{'Perlito5::Expression.list_parse'}));
if (!(ref($list))) {
return ()
};
($MATCH->{'capture'} = ['term', print_ast(Perlito5::Match::flat($MATCH->{'print_decl'}), Perlito5::Match::flat($MATCH->{'the_object'}), $list)]);
($MATCH->{'capture'} = ['term', print_ast(Perlito5::Match::flat($MATCH->{'print_decl'}), Perlito5::Match::flat($MATCH->{'the_object'}), Perlito5::Expression::expand_list($list))]);
1
})))
})) || ((do {
Expand Down Expand Up @@ -6893,7 +6893,7 @@ sub Perlito5::Grammar::Print::term_print {
if (!(ref($list))) {
return ()
};
($MATCH->{'capture'} = ['term', print_ast(Perlito5::Match::flat($MATCH->{'print_decl'}), Perlito5::Match::flat($MATCH->{'the_object'}), $list)]);
($MATCH->{'capture'} = ['term', print_ast(Perlito5::Match::flat($MATCH->{'print_decl'}), Perlito5::Match::flat($MATCH->{'the_object'}), Perlito5::Expression::expand_list($list))]);
1
}))))
})))
Expand Down
18 changes: 8 additions & 10 deletions src5/lib/Perlito5/Grammar/Print.pm
Expand Up @@ -146,12 +146,10 @@ sub typeglob {
sub print_ast {
my ($decl, $the_object, $expr) = @_;
Perlito5::AST::Apply->new(
'namespace' => 'Perlito5::IO',
'code' => $decl,
'arguments' => [
$the_object,
$expr,
],
namespace => '',
code => $decl,
special_arg => $the_object,
arguments => $expr,
)
}

Expand All @@ -162,18 +160,18 @@ token term_print {
'('
<.Perlito5::Grammar::Space.opt_ws>
<the_object>
<Perlito5::Expression.paren_parse>
<Perlito5::Expression.list_parse>
')'

{
my $list = Perlito5::Match::flat($MATCH->{'Perlito5::Expression.paren_parse'});
my $list = Perlito5::Match::flat($MATCH->{'Perlito5::Expression.list_parse'});
return if !ref($list);
$MATCH->{capture} = [
'term',
print_ast(
Perlito5::Match::flat($MATCH->{'print_decl'}),
Perlito5::Match::flat($MATCH->{'the_object'}),
$list,
Perlito5::Expression::expand_list($list),
),
]
}
Expand All @@ -189,7 +187,7 @@ token term_print {
print_ast(
Perlito5::Match::flat($MATCH->{'print_decl'}),
Perlito5::Match::flat($MATCH->{'the_object'}),
$list,
Perlito5::Expression::expand_list($list),
),
]
}
Expand Down

0 comments on commit abcb270

Please sign in to comment.