#!/usr/bin/perl -w
use strict;
use warnings;
use Test::More tests => 3;
use lib 't/lib';
use TestParser qw(:all);
parse_and_diff_yaml( <<'EOP', <<'EOE' );
$c = sub {
1
};
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:Symbol
context: CXT_SCALAR|CXT_LVALUE
name: c
sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:AnonymousSubroutine
lines:
- !parsetree:Builtin
arguments:
- !parsetree:Constant
context: CXT_CALLER
flags: CONST_NUMBER|NUM_INTEGER
value: 1
context: CXT_CALLER
function: OP_RETURN
EOE
parse_and_diff_yaml( <<'EOP', <<'EOE' );
my $d = 1;
$c = sub {
$d;
};
EOP
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:LexicalDeclaration
context: CXT_SCALAR|CXT_LVALUE
flags: DECLARATION_MY|DECLARATION_CLOSED_OVER
name: d
sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:Constant
context: CXT_SCALAR
flags: CONST_NUMBER|NUM_INTEGER
value: 1
--- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:Symbol
context: CXT_SCALAR|CXT_LVALUE
name: c
sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:AnonymousSubroutine
lines:
- !parsetree:Builtin
arguments:
- !parsetree:LexicalSymbol
context: CXT_CALLER
level: 1
name: d
sigil: VALUE_SCALAR
context: CXT_CALLER
function: OP_RETURN
EOE
parse_and_diff_yaml( <<'EOP', <<'EOE' );
sub add3 {
my($x) = @_;
return sub {
my($y) = @_;
return sub {
my($z) = @_;
return $x + $y + $z;
};
};
}
EOP
--- !parsetree:NamedSubroutine
lines:
- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:List
context: CXT_LIST|CXT_LVALUE
expressions:
- !parsetree:LexicalDeclaration
context: CXT_SCALAR|CXT_LVALUE
flags: DECLARATION_MY|DECLARATION_CLOSED_OVER
name: x
sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:LexicalSymbol
context: CXT_LIST
level: 0
name: _
sigil: VALUE_ARRAY
- !parsetree:Builtin
arguments:
- !parsetree:AnonymousSubroutine
lines:
- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:List
context: CXT_LIST|CXT_LVALUE
expressions:
- !parsetree:LexicalDeclaration
context: CXT_SCALAR|CXT_LVALUE
flags: DECLARATION_MY|DECLARATION_CLOSED_OVER
name: y
sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:LexicalSymbol
context: CXT_LIST
level: 0
name: _
sigil: VALUE_ARRAY
- !parsetree:Builtin
arguments:
- !parsetree:AnonymousSubroutine
lines:
- !parsetree:BinOp
context: CXT_VOID
left: !parsetree:List
context: CXT_LIST|CXT_LVALUE
expressions:
- !parsetree:LexicalDeclaration
context: CXT_SCALAR|CXT_LVALUE
flags: DECLARATION_MY
name: z
sigil: VALUE_SCALAR
op: OP_ASSIGN
right: !parsetree:LexicalSymbol
context: CXT_LIST
level: 0
name: _
sigil: VALUE_ARRAY
- !parsetree:Builtin
arguments:
- !parsetree:BinOp
context: CXT_CALLER
left: !parsetree:BinOp
context: CXT_SCALAR
left: !parsetree:LexicalSymbol
context: CXT_SCALAR
level: 2
name: x
sigil: VALUE_SCALAR
op: OP_ADD
right: !parsetree:LexicalSymbol
context: CXT_SCALAR
level: 1
name: y
sigil: VALUE_SCALAR
op: OP_ADD
right: !parsetree:LexicalSymbol
context: CXT_SCALAR
level: 0
name: z
sigil: VALUE_SCALAR
context: CXT_CALLER
function: OP_RETURN
context: CXT_CALLER
function: OP_RETURN
context: CXT_CALLER
function: OP_RETURN
name: add3
EOE