Skip to content

Commit

Permalink
Perlito6 - method hyper syntax use >>. instead of .>>
Browse files Browse the repository at this point in the history
  • Loading branch information
fglock committed May 4, 2012
1 parent 6650db6 commit f490f1a
Show file tree
Hide file tree
Showing 21 changed files with 224 additions and 223 deletions.
1 change: 1 addition & 0 deletions ChangeLog
Expand Up @@ -28,6 +28,7 @@ dev 2012-04-12


* Perlito6 (Perl 6 compiler): * Perlito6 (Perl 6 compiler):


-- updated method hyper syntax to use >>. instead of .>>




9.0 2012-04-11 9.0 2012-04-11
Expand Down
8 changes: 3 additions & 5 deletions TODO-perlito6
Expand Up @@ -38,12 +38,10 @@ TODO list for Perlito6


- any Perl6 should be able to execute Perlito6 directly. What do we need to fix? - any Perl6 should be able to execute Perlito6 directly. What do we need to fix?


-- rakudo: replace .>> with >>. -- rakudo:


[13:16] <fglock> r: method emit_perl6 { @.or_list.>>emit_perl6() } =begin must be followed by an identifier; (did you mean "=begin pod"?)
[13:16] <+p6eval> rakudo 2d2584: OUTPUT«===SORRY!===␤Unable to parse blockoid, couldn't find final '}' at src6/lib/Perlito6/Emitter/Token.pm:331
[13:17] <jnthn> r: method emit_perl6 { @.or_list>>.emit_perl6() }
[13:17] <+p6eval> rakudo 2d2584: OUTPUT«Useless declaration of a has-scoped method in mainline␤»


-- rakudo: use "augment" to add new methods to classes -- rakudo: use "augment" to add new methods to classes


