diff options
author | Andrew Tridgell <tridge@samba.org> | 2003-11-20 04:36:09 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2003-11-20 04:36:09 +0000 |
commit | b2fd4284b6935f93514cd7d165ab481101e92472 (patch) | |
tree | b6826c47888b2786f2f7e74f63ae8df7d4b65843 | |
parent | 8f0f97b078f45abbd001a1fa893455bd27d072cd (diff) | |
download | samba-b2fd4284b6935f93514cd7d165ab481101e92472.tar.gz samba-b2fd4284b6935f93514cd7d165ab481101e92472.tar.bz2 samba-b2fd4284b6935f93514cd7d165ab481101e92472.zip |
use a precompiled grammer in pidl. This speeds up pidl by about a
factor of 2 on my system.
(This used to be commit a291dd835f68ae5a109670b1d1ca1a48b2aacfb6)
-rw-r--r-- | source4/build/pidl/Makefile | 5 | ||||
-rw-r--r-- | source4/build/pidl/dump.pm | 2 | ||||
-rw-r--r-- | source4/build/pidl/eparser.pm | 2 | ||||
-rw-r--r-- | source4/build/pidl/header.pm | 1 | ||||
-rw-r--r-- | source4/build/pidl/idl.pm | 12849 | ||||
-rwxr-xr-x | source4/build/pidl/pidl.pl | 7 | ||||
-rw-r--r-- | source4/build/pidl/util.pm | 2 |
7 files changed, 12860 insertions, 8 deletions
diff --git a/source4/build/pidl/Makefile b/source4/build/pidl/Makefile new file mode 100644 index 0000000000..23de275288 --- /dev/null +++ b/source4/build/pidl/Makefile @@ -0,0 +1,5 @@ +PIDL_idl.pm: idl.gram + perl -MParse::RecDescent - idl.gram idl + +clean: + rm -f idl.pm diff --git a/source4/build/pidl/dump.pm b/source4/build/pidl/dump.pm index 1da9f715aa..c088a95a77 100644 --- a/source4/build/pidl/dump.pm +++ b/source4/build/pidl/dump.pm @@ -3,7 +3,7 @@ # Copyright tridge@samba.org 2000 # released under the GNU GPL -package IdlDump; +package dump; use strict; use Data::Dumper; diff --git a/source4/build/pidl/eparser.pm b/source4/build/pidl/eparser.pm index 13e9307c8d..6de4c26c85 100644 --- a/source4/build/pidl/eparser.pm +++ b/source4/build/pidl/eparser.pm @@ -4,7 +4,7 @@ # Copyright tridge@samba.org 2000 # released under the GNU GPL -package IdlEParser; +package eparser; use strict; use Data::Dumper; diff --git a/source4/build/pidl/header.pm b/source4/build/pidl/header.pm index 8e102a0c3c..83e2cfd4ac 100644 --- a/source4/build/pidl/header.pm +++ b/source4/build/pidl/header.pm @@ -2,6 +2,7 @@ # create C header files for an IDL structure # Copyright tridge@samba.org 2000 # released under the GNU GPL + package IdlHeader; use strict; diff --git a/source4/build/pidl/idl.pm b/source4/build/pidl/idl.pm new file mode 100644 index 0000000000..ffcd66f54f --- /dev/null +++ b/source4/build/pidl/idl.pm @@ -0,0 +1,12849 @@ +package idl; +use Parse::RecDescent; + +{ my $ERRORS; + + +package Parse::RecDescent::idl; +use strict; +use vars qw($skip $AUTOLOAD ); +$skip = '\s*'; + + use util; +; + + +{ +local $SIG{__WARN__} = sub {0}; +# PRETEND TO BE IN Parse::RecDescent NAMESPACE +*Parse::RecDescent::idl::AUTOLOAD = sub +{ + no strict 'refs'; + $AUTOLOAD =~ s/^Parse::RecDescent::idl/Parse::RecDescent/; + goto &{$AUTOLOAD}; +} +} + +push @Parse::RecDescent::idl::ISA, 'Parse::RecDescent'; +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::function +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"function"}; + + Parse::RecDescent::_trace(q{Trying rule: [function]}, + Parse::RecDescent::_tracefirst($_[1]), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [type identifier '(' <commit> element_list2 ');']}, + Parse::RecDescent::_tracefirst($_[1]), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{function}); + %item = (__RULE__ => q{function}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [type]}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::type($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [type]>>}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [type]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{type}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [identifier]}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{identifier})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [identifier]>>}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{identifier}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [element_list2]}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{element_list2})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::element_list2($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [element_list2]>>}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [element_list2]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{element_list2}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [');']}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{');'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "FUNCTION", + "NAME" => $item{identifier}, + "RETURN_TYPE" => $item{type}, + "DATA" => $item{element_list2} + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [type identifier '(' <commit> element_list2 ');']<<}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{function}); + %item = (__RULE__ => q{function}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{function}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{function}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{function}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{function}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::base_element +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"base_element"}; + + Parse::RecDescent::_trace(q{Trying rule: [base_element]}, + Parse::RecDescent::_tracefirst($_[1]), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [property_list type pointer identifier array_len]}, + Parse::RecDescent::_tracefirst($_[1]), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{base_element}); + %item = (__RULE__ => q{base_element}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [property_list]}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::property_list, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [property_list]>>}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [property_list]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{property_list(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying subrule: [type]}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{type})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::type($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [type]>>}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [type]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{type}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [pointer]}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{pointer})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::pointer, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [pointer]>>}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [pointer]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{pointer(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying subrule: [identifier]}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{identifier})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [identifier]>>}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{identifier}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [array_len]}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{array_len})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::array_len, 0, 1, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [array_len]>>}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [array_len]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{array_len(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "NAME" => $item{identifier}, + "TYPE" => $item{type}, + "PROPERTIES" => util::FlattenArray($item[1]), + "POINTERS" => $#{$item[3]}==-1?undef:$#{$item[3]}+1, + "ARRAY_LEN" => $item[5][0] + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [property_list type pointer identifier array_len]<<}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error...>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{base_element}); + %item = (__RULE__ => q{base_element}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error...>]}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if (1) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [<error...>]<<}, + Parse::RecDescent::_tracefirst($text), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{base_element}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{base_element}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{base_element}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::property_list +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"property_list"}; + + Parse::RecDescent::_trace(q{Trying rule: [property_list]}, + Parse::RecDescent::_tracefirst($_[1]), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' <commit> <leftop: property /,/ property> ']']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{property_list}); + %item = (__RULE__ => q{property_list}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying operator: [<leftop: property /,/ property>]}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{<leftop: property /,/ property>})->at($text); + + $_tok = undef; + OPLOOP: while (1) + { + $repcount = 0; + my @item; + + # MATCH LEFTARG + + Parse::RecDescent::_trace(q{Trying subrule: [property]}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{property})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::property($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [property]>>}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [property]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{property}} = $_tok; + push @item, $_tok; + + } + + + $repcount++; + + my $savetext = $text; + my $backtrack; + + # MATCH (OP RIGHTARG)(s) + while ($repcount < 100000000) + { + $backtrack = 0; + + Parse::RecDescent::_trace(q{Trying terminal: [/,/]}, Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/,/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:,)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + pop @item; + if (defined $1) {push @item, $item{'property(s)'}=$1; $backtrack=1;} + + Parse::RecDescent::_trace(q{Trying subrule: [property]}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{property})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::property($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [property]>>}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [property]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{property}} = $_tok; + push @item, $_tok; + + } + + $savetext = $text; + $repcount++; + } + $text = $savetext; + pop @item if $backtrack; + + unless (@item) { undef $_tok; last } + $_tok = [ @item ]; + last; + } + + unless ($repcount>=1) + { + Parse::RecDescent::_trace(q{<<Didn't match operator: [<leftop: property /,/ property>]>>}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched operator: [<leftop: property /,/ property>]<< (return value: [} + . qq{@{$_tok||[]}} . q{]}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + + push @item, $item{'property(s)'}=$_tok||[]; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[3] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' <commit> <leftop: property /,/ property> ']']<<}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{property_list}); + %item = (__RULE__ => q{property_list}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{property_list}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{property_list}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{property_list}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::definition +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"definition"}; + + Parse::RecDescent::_trace(q{Trying rule: [definition]}, + Parse::RecDescent::_tracefirst($_[1]), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [cpp_prefix]}, + Parse::RecDescent::_tracefirst($_[1]), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{definition}); + %item = (__RULE__ => q{definition}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [cpp_prefix]}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::cpp_prefix($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [cpp_prefix]>>}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [cpp_prefix]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{cpp_prefix}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [cpp_prefix]<<}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [typedef]}, + Parse::RecDescent::_tracefirst($_[1]), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{definition}); + %item = (__RULE__ => q{definition}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [typedef]}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::typedef($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [typedef]>>}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [typedef]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{typedef}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [typedef]<<}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [function]}, + Parse::RecDescent::_tracefirst($_[1]), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{definition}); + %item = (__RULE__ => q{definition}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [function]}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::function($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [function]>>}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [function]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{function}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [function]<<}, + Parse::RecDescent::_tracefirst($text), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{definition}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{definition}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{definition}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::module_header +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"module_header"}; + + Parse::RecDescent::_trace(q{Trying rule: [module_header]}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' <commit> <leftop: module_param /,/ module_param> ']']}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{module_header}); + %item = (__RULE__ => q{module_header}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying operator: [<leftop: module_param /,/ module_param>]}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{<leftop: module_param /,/ module_param>})->at($text); + + $_tok = undef; + OPLOOP: while (1) + { + $repcount = 0; + my @item; + + # MATCH LEFTARG + + Parse::RecDescent::_trace(q{Trying subrule: [module_param]}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{module_param})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::module_param($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [module_param]>>}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [module_param]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{module_param}} = $_tok; + push @item, $_tok; + + } + + + $repcount++; + + my $savetext = $text; + my $backtrack; + + # MATCH (OP RIGHTARG)(s) + while ($repcount < 100000000) + { + $backtrack = 0; + + Parse::RecDescent::_trace(q{Trying terminal: [/,/]}, Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/,/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:,)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + pop @item; + if (defined $1) {push @item, $item{'module_param(s?)'}=$1; $backtrack=1;} + + Parse::RecDescent::_trace(q{Trying subrule: [module_param]}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{module_param})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::module_param($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [module_param]>>}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [module_param]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{module_param}} = $_tok; + push @item, $_tok; + + } + + $savetext = $text; + $repcount++; + } + $text = $savetext; + pop @item if $backtrack; + + + $_tok = [ @item ]; + last; + } + + unless ($repcount>=0) + { + Parse::RecDescent::_trace(q{<<Didn't match operator: [<leftop: module_param /,/ module_param>]>>}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched operator: [<leftop: module_param /,/ module_param>]<< (return value: [} + . qq{@{$_tok||[]}} . q{]}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + + push @item, $item{'module_param(s?)'}=$_tok||[]; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "MODULEHEADER", + "PROPERTIES" => util::FlattenHash($item[3]) + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' <commit> <leftop: module_param /,/ module_param> ']']<<}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{module_header}); + %item = (__RULE__ => q{module_header}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{module_header}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{module_header}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{module_header}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::identifier +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"identifier"}; + + Parse::RecDescent::_trace(q{Trying rule: [identifier]}, + Parse::RecDescent::_tracefirst($_[1]), + q{identifier}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[\\w?]+/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{identifier}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{identifier}); + %item = (__RULE__ => q{identifier}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[\\w?]+/]}, Parse::RecDescent::_tracefirst($text), + q{identifier}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\w?]+)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/[\\w?]+/]<<}, + Parse::RecDescent::_tracefirst($text), + q{identifier}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{identifier}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{identifier}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{identifier}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{identifier}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::struct +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"struct"}; + + Parse::RecDescent::_trace(q{Trying rule: [struct]}, + Parse::RecDescent::_tracefirst($_[1]), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [property_list 'struct' <commit> '\{' element_list1 '\}']}, + Parse::RecDescent::_tracefirst($_[1]), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{struct}); + %item = (__RULE__ => q{struct}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [property_list]}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::property_list, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [property_list]>>}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [property_list]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{property_list(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: ['struct']}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'struct'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Astruct//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying terminal: ['\{']}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'\{'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\{//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [element_list1]}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{element_list1})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::element_list1, 0, 1, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [element_list1]>>}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [element_list1]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{element_list1(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: ['\}']}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'\}'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\}//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "STRUCT", + "PROPERTIES" => util::FlattenArray($item[1]), + "ELEMENTS" => util::FlattenArray2($item[5]) + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [property_list 'struct' <commit> '\{' element_list1 '\}']<<}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{struct}); + %item = (__RULE__ => q{struct}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{struct}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{struct}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{struct}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::text +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"text"}; + + Parse::RecDescent::_trace(q{Trying rule: [text]}, + Parse::RecDescent::_tracefirst($_[1]), + q{text}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[\\w\\s\\..?-]*/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{text}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{text}); + %item = (__RULE__ => q{text}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[\\w\\s\\..?-]*/]}, Parse::RecDescent::_tracefirst($text), + q{text}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\w\s\..?-]*)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/[\\w\\s\\..?-]*/]<<}, + Parse::RecDescent::_tracefirst($text), + q{text}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{text}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{text}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{text}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{text}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::expression +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"expression"}; + + Parse::RecDescent::_trace(q{Trying rule: [expression]}, + Parse::RecDescent::_tracefirst($_[1]), + q{expression}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[\\w.?\\/+*-_]+/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{expression}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{expression}); + %item = (__RULE__ => q{expression}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[\\w.?\\/+*-_]+/]}, Parse::RecDescent::_tracefirst($text), + q{expression}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\w.?\/+*-_]+)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/[\\w.?\\/+*-_]+/]<<}, + Parse::RecDescent::_tracefirst($text), + q{expression}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{expression}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{expression}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{expression}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{expression}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::union_element +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"union_element"}; + + Parse::RecDescent::_trace(q{Trying rule: [union_element]}, + Parse::RecDescent::_tracefirst($_[1]), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' 'case' '(' constant ')' ']' base_element ';']}, + Parse::RecDescent::_tracefirst($_[1]), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{union_element}); + %item = (__RULE__ => q{union_element}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['case']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'case'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Acase//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [constant]}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{constant})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::constant($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [constant]>>}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [constant]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{constant}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING4__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING5__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [base_element]}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{base_element})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::base_element($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [base_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [base_element]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{base_element}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [';']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{';'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING6__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "UNION_ELEMENT", + "CASE" => $item{constant}, + "DATA" => $item{base_element} + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' 'case' '(' constant ')' ']' base_element ';']<<}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' 'case' '(' constant ')' ']' ';']}, + Parse::RecDescent::_tracefirst($_[1]), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{union_element}); + %item = (__RULE__ => q{union_element}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['case']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'case'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Acase//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [constant]}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{constant})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::constant($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [constant]>>}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [constant]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{constant}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING4__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING5__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [';']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{';'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING6__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "EMPTY", + "CASE" => $item{constant}, + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' 'case' '(' constant ')' ']' ';']<<}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' 'default' ']' base_element ';']}, + Parse::RecDescent::_tracefirst($_[1]), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{union_element}); + %item = (__RULE__ => q{union_element}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['default']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'default'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Adefault//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [base_element]}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{base_element})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::base_element($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [base_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [base_element]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{base_element}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [';']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{';'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING4__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "UNION_ELEMENT", + "CASE" => "default", + "DATA" => $item{base_element} + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' 'default' ']' base_element ';']<<}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' 'default' ']' ';']}, + Parse::RecDescent::_tracefirst($_[1]), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + $text = $_[1]; + my $_savetext; + @item = (q{union_element}); + %item = (__RULE__ => q{union_element}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['default']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'default'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Adefault//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [';']}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{';'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING4__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "EMPTY", + "CASE" => "default", + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' 'default' ']' ';']<<}, + Parse::RecDescent::_tracefirst($text), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{union_element}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{union_element}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{union_element}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::interface +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"interface"}; + + Parse::RecDescent::_trace(q{Trying rule: [interface]}, + Parse::RecDescent::_tracefirst($_[1]), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['interface' <commit> identifier '\{' definition '\}']}, + Parse::RecDescent::_tracefirst($_[1]), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{interface}); + %item = (__RULE__ => q{interface}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['interface']}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Ainterface//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [identifier]}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{identifier})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [identifier]>>}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{identifier}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: ['\{']}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'\{'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\{//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [definition]}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{definition})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::definition, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [definition]>>}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [definition]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{definition(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: ['\}']}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'\}'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\}//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "INTERFACE", + "NAME" => $item{identifier}, + "DATA" => $item[5] + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['interface' <commit> identifier '\{' definition '\}']<<}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{interface}); + %item = (__RULE__ => q{interface}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{interface}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{interface}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{interface}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::typedef +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"typedef"}; + + Parse::RecDescent::_trace(q{Trying rule: [typedef]}, + Parse::RecDescent::_tracefirst($_[1]), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['typedef' <commit> type identifier array_len ';']}, + Parse::RecDescent::_tracefirst($_[1]), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{typedef}); + %item = (__RULE__ => q{typedef}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['typedef']}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Atypedef//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [type]}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{type})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::type($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [type]>>}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [type]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{type}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [identifier]}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{identifier})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [identifier]>>}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{identifier}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying repeated subrule: [array_len]}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{array_len})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::array_len, 0, 1, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [array_len]>>}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [array_len]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{array_len(?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: [';']}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{';'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "TYPEDEF", + "NAME" => $item{identifier}, + "DATA" => $item{type}, + "ARRAY_LEN" => $item[5][0] + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['typedef' <commit> type identifier array_len ';']<<}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{typedef}); + %item = (__RULE__ => q{typedef}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{typedef}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{typedef}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{typedef}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::call +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"call"}; + + Parse::RecDescent::_trace(q{Trying rule: [call]}, + Parse::RecDescent::_tracefirst($_[1]), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [expression '(' <commit> expression ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{call}); + %item = (__RULE__ => q{call}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [expression]}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::expression($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [expression]>>}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [expression]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{expression}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [expression]}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{expression})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::expression($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [expression]>>}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [expression]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{expression}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]($item[4])" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [expression '(' <commit> expression ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{call}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{call}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{call}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{call}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::idl +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"idl"}; + + Parse::RecDescent::_trace(q{Trying rule: [idl]}, + Parse::RecDescent::_tracefirst($_[1]), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [cpp_prefix module_header interface]}, + Parse::RecDescent::_tracefirst($_[1]), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{idl}); + %item = (__RULE__ => q{idl}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [cpp_prefix]}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::cpp_prefix, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [cpp_prefix]>>}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [cpp_prefix]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{cpp_prefix(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying subrule: [module_header]}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{module_header})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::module_header($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [module_header]>>}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [module_header]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{module_header}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying subrule: [interface]}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{interface})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::interface($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [interface]>>}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [interface]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{interface}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { [$item{module_header}, $item{interface}] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [cpp_prefix module_header interface]<<}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error...>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{idl}); + %item = (__RULE__ => q{idl}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error...>]}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if (1) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [<error...>]<<}, + Parse::RecDescent::_tracefirst($text), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{idl}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{idl}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{idl}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::cpp_prefix +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"cpp_prefix"}; + + Parse::RecDescent::_trace(q{Trying rule: [cpp_prefix]}, + Parse::RecDescent::_tracefirst($_[1]), + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['#' /.*/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{cpp_prefix}); + %item = (__RULE__ => q{cpp_prefix}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['#']}, + Parse::RecDescent::_tracefirst($text), + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\#//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [/.*/]}, Parse::RecDescent::_tracefirst($text), + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/.*/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:.*)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['#' /.*/]<<}, + Parse::RecDescent::_tracefirst($text), + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{cpp_prefix}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{cpp_prefix}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{cpp_prefix}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::property +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"property"}; + + Parse::RecDescent::_trace(q{Trying rule: [property]}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['unique']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['unique']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aunique//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['unique']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['in']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['in']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Ain//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['in']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['out']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['out']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aout//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['out']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['ref']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['ref']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aref//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['ref']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['context_handle']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[4]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['context_handle']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Acontext_handle//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['context_handle']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['string']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[5]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['string']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Astring//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['string']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['public']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[6]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['public']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Apublic//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['public']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['noprint']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[7]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['noprint']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Anoprint//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['noprint']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['relative']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[8]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['relative']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Arelative//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['relative']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['nodiscriminant']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[9]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['nodiscriminant']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Anodiscriminant//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['nodiscriminant']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['subcontext']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[10]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['subcontext']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Asubcontext//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['subcontext']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['byte_count_pointer' '(' expression ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[11]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['byte_count_pointer']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Abyte_count_pointer//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [expression]}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{expression})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::expression($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [expression]>>}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [expression]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{expression}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]" => "$item{expression}" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['byte_count_pointer' '(' expression ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['size_is' '(' expression ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[12]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['size_is']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Asize_is//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [expression]}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{expression})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::expression($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [expression]>>}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [expression]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{expression}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]" => "$item{expression}" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['size_is' '(' expression ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['length_is' '(' expression ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[13]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['length_is']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Alength_is//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [expression]}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{expression})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::expression($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [expression]>>}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [expression]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{expression}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]" => "$item{expression}" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['length_is' '(' expression ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['switch_is' '(' expression ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[14]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['switch_is']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aswitch_is//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [expression]}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{expression})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::expression($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [expression]>>}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [expression]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{expression}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]" => "$item{expression}" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['switch_is' '(' expression ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['value' '(' anytext ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[15]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['value']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Avalue//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [anytext]}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{anytext})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::anytext($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [anytext]>>}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [anytext]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{anytext}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]" => "$item{anytext}" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['value' '(' anytext ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['switch_type' '(' type ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[16]; + $text = $_[1]; + my $_savetext; + @item = (q{property}); + %item = (__RULE__ => q{property}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['switch_type']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aswitch_type//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [type]}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{type})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::type($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [type]>>}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [type]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{type}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]" => $item{type} }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['switch_type' '(' type ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{property}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{property}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{property}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{property}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::element_list2 +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"element_list2"}; + + Parse::RecDescent::_trace(q{Trying rule: [element_list2]}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['void']}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{element_list2}); + %item = (__RULE__ => q{element_list2}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['void']}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Avoid//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['void']<<}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [<leftop: base_element /,/ base_element>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{element_list2}); + %item = (__RULE__ => q{element_list2}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying operator: [<leftop: base_element /,/ base_element>]}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + $_tok = undef; + OPLOOP: while (1) + { + $repcount = 0; + my @item; + + # MATCH LEFTARG + + Parse::RecDescent::_trace(q{Trying subrule: [base_element]}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{base_element})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::base_element($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [base_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [base_element]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{base_element}} = $_tok; + push @item, $_tok; + + } + + + $repcount++; + + my $savetext = $text; + my $backtrack; + + # MATCH (OP RIGHTARG)(s) + while ($repcount < 100000000) + { + $backtrack = 0; + + Parse::RecDescent::_trace(q{Trying terminal: [/,/]}, Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/,/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:,)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + pop @item; + if (defined $1) {push @item, $item{'base_element(s?)'}=$1; $backtrack=1;} + + Parse::RecDescent::_trace(q{Trying subrule: [base_element]}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{base_element})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::base_element($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [base_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [base_element]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{base_element}} = $_tok; + push @item, $_tok; + + } + + $savetext = $text; + $repcount++; + } + $text = $savetext; + pop @item if $backtrack; + + + $_tok = [ @item ]; + last; + } + + unless ($repcount>=0) + { + Parse::RecDescent::_trace(q{<<Didn't match operator: [<leftop: base_element /,/ base_element>]>>}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched operator: [<leftop: base_element /,/ base_element>]<< (return value: [} + . qq{@{$_tok||[]}} . q{]}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + + push @item, $item{'base_element(s?)'}=$_tok||[]; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [<leftop: base_element /,/ base_element>]<<}, + Parse::RecDescent::_tracefirst($text), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{element_list2}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{element_list2}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{element_list2}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::anytext +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"anytext"}; + + Parse::RecDescent::_trace(q{Trying rule: [anytext]}, + Parse::RecDescent::_tracefirst($_[1]), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [text2 '(' <commit> anytext ')' anytext]}, + Parse::RecDescent::_tracefirst($_[1]), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{anytext}); + %item = (__RULE__ => q{anytext}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [text2]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::text2($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [text2]>>}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [text2]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{text2}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [anytext]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{anytext})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::anytext($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [anytext]>>}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [anytext]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{anytext}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [anytext]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{anytext})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::anytext($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [anytext]>>}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [anytext]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{anytext}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]($item[4])$item[6]" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [text2 '(' <commit> anytext ')' anytext]<<}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [text2 '+' anytext]}, + Parse::RecDescent::_tracefirst($_[1]), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{anytext}); + %item = (__RULE__ => q{anytext}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [text2]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::text2($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [text2]>>}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [text2]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{text2}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: ['+']}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'+'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\+//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [anytext]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{anytext})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::anytext($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [anytext]>>}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [anytext]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{anytext}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item[1]+$item[3]" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [text2 '+' anytext]<<}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [text2]}, + Parse::RecDescent::_tracefirst($_[1]), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{anytext}); + %item = (__RULE__ => q{anytext}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [text2]}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::text2($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [text2]>>}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [text2]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{text2}} = $_tok; + push @item, $_tok; + + } + + + Parse::RecDescent::_trace(q{>>Matched production: [text2]<<}, + Parse::RecDescent::_tracefirst($text), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{anytext}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{anytext}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{anytext}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::element_list1 +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"element_list1"}; + + Parse::RecDescent::_trace(q{Trying rule: [element_list1]}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [<leftop: base_element /;/ base_element> ';']}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{element_list1}); + %item = (__RULE__ => q{element_list1}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying operator: [<leftop: base_element /;/ base_element>]}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + $_tok = undef; + OPLOOP: while (1) + { + $repcount = 0; + my @item; + + # MATCH LEFTARG + + Parse::RecDescent::_trace(q{Trying subrule: [base_element]}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{base_element})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::base_element($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [base_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [base_element]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{base_element}} = $_tok; + push @item, $_tok; + + } + + + $repcount++; + + my $savetext = $text; + my $backtrack; + + # MATCH (OP RIGHTARG)(s) + while ($repcount < 100000000) + { + $backtrack = 0; + + Parse::RecDescent::_trace(q{Trying terminal: [/;/]}, Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{/;/})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:;)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + pop @item; + if (defined $1) {push @item, $item{'base_element(s?)'}=$1; $backtrack=1;} + + Parse::RecDescent::_trace(q{Trying subrule: [base_element]}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{base_element})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::base_element($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [base_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [base_element]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{base_element}} = $_tok; + push @item, $_tok; + + } + + $savetext = $text; + $repcount++; + } + $text = $savetext; + pop @item if $backtrack; + + + $_tok = [ @item ]; + last; + } + + unless ($repcount>=0) + { + Parse::RecDescent::_trace(q{<<Didn't match operator: [<leftop: base_element /;/ base_element>]>>}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched operator: [<leftop: base_element /;/ base_element>]<< (return value: [} + . qq{@{$_tok||[]}} . q{]}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + + push @item, $item{'base_element(s?)'}=$_tok||[]; + + + Parse::RecDescent::_trace(q{Trying terminal: [';']}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{';'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\;//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [<leftop: base_element /;/ base_element> ';']<<}, + Parse::RecDescent::_tracefirst($text), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{element_list1}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{element_list1}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{element_list1}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::constant +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"constant"}; + + Parse::RecDescent::_trace(q{Trying rule: [constant]}, + Parse::RecDescent::_tracefirst($_[1]), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/-?\\d+/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{constant}); + %item = (__RULE__ => q{constant}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/-?\\d+/]}, Parse::RecDescent::_tracefirst($text), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:-?\d+)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/-?\\d+/]<<}, + Parse::RecDescent::_tracefirst($text), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['*']}, + Parse::RecDescent::_tracefirst($_[1]), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{constant}); + %item = (__RULE__ => q{constant}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['*']}, + Parse::RecDescent::_tracefirst($text), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\*//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['*']<<}, + Parse::RecDescent::_tracefirst($text), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{constant}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{constant}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{constant}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::array_len +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"array_len"}; + + Parse::RecDescent::_trace(q{Trying rule: [array_len]}, + Parse::RecDescent::_tracefirst($_[1]), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' ']']}, + Parse::RecDescent::_tracefirst($_[1]), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{array_len}); + %item = (__RULE__ => q{array_len}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { "*" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' ']']<<}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' '*' ']']}, + Parse::RecDescent::_tracefirst($_[1]), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{array_len}); + %item = (__RULE__ => q{array_len}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: ['*']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'*'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\*//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { "*" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' '*' ']']<<}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['[' <commit> anytext ']']}, + Parse::RecDescent::_tracefirst($_[1]), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{array_len}); + %item = (__RULE__ => q{array_len}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['[']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\[//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying subrule: [anytext]}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{anytext})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::anytext($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [anytext]>>}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [anytext]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{anytext}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [']']}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{']'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\]//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { "$item{anytext}" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['[' <commit> anytext ']']<<}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + + my $_savetext; + @item = (q{array_len}); + %item = (__RULE__ => q{array_len}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{array_len}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{array_len}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{array_len}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::text2 +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"text2"}; + + Parse::RecDescent::_trace(q{Trying rule: [text2]}, + Parse::RecDescent::_tracefirst($_[1]), + q{text2}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [/[\\w\\s\\*\\>\\/\\..?-]*/]}, + Parse::RecDescent::_tracefirst($_[1]), + q{text2}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{text2}); + %item = (__RULE__ => q{text2}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: [/[\\w\\s\\*\\>\\/\\..?-]*/]}, Parse::RecDescent::_tracefirst($text), + q{text2}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A(?:[\w\s\*\>\/\..?-]*)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(q{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__PATTERN1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: [/[\\w\\s\\*\\>\\/\\..?-]*/]<<}, + Parse::RecDescent::_tracefirst($text), + q{text2}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{text2}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{text2}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{text2}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{text2}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::pointer +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"pointer"}; + + Parse::RecDescent::_trace(q{Trying rule: [pointer]}, + Parse::RecDescent::_tracefirst($_[1]), + q{pointer}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['*']}, + Parse::RecDescent::_tracefirst($_[1]), + q{pointer}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{pointer}); + %item = (__RULE__ => q{pointer}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['*']}, + Parse::RecDescent::_tracefirst($text), + q{pointer}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\*//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['*']<<}, + Parse::RecDescent::_tracefirst($text), + q{pointer}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{pointer}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{pointer}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{pointer}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{pointer}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::type +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"type"}; + + Parse::RecDescent::_trace(q{Trying rule: [type]}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['unsigned' type]}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['unsigned']}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aunsigned//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [type]}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{type})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::type($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [type]>>}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [type]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{type}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { "$item[1] $item[2]" }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['unsigned' type]<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['long']}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['long']}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Along//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['long']<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['string']}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[2]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['string']}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Astring//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['string']<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: ['wchar_t']}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[3]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying terminal: ['wchar_t']}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Awchar_t//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: ['wchar_t']<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [struct]}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[4]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [struct]}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::struct($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [struct]>>}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [struct]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{struct}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [struct]<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [union]}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[5]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [union]}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::union($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [union]>>}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [union]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{union}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [union]<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [identifier]}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[6]; + $text = $_[1]; + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [identifier]}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [identifier]>>}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{identifier}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do { $item[1] }; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [identifier]<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error...>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[7]; + + my $_savetext; + @item = (q{type}); + %item = (__RULE__ => q{type}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error...>]}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if (1) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [<error...>]<<}, + Parse::RecDescent::_tracefirst($text), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{type}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{type}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{type}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{type}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::module_param +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"module_param"}; + + Parse::RecDescent::_trace(q{Trying rule: [module_param]}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [identifier '(' text ')']}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{module_param}); + %item = (__RULE__ => q{module_param}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying subrule: [identifier]}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::identifier($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [identifier]>>}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [identifier]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{identifier}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: ['(']}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'('})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\(//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + Parse::RecDescent::_trace(q{Trying subrule: [text]}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + if (1) { no strict qw{refs}; + $expectation->is(q{text})->at($text); + unless (defined ($_tok = Parse::RecDescent::idl::text($thisparser,$text,$repeating,$_noactions,sub { \@arg }))) + { + + Parse::RecDescent::_trace(q{<<Didn't match subrule: [text]>>}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->failed(); + last; + } + Parse::RecDescent::_trace(q{>>Matched subrule: [text]<< (return value: [} + . $_tok . q{]}, + + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{text}} = $_tok; + push @item, $_tok; + + } + + Parse::RecDescent::_trace(q{Trying terminal: [')']}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{')'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\)//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ "$item{identifier}" => "$item{text}" }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [identifier '(' text ')']<<}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error...>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{module_param}); + %item = (__RULE__ => q{module_param}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error...>]}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if (1) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [<error...>]<<}, + Parse::RecDescent::_tracefirst($text), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{module_param}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{module_param}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{module_param}, + $tracelevel) + } + $_[1] = $text; + return $return; +} + +# ARGS ARE: ($parser, $text; $repeating, $_noactions, \@args) +sub Parse::RecDescent::idl::union +{ + my $thisparser = $_[0]; + use vars q{$tracelevel}; + local $tracelevel = ($tracelevel||0)+1; + $ERRORS = 0; + my $thisrule = $thisparser->{"rules"}{"union"}; + + Parse::RecDescent::_trace(q{Trying rule: [union]}, + Parse::RecDescent::_tracefirst($_[1]), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + + + my $err_at = @{$thisparser->{errors}}; + + my $score; + my $score_return; + my $_tok; + my $return = undef; + my $_matched=0; + my $commit=0; + my @item = (); + my %item = (); + my $repeating = defined($_[2]) && $_[2]; + my $_noactions = defined($_[3]) && $_[3]; + my @arg = defined $_[4] ? @{ &{$_[4]} } : (); + my %arg = ($#arg & 01) ? @arg : (@arg, undef); + my $text; + my $lastsep=""; + my $expectation = new Parse::RecDescent::Expectation($thisrule->expected()); + $expectation->at($_[1]); + + my $thisline; + tie $thisline, q{Parse::RecDescent::LineCounter}, \$text, $thisparser; + + + + while (!$_matched && !$commit) + { + + Parse::RecDescent::_trace(q{Trying production: [property_list 'union' <commit> '\{' union_element '\}']}, + Parse::RecDescent::_tracefirst($_[1]), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[0]; + $text = $_[1]; + my $_savetext; + @item = (q{union}); + %item = (__RULE__ => q{union}); + my $repcount = 0; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [property_list]}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::property_list, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [property_list]>>}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [property_list]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{property_list(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: ['union']}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'union'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\Aunion//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING1__}=$&; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<commit>]}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { $commit = 1 }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{Trying terminal: ['\{']}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'\{'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\{//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING2__}=$&; + + + Parse::RecDescent::_trace(q{Trying repeated subrule: [union_element]}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $expectation->is(q{union_element})->at($text); + + unless (defined ($_tok = $thisparser->_parserepeat($text, \&Parse::RecDescent::idl::union_element, 0, 100000000, $_noactions,$expectation,undef))) + { + Parse::RecDescent::_trace(q{<<Didn't match repeated subrule: [union_element]>>}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched repeated subrule: [union_element]<< (} + . @$_tok . q{ times)}, + + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $item{q{union_element(s?)}} = $_tok; + push @item, $_tok; + + + + Parse::RecDescent::_trace(q{Trying terminal: ['\}']}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $lastsep = ""; + $expectation->is(q{'\}'})->at($text); + + + unless ($text =~ s/\A($skip)/$lastsep=$1 and ""/e and $text =~ s/\A\}//) + { + + $expectation->failed(); + Parse::RecDescent::_trace(qq{<<Didn't match terminal>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched terminal<< (return value: [} + . $& . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $item{__STRING3__}=$&; + + + Parse::RecDescent::_trace(q{Trying action}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + + + $_tok = ($_noactions) ? 0 : do {{ + "TYPE" => "UNION", + "PROPERTIES" => util::FlattenArray($item[1]), + "DATA" => $item[5] + }}; + unless (defined $_tok) + { + Parse::RecDescent::_trace(q{<<Didn't match action>> (return value: [undef])}) + if defined $::RD_TRACE; + last; + } + Parse::RecDescent::_trace(q{>>Matched action<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + push @item, $_tok; + $item{__ACTION1__}=$_tok; + + + + Parse::RecDescent::_trace(q{>>Matched production: [property_list 'union' <commit> '\{' union_element '\}']<<}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + while (!$_matched) + { + + Parse::RecDescent::_trace(q{Trying production: [<error?:...> <reject>]}, + Parse::RecDescent::_tracefirst($_[1]), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + my $thisprod = $thisrule->{"prods"}[1]; + + my $_savetext; + @item = (q{union}); + %item = (__RULE__ => q{union}); + my $repcount = 0; + + + + + Parse::RecDescent::_trace(q{Trying directive: [<error?:...>]}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $_tok = do { if ($commit) { do { + my $rule = $item[0]; + $rule =~ s/_/ /g; + #WAS: Parse::RecDescent::_error("Invalid $rule: " . $expectation->message() ,$thisline); + push @{$thisparser->{errors}}, ["Invalid $rule: " . $expectation->message() ,$thisline]; + } unless $_noactions; undef } else {0} }; + if (defined($_tok)) + { + Parse::RecDescent::_trace(q{>>Matched directive<< (return value: [} + . $_tok . q{])}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + else + { + Parse::RecDescent::_trace(q{<<Didn't match directive>>}, + Parse::RecDescent::_tracefirst($text)) + if defined $::RD_TRACE; + } + + last unless defined $_tok; + push @item, $item{__DIRECTIVE1__}=$_tok; + + + Parse::RecDescent::_trace(q{>>Rejecting production<< (found <reject>)}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + undef $return; + + + $_tok = undef; + + last unless defined $_tok; + + + Parse::RecDescent::_trace(q{>>Matched production: [<error?:...> <reject>]<<}, + Parse::RecDescent::_tracefirst($text), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $_matched = 1; + last; + } + + + unless ( $_matched || defined($return) || defined($score) ) + { + + + $_[1] = $text; # NOT SURE THIS IS NEEDED + Parse::RecDescent::_trace(q{<<Didn't match rule>>}, + Parse::RecDescent::_tracefirst($_[1]), + q{union}, + $tracelevel) + if defined $::RD_TRACE; + return undef; + } + if (!defined($return) && defined($score)) + { + Parse::RecDescent::_trace(q{>>Accepted scored production<<}, "", + q{union}, + $tracelevel) + if defined $::RD_TRACE; + $return = $score_return; + } + splice @{$thisparser->{errors}}, $err_at; + $return = $item[$#item] unless defined $return; + if (defined $::RD_TRACE) + { + Parse::RecDescent::_trace(q{>>Matched rule<< (return value: [} . + $return . q{])}, "", + q{union}, + $tracelevel); + Parse::RecDescent::_trace(q{(consumed: [} . + Parse::RecDescent::_tracemax(substr($_[1],0,-length($text))) . q{])}, + Parse::RecDescent::_tracefirst($text), + , q{union}, + $tracelevel) + } + $_[1] = $text; + return $return; +} +} +package idl; sub new { my $self = bless( { + '_AUTOTREE' => undef, + 'localvars' => '', + 'startcode' => '', + '_check' => { + 'thisoffset' => '', + 'itempos' => '', + 'prevoffset' => '', + 'prevline' => '', + 'prevcolumn' => '', + 'thiscolumn' => '' + }, + 'namespace' => 'Parse::RecDescent::idl', + '_AUTOACTION' => undef, + 'rules' => { + 'function' => bless( { + 'impcount' => 0, + 'calls' => [ + 'type', + 'identifier', + 'element_list2' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'type', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 135 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'identifier', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 135 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 135 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 135, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'element_list2', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 135 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ');', + 'hashname' => '__STRING2__', + 'description' => '\');\'', + 'lookahead' => 0, + 'line' => 135 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 136, + 'code' => '{{ + "TYPE" => "FUNCTION", + "NAME" => $item{identifier}, + "RETURN_TYPE" => $item{type}, + "DATA" => $item{element_list2} + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 142 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 142 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'function', + 'vars' => '', + 'line' => 135 + }, 'Parse::RecDescent::Rule' ), + 'base_element' => bless( { + 'impcount' => 0, + 'calls' => [ + 'property_list', + 'type', + 'pointer', + 'identifier', + 'array_len' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'property_list', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 81 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'type', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 81 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'pointer', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 81 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'identifier', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 81 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'array_len', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 81 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 82, + 'code' => '{{ + "NAME" => $item{identifier}, + "TYPE" => $item{type}, + "PROPERTIES" => util::FlattenArray($item[1]), + "POINTERS" => $#{$item[3]}==-1?undef:$#{$item[3]}+1, + "ARRAY_LEN" => $item[5][0] + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '', + 'lookahead' => 0, + 'line' => 89 + }, 'Parse::RecDescent::Error' ) + ], + 'line' => 89 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'base_element', + 'vars' => '', + 'line' => 81 + }, 'Parse::RecDescent::Rule' ), + 'property_list' => bless( { + 'impcount' => 0, + 'calls' => [ + 'property' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 2, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'op' => [], + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 109 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 109, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'expected' => '<leftop: property /,/ property>', + 'min' => 1, + 'name' => '\'property(s)\'', + 'max' => 100000000, + 'leftarg' => bless( { + 'subrule' => 'property', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 109 + }, 'Parse::RecDescent::Subrule' ), + 'rightarg' => bless( { + 'subrule' => 'property', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 109 + }, 'Parse::RecDescent::Subrule' ), + 'hashname' => '__DIRECTIVE2__', + 'type' => 'leftop', + 'op' => bless( { + 'pattern' => ',', + 'hashname' => '__PATTERN1__', + 'description' => '/,/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 109, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + }, 'Parse::RecDescent::Operator' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING2__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 109 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 110, + 'code' => '{ $item[3] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 111 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 111 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'property_list', + 'vars' => '', + 'line' => 109 + }, 'Parse::RecDescent::Rule' ), + 'definition' => bless( { + 'impcount' => 0, + 'calls' => [ + 'cpp_prefix', + 'typedef', + 'function' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'cpp_prefix', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 28 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'typedef', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 29 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 29, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 29 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'function', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 30 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 30, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 30 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'definition', + 'vars' => '', + 'line' => 28 + }, 'Parse::RecDescent::Rule' ), + 'module_header' => bless( { + 'impcount' => 0, + 'calls' => [ + 'module_param' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 2, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'op' => [], + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 9 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 9, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'expected' => '<leftop: module_param /,/ module_param>', + 'min' => 0, + 'name' => '\'module_param(s?)\'', + 'max' => 100000000, + 'leftarg' => bless( { + 'subrule' => 'module_param', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 9 + }, 'Parse::RecDescent::Subrule' ), + 'rightarg' => bless( { + 'subrule' => 'module_param', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 9 + }, 'Parse::RecDescent::Subrule' ), + 'hashname' => '__DIRECTIVE2__', + 'type' => 'leftop', + 'op' => bless( { + 'pattern' => ',', + 'hashname' => '__PATTERN1__', + 'description' => '/,/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 9, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + }, 'Parse::RecDescent::Operator' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING2__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 9 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 10, + 'code' => '{{ + "TYPE" => "MODULEHEADER", + "PROPERTIES" => util::FlattenHash($item[3]) + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 14 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 14 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'module_header', + 'vars' => '', + 'line' => 9 + }, 'Parse::RecDescent::Rule' ), + 'identifier' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[\\w?]+', + 'hashname' => '__PATTERN1__', + 'description' => '/[\\\\w?]+/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 131, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'identifier', + 'vars' => '', + 'line' => 131 + }, 'Parse::RecDescent::Rule' ), + 'struct' => bless( { + 'impcount' => 0, + 'calls' => [ + 'property_list', + 'element_list1' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 3, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'property_list', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => 'struct', + 'hashname' => '__STRING1__', + 'description' => '\'struct\'', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 41, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'pattern' => '{', + 'hashname' => '__STRING2__', + 'description' => '\'\\{\'', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'element_list1', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => '}', + 'hashname' => '__STRING3__', + 'description' => '\'\\}\'', + 'lookahead' => 0, + 'line' => 41 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 42, + 'code' => '{{ + "TYPE" => "STRUCT", + "PROPERTIES" => util::FlattenArray($item[1]), + "ELEMENTS" => util::FlattenArray2($item[5]) + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 47 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 47 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'struct', + 'vars' => '', + 'line' => 41 + }, 'Parse::RecDescent::Rule' ), + 'text' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[\\w\\s\\..?-]*', + 'hashname' => '__PATTERN1__', + 'description' => '/[\\\\w\\\\s\\\\..?-]*/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 154, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'text', + 'vars' => '', + 'line' => 154 + }, 'Parse::RecDescent::Rule' ), + 'expression' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[\\w.?\\/+*-_]+', + 'hashname' => '__PATTERN1__', + 'description' => '/[\\\\w.?\\\\/+*-_]+/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 133, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'expression', + 'vars' => '', + 'line' => 133 + }, 'Parse::RecDescent::Rule' ), + 'union_element' => bless( { + 'impcount' => 0, + 'calls' => [ + 'constant', + 'base_element' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 6, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => 'case', + 'hashname' => '__STRING2__', + 'description' => '\'case\'', + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING3__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'constant', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING4__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING5__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'base_element', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ';', + 'hashname' => '__STRING6__', + 'description' => '\';\'', + 'lookahead' => 0, + 'line' => 58 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 59, + 'code' => '{{ + "TYPE" => "UNION_ELEMENT", + "CASE" => $item{constant}, + "DATA" => $item{base_element} + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 6, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => 'case', + 'hashname' => '__STRING2__', + 'description' => '\'case\'', + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING3__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'constant', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING4__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING5__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ';', + 'hashname' => '__STRING6__', + 'description' => '\';\'', + 'lookahead' => 0, + 'line' => 64 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 65, + 'code' => '{{ + "TYPE" => "EMPTY", + "CASE" => $item{constant}, + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 64 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 4, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => 'default', + 'hashname' => '__STRING2__', + 'description' => '\'default\'', + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING3__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'base_element', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ';', + 'hashname' => '__STRING4__', + 'description' => '\';\'', + 'lookahead' => 0, + 'line' => 69 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 70, + 'code' => '{{ + "TYPE" => "UNION_ELEMENT", + "CASE" => "default", + "DATA" => $item{base_element} + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 69 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 4, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 75 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => 'default', + 'hashname' => '__STRING2__', + 'description' => '\'default\'', + 'lookahead' => 0, + 'line' => 75 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING3__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 75 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ';', + 'hashname' => '__STRING4__', + 'description' => '\';\'', + 'lookahead' => 0, + 'line' => 75 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 76, + 'code' => '{{ + "TYPE" => "EMPTY", + "CASE" => "default", + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 75 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'union_element', + 'vars' => '', + 'line' => 57 + }, 'Parse::RecDescent::Rule' ), + 'interface' => bless( { + 'impcount' => 0, + 'calls' => [ + 'identifier', + 'definition' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 3, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'interface', + 'hashname' => '__STRING1__', + 'description' => '\'interface\'', + 'lookahead' => 0, + 'line' => 20 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 20, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'identifier', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 20 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '{', + 'hashname' => '__STRING2__', + 'description' => '\'\\{\'', + 'lookahead' => 0, + 'line' => 20 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'definition', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 20 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => '}', + 'hashname' => '__STRING3__', + 'description' => '\'\\}\'', + 'lookahead' => 0, + 'line' => 20 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 21, + 'code' => '{{ + "TYPE" => "INTERFACE", + "NAME" => $item{identifier}, + "DATA" => $item[5] + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 26 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 26 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'interface', + 'vars' => '', + 'line' => 20 + }, 'Parse::RecDescent::Rule' ), + 'typedef' => bless( { + 'impcount' => 0, + 'calls' => [ + 'type', + 'identifier', + 'array_len' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'typedef', + 'hashname' => '__STRING1__', + 'description' => '\'typedef\'', + 'lookahead' => 0, + 'line' => 32 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 32, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'type', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 32 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'identifier', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 32 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'array_len', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 1, + 'matchrule' => 0, + 'repspec' => '?', + 'lookahead' => 0, + 'line' => 32 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => ';', + 'hashname' => '__STRING2__', + 'description' => '\';\'', + 'lookahead' => 0, + 'line' => 32 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 33, + 'code' => '{{ + "TYPE" => "TYPEDEF", + "NAME" => $item{identifier}, + "DATA" => $item{type}, + "ARRAY_LEN" => $item[5][0] + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 39 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 39 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'typedef', + 'vars' => '', + 'line' => 32 + }, 'Parse::RecDescent::Rule' ), + 'call' => bless( { + 'impcount' => 0, + 'calls' => [ + 'expression' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'expression', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 164 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 164 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 164, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'expression', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 164 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 164 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 165, + 'code' => '{{ "$item[1]($item[4])" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'call', + 'vars' => '', + 'line' => 164 + }, 'Parse::RecDescent::Rule' ), + 'idl' => bless( { + 'impcount' => 0, + 'calls' => [ + 'cpp_prefix', + 'module_header', + 'interface' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'cpp_prefix', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 5 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'subrule' => 'module_header', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 5 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'subrule' => 'interface', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 5 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 6, + 'code' => '{ [$item{module_header}, $item{interface}] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '', + 'lookahead' => 0, + 'line' => 7 + }, 'Parse::RecDescent::Error' ) + ], + 'line' => 7 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'idl', + 'vars' => '', + 'line' => 5 + }, 'Parse::RecDescent::Rule' ), + 'cpp_prefix' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '#', + 'hashname' => '__STRING1__', + 'description' => '\'#\'', + 'lookahead' => 0, + 'line' => 170 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '.*', + 'hashname' => '__PATTERN1__', + 'description' => '/.*/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 170, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'cpp_prefix', + 'vars' => '', + 'line' => 170 + }, 'Parse::RecDescent::Rule' ), + 'property' => bless( { + 'impcount' => 0, + 'calls' => [ + 'expression', + 'anytext', + 'type' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'unique', + 'hashname' => '__STRING1__', + 'description' => '\'unique\'', + 'lookahead' => 0, + 'line' => 113 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'in', + 'hashname' => '__STRING1__', + 'description' => '\'in\'', + 'lookahead' => 0, + 'line' => 114 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 114 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'out', + 'hashname' => '__STRING1__', + 'description' => '\'out\'', + 'lookahead' => 0, + 'line' => 115 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 115 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'ref', + 'hashname' => '__STRING1__', + 'description' => '\'ref\'', + 'lookahead' => 0, + 'line' => 116 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 116 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '4', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'context_handle', + 'hashname' => '__STRING1__', + 'description' => '\'context_handle\'', + 'lookahead' => 0, + 'line' => 117 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 117 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '5', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'string', + 'hashname' => '__STRING1__', + 'description' => '\'string\'', + 'lookahead' => 0, + 'line' => 118 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 118 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '6', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'public', + 'hashname' => '__STRING1__', + 'description' => '\'public\'', + 'lookahead' => 0, + 'line' => 119 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 119 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '7', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'noprint', + 'hashname' => '__STRING1__', + 'description' => '\'noprint\'', + 'lookahead' => 0, + 'line' => 120 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 120 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '8', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'relative', + 'hashname' => '__STRING1__', + 'description' => '\'relative\'', + 'lookahead' => 0, + 'line' => 121 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 121 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '9', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'nodiscriminant', + 'hashname' => '__STRING1__', + 'description' => '\'nodiscriminant\'', + 'lookahead' => 0, + 'line' => 122 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 122 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '10', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'subcontext', + 'hashname' => '__STRING1__', + 'description' => '\'subcontext\'', + 'lookahead' => 0, + 'line' => 123 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 123 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '11', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'byte_count_pointer', + 'hashname' => '__STRING1__', + 'description' => '\'byte_count_pointer\'', + 'lookahead' => 0, + 'line' => 124 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING2__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 124 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'expression', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 124 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING3__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 124 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 124, + 'code' => '{{ "$item[1]" => "$item{expression}" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 124 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '12', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'size_is', + 'hashname' => '__STRING1__', + 'description' => '\'size_is\'', + 'lookahead' => 0, + 'line' => 125 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING2__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 125 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'expression', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 125 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING3__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 125 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 125, + 'code' => '{{ "$item[1]" => "$item{expression}" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 125 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '13', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'length_is', + 'hashname' => '__STRING1__', + 'description' => '\'length_is\'', + 'lookahead' => 0, + 'line' => 126 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING2__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 126 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'expression', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 126 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING3__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 126 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 126, + 'code' => '{{ "$item[1]" => "$item{expression}" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 126 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '14', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'switch_is', + 'hashname' => '__STRING1__', + 'description' => '\'switch_is\'', + 'lookahead' => 0, + 'line' => 127 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING2__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 127 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'expression', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 127 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING3__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 127 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 127, + 'code' => '{{ "$item[1]" => "$item{expression}" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 127 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '15', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'value', + 'hashname' => '__STRING1__', + 'description' => '\'value\'', + 'lookahead' => 0, + 'line' => 128 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING2__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 128 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'anytext', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 128 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING3__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 128 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 128, + 'code' => '{{ "$item[1]" => "$item{anytext}" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 128 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '16', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'switch_type', + 'hashname' => '__STRING1__', + 'description' => '\'switch_type\'', + 'lookahead' => 0, + 'line' => 129 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING2__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 129 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'type', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 129 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING3__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 129 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 129, + 'code' => '{{ "$item[1]" => $item{type} }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 129 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'property', + 'vars' => '', + 'line' => 113 + }, 'Parse::RecDescent::Rule' ), + 'element_list2' => bless( { + 'impcount' => 0, + 'calls' => [ + 'base_element' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => 'void', + 'hashname' => '__STRING1__', + 'description' => '\'void\'', + 'lookahead' => 0, + 'line' => 103 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'op' => [], + 'items' => [ + bless( { + 'expected' => '<leftop: base_element /,/ base_element>', + 'min' => 0, + 'name' => '\'base_element(s?)\'', + 'max' => 100000000, + 'leftarg' => bless( { + 'subrule' => 'base_element', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 104 + }, 'Parse::RecDescent::Subrule' ), + 'rightarg' => bless( { + 'subrule' => 'base_element', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 104 + }, 'Parse::RecDescent::Subrule' ), + 'hashname' => '__DIRECTIVE1__', + 'type' => 'leftop', + 'op' => bless( { + 'pattern' => ',', + 'hashname' => '__PATTERN1__', + 'description' => '/,/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 104, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + }, 'Parse::RecDescent::Operator' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 105, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 104 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'element_list2', + 'vars' => '', + 'line' => 103 + }, 'Parse::RecDescent::Rule' ), + 'anytext' => bless( { + 'impcount' => 0, + 'calls' => [ + 'text2', + 'anytext' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'text2', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 158 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 158 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 158, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'anytext', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 158 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 158 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'anytext', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 158 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 159, + 'code' => '{{ "$item[1]($item[4])$item[6]" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'text2', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 160 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '+', + 'hashname' => '__STRING1__', + 'description' => '\'+\'', + 'lookahead' => 0, + 'line' => 160 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'anytext', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 160 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 161, + 'code' => '{{ "$item[1]+$item[3]" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 160 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'subrule' => 'text2', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 162 + }, 'Parse::RecDescent::Subrule' ) + ], + 'line' => 162 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'anytext', + 'vars' => '', + 'line' => 158 + }, 'Parse::RecDescent::Rule' ), + 'element_list1' => bless( { + 'impcount' => 0, + 'calls' => [ + 'base_element' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 1, + 'op' => [], + 'items' => [ + bless( { + 'expected' => '<leftop: base_element /;/ base_element>', + 'min' => 0, + 'name' => '\'base_element(s?)\'', + 'max' => 100000000, + 'leftarg' => bless( { + 'subrule' => 'base_element', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 100 + }, 'Parse::RecDescent::Subrule' ), + 'rightarg' => bless( { + 'subrule' => 'base_element', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 100 + }, 'Parse::RecDescent::Subrule' ), + 'hashname' => '__DIRECTIVE1__', + 'type' => 'leftop', + 'op' => bless( { + 'pattern' => ';', + 'hashname' => '__PATTERN1__', + 'description' => '/;/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 100, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + }, 'Parse::RecDescent::Operator' ), + bless( { + 'pattern' => ';', + 'hashname' => '__STRING1__', + 'description' => '\';\'', + 'lookahead' => 0, + 'line' => 100 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 101, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'element_list1', + 'vars' => '', + 'line' => 100 + }, 'Parse::RecDescent::Rule' ), + 'constant' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '-?\\d+', + 'hashname' => '__PATTERN1__', + 'description' => '/-?\\\\d+/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 167, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '*', + 'hashname' => '__STRING1__', + 'description' => '\'*\'', + 'lookahead' => 0, + 'line' => 168 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => 168 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'constant', + 'vars' => '', + 'line' => 167 + }, 'Parse::RecDescent::Rule' ), + 'array_len' => bless( { + 'impcount' => 0, + 'calls' => [ + 'anytext' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 92 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING2__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 92 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 93, + 'code' => '{ "*" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 3, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 94 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => '*', + 'hashname' => '__STRING2__', + 'description' => '\'*\'', + 'lookahead' => 0, + 'line' => 94 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING3__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 94 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 95, + 'code' => '{ "*" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 94 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 2, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => '[', + 'hashname' => '__STRING1__', + 'description' => '\'[\'', + 'lookahead' => 0, + 'line' => 96 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 96, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'subrule' => 'anytext', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 96 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ']', + 'hashname' => '__STRING2__', + 'description' => '\']\'', + 'lookahead' => 0, + 'line' => 96 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 97, + 'code' => '{ "$item{anytext}" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 96 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 98 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 98 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'array_len', + 'vars' => '', + 'line' => 91 + }, 'Parse::RecDescent::Rule' ), + 'text2' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 1, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '[\\w\\s\\*\\>\\/\\..?-]*', + 'hashname' => '__PATTERN1__', + 'description' => '/[\\\\w\\\\s\\\\*\\\\>\\\\/\\\\..?-]*/', + 'lookahead' => 0, + 'rdelim' => '/', + 'line' => 156, + 'mod' => '', + 'ldelim' => '/' + }, 'Parse::RecDescent::Token' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'text2', + 'vars' => '', + 'line' => 156 + }, 'Parse::RecDescent::Rule' ), + 'pointer' => bless( { + 'impcount' => 0, + 'calls' => [], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'pattern' => '*', + 'hashname' => '__STRING1__', + 'description' => '\'*\'', + 'lookahead' => 0, + 'line' => 107 + }, 'Parse::RecDescent::Literal' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'pointer', + 'vars' => '', + 'line' => 107 + }, 'Parse::RecDescent::Rule' ), + 'type' => bless( { + 'impcount' => 0, + 'calls' => [ + 'type', + 'struct', + 'union', + 'identifier' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'unsigned', + 'hashname' => '__STRING1__', + 'description' => '\'unsigned\'', + 'lookahead' => 0, + 'line' => 145 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'type', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 145 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 145, + 'code' => '{ "$item[1] $item[2]" }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'long', + 'hashname' => '__STRING1__', + 'description' => '\'long\'', + 'lookahead' => 0, + 'line' => 146 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 146, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 146 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '2', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'string', + 'hashname' => '__STRING1__', + 'description' => '\'string\'', + 'lookahead' => 0, + 'line' => 147 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 147, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 147 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '3', + 'strcount' => 1, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'pattern' => 'wchar_t', + 'hashname' => '__STRING1__', + 'description' => '\'wchar_t\'', + 'lookahead' => 0, + 'line' => 148 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 148, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 148 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '4', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'struct', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 149 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 149, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 149 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '5', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'union', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 150 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 150, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 150 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '6', + 'strcount' => 0, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'identifier', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 151 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 151, + 'code' => '{ $item[1] }' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => 151 + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '7', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '', + 'lookahead' => 0, + 'line' => 152 + }, 'Parse::RecDescent::Error' ) + ], + 'line' => 152 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'type', + 'vars' => '', + 'line' => 144 + }, 'Parse::RecDescent::Rule' ), + 'module_param' => bless( { + 'impcount' => 0, + 'calls' => [ + 'identifier', + 'text' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 2, + 'dircount' => 0, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'identifier', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 16 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => '(', + 'hashname' => '__STRING1__', + 'description' => '\'(\'', + 'lookahead' => 0, + 'line' => 16 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'text', + 'matchrule' => 0, + 'implicit' => undef, + 'argcode' => undef, + 'lookahead' => 0, + 'line' => 16 + }, 'Parse::RecDescent::Subrule' ), + bless( { + 'pattern' => ')', + 'hashname' => '__STRING2__', + 'description' => '\')\'', + 'lookahead' => 0, + 'line' => 16 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 17, + 'code' => '{{ "$item{identifier}" => "$item{text}" }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '', + 'lookahead' => 0, + 'line' => 18 + }, 'Parse::RecDescent::Error' ) + ], + 'line' => 18 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'module_param', + 'vars' => '', + 'line' => 16 + }, 'Parse::RecDescent::Rule' ), + 'union' => bless( { + 'impcount' => 0, + 'calls' => [ + 'property_list', + 'union_element' + ], + 'changed' => 0, + 'opcount' => 0, + 'prods' => [ + bless( { + 'number' => '0', + 'strcount' => 3, + 'dircount' => 1, + 'uncommit' => undef, + 'error' => undef, + 'patcount' => 0, + 'actcount' => 1, + 'items' => [ + bless( { + 'subrule' => 'property_list', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 49 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => 'union', + 'hashname' => '__STRING1__', + 'description' => '\'union\'', + 'lookahead' => 0, + 'line' => 49 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__DIRECTIVE1__', + 'name' => '<commit>', + 'lookahead' => 0, + 'line' => 49, + 'code' => '$commit = 1' + }, 'Parse::RecDescent::Directive' ), + bless( { + 'pattern' => '{', + 'hashname' => '__STRING2__', + 'description' => '\'\\{\'', + 'lookahead' => 0, + 'line' => 49 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'subrule' => 'union_element', + 'expected' => undef, + 'min' => 0, + 'argcode' => undef, + 'max' => 100000000, + 'matchrule' => 0, + 'repspec' => 's?', + 'lookahead' => 0, + 'line' => 49 + }, 'Parse::RecDescent::Repetition' ), + bless( { + 'pattern' => '}', + 'hashname' => '__STRING3__', + 'description' => '\'\\}\'', + 'lookahead' => 0, + 'line' => 49 + }, 'Parse::RecDescent::Literal' ), + bless( { + 'hashname' => '__ACTION1__', + 'lookahead' => 0, + 'line' => 50, + 'code' => '{{ + "TYPE" => "UNION", + "PROPERTIES" => util::FlattenArray($item[1]), + "DATA" => $item[5] + }}' + }, 'Parse::RecDescent::Action' ) + ], + 'line' => undef + }, 'Parse::RecDescent::Production' ), + bless( { + 'number' => '1', + 'strcount' => 0, + 'dircount' => 1, + 'uncommit' => 0, + 'error' => 1, + 'patcount' => 0, + 'actcount' => 0, + 'items' => [ + bless( { + 'msg' => '', + 'hashname' => '__DIRECTIVE1__', + 'commitonly' => '?', + 'lookahead' => 0, + 'line' => 55 + }, 'Parse::RecDescent::Error' ), + bless( { + 'name' => '<reject>', + 'lookahead' => 0, + 'line' => 0 + }, 'Parse::RecDescent::UncondReject' ) + ], + 'line' => 55 + }, 'Parse::RecDescent::Production' ) + ], + 'name' => 'union', + 'vars' => '', + 'line' => 49 + }, 'Parse::RecDescent::Rule' ) + } + }, 'Parse::RecDescent' ); +}
\ No newline at end of file diff --git a/source4/build/pidl/pidl.pl b/source4/build/pidl/pidl.pl index 06bdb92b12..484223d4aa 100755 --- a/source4/build/pidl/pidl.pl +++ b/source4/build/pidl/pidl.pl @@ -8,12 +8,10 @@ use strict; -my($PIDLBASE) = "$ENV{HOME}/pidl"; use lib "$ENV{HOME}/pidl"; use Getopt::Long; -use Data::Dumper; -use Parse::RecDescent; +use idl; use dump; use header; use parser; @@ -43,8 +41,7 @@ sub IdlParse($) $item[1] : "XX_" . $item[0] . "_XX[$#item]" }; my($filename) = shift; - my($grammer) = util::FileLoad("$PIDLBASE/idl.gram"); - my($parser) = Parse::RecDescent->new($grammer); + my($parser) = idl->new; my($saved_sep) = $/; undef $/; diff --git a/source4/build/pidl/util.pm b/source4/build/pidl/util.pm index 53ad4942c7..c3f46dc817 100644 --- a/source4/build/pidl/util.pm +++ b/source4/build/pidl/util.pm @@ -99,7 +99,7 @@ sub FileLoad($) { my($filename) = shift; local(*INPUTFILE); - open(INPUTFILE, $filename) || die "can't load $filename"; + open(INPUTFILE, $filename) || return undef; my($saved_delim) = $/; undef $/; my($data) = <INPUTFILE>; |