Expand Down
4 changes: 2 additions & 2 deletions html/perlito6.js
Expand Up @@ -6743,7 +6743,7 @@ List_a.push((function () { var tmp = {v_decl: scalar((function () { if (v_MATCH
})()), function () { return 1; })); }))); })()), function () { return 1; })); })));
})()); }), function () { return ((function () { })()); }), function () { return ((function () {
(v_MATCH.v_to = v_pos1); (v_MATCH.v_to = v_pos1);
return((and(and(and((and(('.' == (v_str || "").substr(v_MATCH.to(), 1)), function () { return ((v_MATCH.v_to = add(1, v_MATCH.to()))); })), function () { return ((function () { return((and(and(and(((function () {
var v_m2 = null; var v_m2 = null;


(v_m2 = v_grammar.hyper_op(v_str, v_MATCH.to())); (v_m2 = v_grammar.hyper_op(v_str, v_MATCH.to()));
Expand All @@ -6755,7 +6755,7 @@ List_a.push((function () { var tmp = {v_decl: scalar((function () { if (v_MATCH
else { return (function () { else { return (function () {
return(false); return(false);
})(); }; })(); };
})()); }), function () { return ((function () { })()), function () { return (and(('.' == (v_str || "").substr(v_MATCH.to(), 1)), function () { return ((v_MATCH.v_to = add(1, v_MATCH.to()))); })); }), function () { return ((function () {
var v_m2 = null; var v_m2 = null;


(v_m2 = Perlito6$Grammar.ident(v_str, v_MATCH.to())); (v_m2 = Perlito6$Grammar.ident(v_str, v_MATCH.to()));
Expand Down
4 changes: 2 additions & 2 deletions lib5/Perlito6/Expression.pm
Expand Up @@ -1217,7 +1217,7 @@ package GLOBAL;
}) || 1)))) }) || 1))))
})) || (do { })) || (do {
(($MATCH)->{to} = $pos1); (($MATCH)->{to} = $pos1);
((((((('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to()))))) && (do { (((((do {
((my $m2) = $grammar->hyper_op($str, $MATCH->to())); ((my $m2) = $grammar->hyper_op($str, $MATCH->to()));
if ($m2) { if ($m2) {
(($MATCH)->{to} = $m2->to()); (($MATCH)->{to} = $m2->to());
Expand All @@ -1227,7 +1227,7 @@ package GLOBAL;
else { else {
0 0
} }
})) && (do { }) && ((('.' eq substr($str, $MATCH->to(), 1)) && ((($MATCH)->{to} = (1 + $MATCH->to())))))) && (do {
((my $m2) = Perlito6::Grammar->ident($str, $MATCH->to())); ((my $m2) = Perlito6::Grammar->ident($str, $MATCH->to()));
if ($m2) { if ($m2) {
(($MATCH)->{to} = $m2->to()); (($MATCH)->{to} = $m2->to());
Expand Down
4 changes: 2 additions & 2 deletions src6/lib/Perlito6/Clojure/Emitter.pm
Expand Up @@ -259,7 +259,7 @@ class Call {


my $arguments = ''; my $arguments = '';
if @.arguments { if @.arguments {
$arguments = (@.arguments.>>emit_clojure).join(' '); $arguments = (@.arguments>>.emit_clojure).join(' ');
} }


my $invocant = $.invocant.emit_clojure; my $invocant = $.invocant.emit_clojure;
Expand Down Expand Up @@ -331,7 +331,7 @@ class Apply {
my $code = $ns ~ $.code; my $code = $ns ~ $.code;
my $args = ''; my $args = '';
if @.arguments { if @.arguments {
$args = (@.arguments.>>emit_clojure).join(' '); $args = (@.arguments>>.emit_clojure).join(' ');
} }


if $code eq 'self' { return 'sv-self' }; if $code eq 'self' { return 'sv-self' };
Expand Down
8 changes: 4 additions & 4 deletions src6/lib/Perlito6/Emitter/Token.pm
Expand Up @@ -104,21 +104,21 @@ class Rul::Or {
method emit_perl6 { method emit_perl6 {
'(do { ' ~ '(do { ' ~
'my $pos1 = $MATCH.to; (do { ' ~ 'my $pos1 = $MATCH.to; (do { ' ~
(@.or_list.>>emit_perl6).join('}) || (do { $MATCH.to = $pos1; ') ~ (@.or_list>>.emit_perl6).join('}) || (do { $MATCH.to = $pos1; ') ~
'}) })'; '}) })';
} }
method set_captures_to_array { method set_captures_to_array {
@.or_list.>>set_captures_to_array; @.or_list>>.set_captures_to_array;
} }
} }


class Rul::Concat { class Rul::Concat {
has @.concat; has @.concat;
method emit_perl6 { method emit_perl6 {
'(' ~ (@.concat.>>emit_perl6).join(' && ') ~ ')'; '(' ~ (@.concat>>.emit_perl6).join(' && ') ~ ')';
} }
method set_captures_to_array { method set_captures_to_array {
@.concat.>>set_captures_to_array; @.concat>>.set_captures_to_array;
} }
} }


Expand Down
4 changes: 3 additions & 1 deletion src6/lib/Perlito6/Expression.pm
Expand Up @@ -407,7 +407,8 @@ class Perlito6::Expression {
{ make [ 'term', $$<Perlito6::Grammar.grammar> ] } { make [ 'term', $$<Perlito6::Grammar.grammar> ] }
| <Perlito6::Grammar.declarator> <.Perlito6::Grammar.ws> <Perlito6::Grammar.opt_type> <.Perlito6::Grammar.opt_ws> <Perlito6::Grammar.var_ident> # my Int $variable | <Perlito6::Grammar.declarator> <.Perlito6::Grammar.ws> <Perlito6::Grammar.opt_type> <.Perlito6::Grammar.opt_ws> <Perlito6::Grammar.var_ident> # my Int $variable
{ make [ 'term', Decl.new( decl => $$<Perlito6::Grammar.declarator>, type => $$<Perlito6::Grammar.opt_type>, var => $$<Perlito6::Grammar.var_ident> ) ] } { make [ 'term', Decl.new( decl => $$<Perlito6::Grammar.declarator>, type => $$<Perlito6::Grammar.opt_type>, var => $$<Perlito6::Grammar.var_ident> ) ] }
| '.' <hyper_op> <Perlito6::Grammar.ident>
| <hyper_op> '.' <Perlito6::Grammar.ident>
[ ':' <.Perlito6::Grammar.ws>? <list_parse> [ ':' <.Perlito6::Grammar.ws>? <list_parse>
{ make [ 'postfix_or_term', 'methcall', ~$<Perlito6::Grammar.ident>, $$<list_parse>, $$<hyper_op> ] } { make [ 'postfix_or_term', 'methcall', ~$<Perlito6::Grammar.ident>, $$<list_parse>, $$<hyper_op> ] }
| '(' <paren_parse> ')' | '(' <paren_parse> ')'
Expand All @@ -423,6 +424,7 @@ class Perlito6::Expression {
} }
| { make [ 'postfix_or_term', 'methcall_no_params', ~$<Perlito6::Grammar.ident>, $$<hyper_op> ] } | { make [ 'postfix_or_term', 'methcall_no_params', ~$<Perlito6::Grammar.ident>, $$<hyper_op> ] }
] ]

| <Perlito6::Grammar.optional_namespace_before_ident> <Perlito6::Grammar.ident> | <Perlito6::Grammar.optional_namespace_before_ident> <Perlito6::Grammar.ident>
[ <.Perlito6::Grammar.ws> <list_parse> [ <.Perlito6::Grammar.ws> <list_parse>
{ make [ 'postfix_or_term', 'funcall', { make [ 'postfix_or_term', 'funcall',
Expand Down
46 changes: 23 additions & 23 deletions src6/lib/Perlito6/Go/Emitter.pm
Expand Up @@ -500,7 +500,7 @@ class Call {
} }
else { else {
# ((*v_a).(function_er).f_function(Capture{})) # ((*v_a).(function_er).f_function(Capture{}))
return '((*' ~ $invocant ~ ').(function_er).f_function( Capture{ p : []*Any{ ' ~ (@.arguments.>>emit_go).join(', ') ~ ' } } ))'; return '((*' ~ $invocant ~ ').(function_er).f_function( Capture{ p : []*Any{ ' ~ (@.arguments>>.emit_go).join(', ') ~ ' } } ))';
} }
}; };


Expand All @@ -517,7 +517,7 @@ class Call {
} }
return return
'(*' ~ $invocant ~ ').(' ~ $meth ~ '_er).f_' ~ $meth '(*' ~ $invocant ~ ').(' ~ $meth ~ '_er).f_' ~ $meth
~ '( Capture{ p : []*Any{ ' ~ (@.arguments.>>emit_go).join(', ') ~ ' } } )'; ~ '( Capture{ p : []*Any{ ' ~ (@.arguments>>.emit_go).join(', ') ~ ' } } )';


} }


Expand All @@ -538,7 +538,7 @@ class Apply {


if $code.isa( 'Str' ) { } if $code.isa( 'Str' ) { }
else { else {
return '(' ~ $.code.emit_go ~ ')->(' ~ (@.arguments.>>emit).join(', ') ~ ')'; return '(' ~ $.code.emit_go ~ ')->(' ~ (@.arguments>>.emit).join(', ') ~ ')';
}; };


if $code eq 'self' { return 'v_self' }; if $code eq 'self' { return 'v_self' };
Expand All @@ -547,7 +547,7 @@ class Apply {
if $code eq 'make' { if $code eq 'make' {
return return
'func () *Any { ' 'func () *Any { '
~ 'tmp := ' ~ (@.arguments.>>emit_go).join(', ') ~ '; ' ~ 'tmp := ' ~ (@.arguments>>.emit_go).join(', ') ~ '; '
~ '*(*v_MATCH).(capture_er).f_capture(Capture{}) = *tmp; ' ~ '*(*v_MATCH).(capture_er).f_capture(Capture{}) = *tmp; '
~ 'return tmp; ' ~ 'return tmp; '
~ '}()'; ~ '}()';
Expand All @@ -560,47 +560,47 @@ class Apply {
} }


if $code eq 'say' { return 'f_print( Capture{ p : []*Any{ ' if $code eq 'say' { return 'f_print( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ', toStr("\n") } } )' ~ ', toStr("\n") } } )'
} }
if $code eq 'print' { return 'f_print( Capture{ p : []*Any{ ' if $code eq 'print' { return 'f_print( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'warn' { return 'f_print_stderr( Capture{ p : []*Any{ ' if $code eq 'warn' { return 'f_print_stderr( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ', toStr("\n") } } )' ~ ', toStr("\n") } } )'
} }
if $code eq 'die' { return 'f_die( Capture{ p : []*Any{ ' if $code eq 'die' { return 'f_die( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'defined' { return 'f_defined( Capture{ p : []*Any{ ' if $code eq 'defined' { return 'f_defined( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'pop' { return 'f_pop( Capture{ p : []*Any{ ' if $code eq 'pop' { return 'f_pop( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'push' { return 'f_push( Capture{ p : []*Any{ ' if $code eq 'push' { return 'f_push( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'shift' { return 'f_shift( Capture{ p : []*Any{ ' if $code eq 'shift' { return 'f_shift( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'index' { return 'f_index( Capture{ p : []*Any{ ' if $code eq 'index' { return 'f_index( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'substr' { return 'f_substr( Capture{ p : []*Any{ ' if $code eq 'substr' { return 'f_substr( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'scalar' { return 'f_scalar( Capture{ p : []*Any{ ' if $code eq 'scalar' { return 'f_scalar( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'Int' { return 'toInt(' if $code eq 'Int' { return 'toInt('
Expand All @@ -624,7 +624,7 @@ class Apply {
if $code eq 'prefix:<!>' { return 'toBool(!tobool(' ~ ( @.arguments[0]).emit_go ~ '))' }; if $code eq 'prefix:<!>' { return 'toBool(!tobool(' ~ ( @.arguments[0]).emit_go ~ '))' };
if $code eq 'prefix:<?>' { return Call::emit_go_call( @.arguments[0], 'Bool') } if $code eq 'prefix:<?>' { return Call::emit_go_call( @.arguments[0], 'Bool') }
if $code eq 'prefix:<$>' { return 'f_scalar( Capture{ p : []*Any{ ' if $code eq 'prefix:<$>' { return 'f_scalar( Capture{ p : []*Any{ '
~ (@.arguments.>>emit_go).join(', ') ~ (@.arguments>>.emit_go).join(', ')
~ ' } } )' ~ ' } } )'
} }
if $code eq 'prefix:<@>' { return Call::emit_go_call( @.arguments[0], 'array' ) } if $code eq 'prefix:<@>' { return Call::emit_go_call( @.arguments[0], 'array' ) }
Expand All @@ -636,17 +636,17 @@ class Apply {
~ ')' ~ ')'
} }
if $code eq 'infix:<+>' { return 'f_add( ' if $code eq 'infix:<+>' { return 'f_add( '
~ (@.arguments.>>emit_go).join(', ') ~ ')' } ~ (@.arguments>>.emit_go).join(', ') ~ ')' }
if $code eq 'infix:<->' { return 'f_sub( ' if $code eq 'infix:<->' { return 'f_sub( '
~ (@.arguments.>>emit_go).join(', ') ~ ')' } ~ (@.arguments>>.emit_go).join(', ') ~ ')' }
if $code eq 'infix:<*>' { return 'f_mul( ' if $code eq 'infix:<*>' { return 'f_mul( '
~ (@.arguments.>>emit_go).join(', ') ~ ')' } ~ (@.arguments>>.emit_go).join(', ') ~ ')' }
if $code eq 'infix:</>' { return 'f_div( ' if $code eq 'infix:</>' { return 'f_div( '
~ (@.arguments.>>emit_go).join(', ') ~ ')' } ~ (@.arguments>>.emit_go).join(', ') ~ ')' }
if $code eq 'infix:<>>' { return 'f_greater( ' if $code eq 'infix:<>>' { return 'f_greater( '
~ (@.arguments.>>emit_go).join(', ') ~ ')' } ~ (@.arguments>>.emit_go).join(', ') ~ ')' }
if $code eq 'infix:<<>' { return 'f_smaller( ' if $code eq 'infix:<<>' { return 'f_smaller( '
~ (@.arguments.>>emit_go).join(', ') ~ ')' } ~ (@.arguments>>.emit_go).join(', ') ~ ')' }
if $code eq 'infix:<>=>' { return 'toBool( ' if $code eq 'infix:<>=>' { return 'toBool( '
~ 'toint(' ~ (@.arguments[0]).emit_go ~ ') >= ' ~ 'toint(' ~ (@.arguments[0]).emit_go ~ ') >= '
~ 'toint(' ~ (@.arguments[1]).emit_go ~ ') ' ~ 'toint(' ~ (@.arguments[1]).emit_go ~ ') '
Expand Down Expand Up @@ -712,7 +712,7 @@ class Apply {
else { else {
$code = 'this_namespace.' ~ $code; $code = 'this_namespace.' ~ $code;
} }
$code ~ '( Capture{ p : []*Any{ ' ~ (@.arguments.>>emit_go).join(', ') ~ ' } } )'; $code ~ '( Capture{ p : []*Any{ ' ~ (@.arguments>>.emit_go).join(', ') ~ ' } } )';
} }
} }


Expand Down
2 changes: 1 addition & 1 deletion src6/lib/Perlito6/Go/Prelude.pm
Expand Up @@ -49,7 +49,7 @@ class IO {
class Main { class Main {


sub lisp_dump_object ( $class_name, $data ) { sub lisp_dump_object ( $class_name, $data ) {
return $class_name ~ '( ' ~ ($data.>>perl).join(', ') ~ ' )'; return $class_name ~ '( ' ~ ($data>>.perl).join(', ') ~ ' )';
} }


} }
Expand Down
4 changes: 2 additions & 2 deletions src6/lib/Perlito6/Grammar.pm
Expand Up @@ -207,7 +207,7 @@ token val_buf {
make Apply.new( make Apply.new(
namespace => '', namespace => '',
code => 'list:<~>', code => 'list:<~>',
arguments => ($<double_quoted_buf>).>>capture, arguments => ($<double_quoted_buf>)>>.capture,
) )
} }
} }
Expand All @@ -226,7 +226,7 @@ token val_int {


token exp_stmts { token exp_stmts {
<Perlito6::Expression.delimited_statement>* <Perlito6::Expression.delimited_statement>*
{ make $<Perlito6::Expression.delimited_statement>.>>capture } { make $<Perlito6::Expression.delimited_statement>>>.capture }
} }


token opt_name { <ident>? } token opt_name { <ident>? }
Expand Down

0 comments on commit f490f1a

Please sign in to comment.