File Coverage

blib/lib/Config/Objective/Parser.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             ####################################################################
2             #
3             # This file was generated using Parse::Yapp version 1.05.
4             #
5             # Don't edit this file, use source file instead.
6             #
7             # ANY CHANGE MADE HERE WILL BE LOST !
8             #
9             ####################################################################
10             package Config::Objective::Parser;
11 1     1   4 use vars qw ( @ISA );
  1         2  
  1         41  
12 1     1   3 use strict;
  1         2  
  1         30  
13              
14             @ISA= qw ( Parse::Yapp::Driver );
15 1     1   829 use Parse::Yapp::Driver;
  1         2191  
  1         228  
16              
17             #line 19 "grammar.yp"
18              
19             use strict;
20              
21             ###
22             ### constants for conditional evaluation state
23             ###
24              
25             ### either we already found a true condition, or the parent conditional
26             ### block is not being evaluated, so:
27             ### 1. subsequent %else or %elif clauses are NOT evaluated
28             ### 2. enclosed statements are NOT evaluated
29             use constant CS_NO_EVAL => -1;
30              
31             ### have not yet found a true conditional in this block, which means:
32             ### 1. subsequent %else or %elif clauses are evaluated
33             ### 2. enclosed statements are NOT evaluated
34             use constant CS_FALSE => 0;
35              
36             ### immediately preceding condition was true, so:
37             ### 1. subsequent %else or %elif clauses are NOT evaluated
38             ### 2. enclosed statements are evaluated
39             use constant CS_TRUE => 1;
40              
41              
42             sub new {
43             my($class)=shift;
44             ref($class)
45             and $class=ref($class);
46              
47             my($self)=$class->SUPER::new( yyversion => '1.05',
48             yystates =>
49             [
50             {#State 0
51             DEFAULT => -1,
52             GOTOS => {
53             'config' => 1
54             }
55             },
56             {#State 1
57             ACTIONS => {
58             'IF' => 7,
59             '' => 4,
60             'ELIF' => 14,
61             'WORD' => 12,
62             'INCLUDE' => 15,
63             'ELSE' => 3
64             },
65             GOTOS => {
66             'directive' => 9,
67             'cond_if' => 8,
68             'statement' => 10,
69             'conditional' => 13,
70             'cond_else' => 11,
71             'include' => 2,
72             'method_call' => 5,
73             'cond_elif' => 6
74             }
75             },
76             {#State 2
77             DEFAULT => -5
78             },
79             {#State 3
80             DEFAULT => -20
81             },
82             {#State 4
83             DEFAULT => 0
84             },
85             {#State 5
86             ACTIONS => {
87             'EOS' => 16
88             }
89             },
90             {#State 6
91             DEFAULT => -8
92             },
93             {#State 7
94             ACTIONS => {
95             'PAREN_START' => 17
96             }
97             },
98             {#State 8
99             DEFAULT => -1,
100             GOTOS => {
101             'config' => 18
102             }
103             },
104             {#State 9
105             DEFAULT => -2
106             },
107             {#State 10
108             DEFAULT => -3
109             },
110             {#State 11
111             DEFAULT => -9
112             },
113             {#State 12
114             ACTIONS => {
115             'METHOD_ARROW' => 19
116             },
117             DEFAULT => -27,
118             GOTOS => {
119             'method_name' => 20
120             }
121             },
122             {#State 13
123             DEFAULT => -4
124             },
125             {#State 14
126             ACTIONS => {
127             'PAREN_START' => 21
128             }
129             },
130             {#State 15
131             ACTIONS => {
132             'QSTRING' => 22,
133             'WORD' => 23
134             },
135             GOTOS => {
136             'string' => 24
137             }
138             },
139             {#State 16
140             DEFAULT => -26
141             },
142             {#State 17
143             ACTIONS => {
144             'PAREN_START' => 25,
145             'NOT' => 28
146             },
147             DEFAULT => -15,
148             GOTOS => {
149             '@1-0' => 26,
150             'expression' => 29,
151             'expr' => 27
152             }
153             },
154             {#State 18
155             ACTIONS => {
156             'IF' => 7,
157             'ELSE' => 3,
158             'ENDIF' => 31,
159             'ELIF' => 14,
160             'WORD' => 12,
161             'INCLUDE' => 15
162             },
163             GOTOS => {
164             'method_call' => 5,
165             'cond_elif' => 6,
166             'cond_endif' => 30,
167             'include' => 2,
168             'cond_else' => 11,
169             'conditional' => 13,
170             'directive' => 9,
171             'statement' => 10,
172             'cond_if' => 8
173             }
174             },
175             {#State 19
176             ACTIONS => {
177             'WORD' => 32
178             }
179             },
180             {#State 20
181             ACTIONS => {
182             'PAREN_START' => 36,
183             'QSTRING' => 22,
184             'WORD' => 23,
185             'HASH_START' => 40,
186             'LIST_START' => 39
187             },
188             DEFAULT => -29,
189             GOTOS => {
190             'string' => 37,
191             'value' => 35,
192             'hash' => 34,
193             'method_args' => 38,
194             'list' => 33
195             }
196             },
197             {#State 21
198             ACTIONS => {
199             'NOT' => 28,
200             'PAREN_START' => 25
201             },
202             DEFAULT => -15,
203             GOTOS => {
204             'expression' => 41,
205             'expr' => 27,
206             '@1-0' => 26
207             }
208             },
209             {#State 22
210             DEFAULT => -22
211             },
212             {#State 23
213             DEFAULT => -21
214             },
215             {#State 24
216             DEFAULT => -6
217             },
218             {#State 25
219             ACTIONS => {
220             'NOT' => 28,
221             'PAREN_START' => 25
222             },
223             DEFAULT => -15,
224             GOTOS => {
225             '@1-0' => 26,
226             'expr' => 27,
227             'expression' => 42
228             }
229             },
230             {#State 26
231             ACTIONS => {
232             'WORD' => 12
233             },
234             GOTOS => {
235             'method_call' => 43
236             }
237             },
238             {#State 27
239             DEFAULT => -10
240             },
241             {#State 28
242             ACTIONS => {
243             'NOT' => 28,
244             'PAREN_START' => 25
245             },
246             DEFAULT => -15,
247             GOTOS => {
248             '@1-0' => 26,
249             'expression' => 44,
250             'expr' => 27
251             }
252             },
253             {#State 29
254             ACTIONS => {
255             'PAREN_END' => 47,
256             'AND' => 46,
257             'OR' => 45
258             }
259             },
260             {#State 30
261             DEFAULT => -7
262             },
263             {#State 31
264             DEFAULT => -18
265             },
266             {#State 32
267             DEFAULT => -28
268             },
269             {#State 33
270             DEFAULT => -24
271             },
272             {#State 34
273             DEFAULT => -25
274             },
275             {#State 35
276             DEFAULT => -30
277             },
278             {#State 36
279             DEFAULT => -31,
280             GOTOS => {
281             '@2-1' => 48
282             }
283             },
284             {#State 37
285             DEFAULT => -23
286             },
287             {#State 38
288             DEFAULT => -33
289             },
290             {#State 39
291             DEFAULT => -34,
292             GOTOS => {
293             '@3-1' => 49
294             }
295             },
296             {#State 40
297             ACTIONS => {
298             'HASH_END' => 51
299             },
300             DEFAULT => -40,
301             GOTOS => {
302             '@4-1' => 50
303             }
304             },
305             {#State 41
306             ACTIONS => {
307             'OR' => 45,
308             'PAREN_END' => 52,
309             'AND' => 46
310             }
311             },
312             {#State 42
313             ACTIONS => {
314             'AND' => 46,
315             'PAREN_END' => 53,
316             'OR' => 45
317             }
318             },
319             {#State 43
320             DEFAULT => -16
321             },
322             {#State 44
323             DEFAULT => -11
324             },
325             {#State 45
326             ACTIONS => {
327             'PAREN_START' => 25,
328             'NOT' => 28
329             },
330             DEFAULT => -15,
331             GOTOS => {
332             'expr' => 27,
333             'expression' => 54,
334             '@1-0' => 26
335             }
336             },
337             {#State 46
338             ACTIONS => {
339             'PAREN_START' => 25,
340             'NOT' => 28
341             },
342             DEFAULT => -15,
343             GOTOS => {
344             '@1-0' => 26,
345             'expression' => 55,
346             'expr' => 27
347             }
348             },
349             {#State 47
350             DEFAULT => -17
351             },
352             {#State 48
353             ACTIONS => {
354             'LIST_START' => 39,
355             'QSTRING' => 22,
356             'HASH_START' => 40,
357             'WORD' => 23
358             },
359             DEFAULT => -36,
360             GOTOS => {
361             'list' => 33,
362             'list_values' => 57,
363             'hash' => 34,
364             'value' => 56,
365             'string' => 37
366             }
367             },
368             {#State 49
369             ACTIONS => {
370             'LIST_START' => 39,
371             'QSTRING' => 22,
372             'WORD' => 23,
373             'HASH_START' => 40
374             },
375             DEFAULT => -36,
376             GOTOS => {
377             'string' => 37,
378             'value' => 56,
379             'hash' => 34,
380             'list' => 33,
381             'list_values' => 58
382             }
383             },
384             {#State 50
385             ACTIONS => {
386             'WORD' => 23,
387             'QSTRING' => 22
388             },
389             GOTOS => {
390             'string' => 59,
391             'hash_value' => 61,
392             'hash_values' => 60
393             }
394             },
395             {#State 51
396             DEFAULT => -39
397             },
398             {#State 52
399             DEFAULT => -19
400             },
401             {#State 53
402             DEFAULT => -14
403             },
404             {#State 54
405             DEFAULT => -12
406             },
407             {#State 55
408             DEFAULT => -13
409             },
410             {#State 56
411             DEFAULT => -37
412             },
413             {#State 57
414             ACTIONS => {
415             'COMMA' => 63,
416             'PAREN_END' => 62
417             }
418             },
419             {#State 58
420             ACTIONS => {
421             'COMMA' => 63,
422             'LIST_END' => 64
423             }
424             },
425             {#State 59
426             ACTIONS => {
427             'HASH_ARROW' => 65
428             },
429             DEFAULT => -44
430             },
431             {#State 60
432             ACTIONS => {
433             'HASH_END' => 67,
434             'COMMA' => 66
435             }
436             },
437             {#State 61
438             DEFAULT => -43
439             },
440             {#State 62
441             DEFAULT => -32
442             },
443             {#State 63
444             ACTIONS => {
445             'LIST_START' => 39,
446             'QSTRING' => 22,
447             'WORD' => 23,
448             'HASH_START' => 40
449             },
450             GOTOS => {
451             'string' => 37,
452             'value' => 68,
453             'hash' => 34,
454             'list' => 33
455             }
456             },
457             {#State 64
458             DEFAULT => -35
459             },
460             {#State 65
461             ACTIONS => {
462             'LIST_START' => 39,
463             'HASH_START' => 40,
464             'WORD' => 23,
465             'QSTRING' => 22
466             },
467             GOTOS => {
468             'list' => 33,
469             'hash' => 34,
470             'value' => 69,
471             'string' => 37
472             }
473             },
474             {#State 66
475             ACTIONS => {
476             'QSTRING' => 22,
477             'WORD' => 23
478             },
479             GOTOS => {
480             'hash_value' => 70,
481             'string' => 59
482             }
483             },
484             {#State 67
485             DEFAULT => -41
486             },
487             {#State 68
488             DEFAULT => -38
489             },
490             {#State 69
491             DEFAULT => -45
492             },
493             {#State 70
494             DEFAULT => -42
495             }
496             ],
497             yyrules =>
498             [
499             [#Rule 0
500             '$start', 2, undef
501             ],
502             [#Rule 1
503             'config', 0, undef
504             ],
505             [#Rule 2
506             'config', 2, undef
507             ],
508             [#Rule 3
509             'directive', 1, undef
510             ],
511             [#Rule 4
512             'directive', 1, undef
513             ],
514             [#Rule 5
515             'directive', 1, undef
516             ],
517             [#Rule 6
518             'include', 2,
519             sub
520             #line 65 "grammar.yp"
521             {
522             my ($config) = $_[0]->YYData->{'config'};
523              
524             return undef
525             if (@{$config->{'cond_stack'}}
526             && $config->{'cond_stack'}->[-1] != CS_TRUE);
527              
528             $_[2] = $config->{'include_dir'} . '/' . $_[2]
529             if ($_[2] !~ m|^/|);
530              
531             $config->parse($_[2]);
532             }
533             ],
534             [#Rule 7
535             'conditional', 3, undef
536             ],
537             [#Rule 8
538             'conditional', 1, undef
539             ],
540             [#Rule 9
541             'conditional', 1, undef
542             ],
543             [#Rule 10
544             'expression', 1, undef
545             ],
546             [#Rule 11
547             'expression', 2,
548             sub
549             #line 88 "grammar.yp"
550             {
551             return (! $_[2]);
552             }
553             ],
554             [#Rule 12
555             'expression', 3,
556             sub
557             #line 92 "grammar.yp"
558             {
559             return ($_[1] || $_[3]);
560             }
561             ],
562             [#Rule 13
563             'expression', 3,
564             sub
565             #line 96 "grammar.yp"
566             {
567             return ($_[1] && $_[3]);
568             }
569             ],
570             [#Rule 14
571             'expression', 3,
572             sub
573             #line 100 "grammar.yp"
574             {
575             return $_[2];
576             }
577             ],
578             [#Rule 15
579             '@1-0', 0,
580             sub
581             #line 106 "grammar.yp"
582             {
583             my ($config) = $_[0]->YYData->{'config'};
584             $config->{'in_expr'} = 1;
585             }
586             ],
587             [#Rule 16
588             'expr', 2,
589             sub
590             #line 111 "grammar.yp"
591             {
592             my ($config) = $_[0]->YYData->{'config'};
593             $config->{'in_expr'} = 0;
594             return $_[2];
595             }
596             ],
597             [#Rule 17
598             'cond_if', 4,
599             sub
600             #line 119 "grammar.yp"
601             {
602             my ($config) = $_[0]->YYData->{'config'};
603              
604             push(@{$config->{'cond_stack'}},
605             ((@{$config->{'cond_stack'}}
606             && $config->{'cond_stack'}->[-1] != CS_TRUE)
607             ? CS_NO_EVAL
608             : ($_[3]
609             ? CS_TRUE
610             : CS_FALSE)));
611             }
612             ],
613             [#Rule 18
614             'cond_endif', 1,
615             sub
616             #line 134 "grammar.yp"
617             {
618             my ($config) = $_[0]->YYData->{'config'};
619              
620             die "%endif: not in conditional\n"
621             if (! @{$config->{'cond_stack'}});
622              
623             pop(@{$config->{'cond_stack'}});
624             }
625             ],
626             [#Rule 19
627             'cond_elif', 4,
628             sub
629             #line 146 "grammar.yp"
630             {
631             my ($config) = $_[0]->YYData->{'config'};
632              
633             die "%elif: not in conditional\n"
634             if (! @{$config->{'cond_stack'}});
635              
636             ### all previous conditions were false, so evaluate this one
637             if ($config->{'cond_stack'}->[-1] == CS_FALSE)
638             {
639             $config->{'cond_stack'}->[-1] = ($_[3]
640             ? CS_TRUE
641             : CS_FALSE);
642             }
643              
644             ### the last condition was true, so all subsequent %else
645             ### or %elif clauses must be false
646             elsif ($config->{'cond_stack'}->[-1] == CS_TRUE)
647             {
648             $config->{'cond_stack'}->[-1] = CS_NO_EVAL;
649             }
650              
651             ### if it's CS_NO_EVAL, leave it alone
652             }
653             ],
654             [#Rule 20
655             'cond_else', 1,
656             sub
657             #line 173 "grammar.yp"
658             {
659             my ($config) = $_[0]->YYData->{'config'};
660              
661             die '%else: not in conditional'
662             if (! @{$config->{'cond_stack'}});
663              
664             ### all previous conditions were false, so set to true
665             if ($config->{'cond_stack'}->[-1] == CS_FALSE)
666             {
667             $config->{'cond_stack'}->[-1] = CS_TRUE;
668             }
669              
670             ### the last condition was true, so set to CS_NO_EVAL
671             elsif ($config->{'cond_stack'}->[-1] == CS_TRUE)
672             {
673             $config->{'cond_stack'}->[-1] = CS_NO_EVAL;
674             }
675              
676             ### if it's CS_NO_EVAL, leave it alone
677             }
678             ],
679             [#Rule 21
680             'string', 1, undef
681             ],
682             [#Rule 22
683             'string', 1, undef
684             ],
685             [#Rule 23
686             'value', 1, undef
687             ],
688             [#Rule 24
689             'value', 1, undef
690             ],
691             [#Rule 25
692             'value', 1, undef
693             ],
694             [#Rule 26
695             'statement', 2, undef
696             ],
697             [#Rule 27
698             'method_name', 0,
699             sub
700             #line 210 "grammar.yp"
701             {
702             my ($config) = $_[0]->YYData->{'config'};
703             return ($config->{'in_expr'} ? 'equals' : 'default');
704             }
705             ],
706             [#Rule 28
707             'method_name', 2,
708             sub
709             #line 215 "grammar.yp"
710             {
711             return $_[2];
712             }
713             ],
714             [#Rule 29
715             'method_args', 0,
716             sub
717             #line 222 "grammar.yp"
718             {
719             my ($config) = $_[0]->YYData->{'config'};
720             push(@{$config->{arg_stack}}, []);
721             }
722             ],
723             [#Rule 30
724             'method_args', 1,
725             sub
726             #line 227 "grammar.yp"
727             {
728             my ($config) = $_[0]->YYData->{'config'};
729             push(@{$config->{arg_stack}}, [ $_[1] ]);
730             }
731             ],
732             [#Rule 31
733             '@2-1', 0,
734             sub
735             #line 232 "grammar.yp"
736             {
737             my ($config) = $_[0]->YYData->{'config'};
738             push(@{$config->{'list_stack'}}, []);
739             }
740             ],
741             [#Rule 32
742             'method_args', 4,
743             sub
744             #line 237 "grammar.yp"
745             {
746             my ($config) = $_[0]->YYData->{'config'};
747             push(@{$config->{arg_stack}}, pop(@{$config->{'list_stack'}}));
748             }
749             ],
750             [#Rule 33
751             'method_call', 3,
752             sub
753             #line 245 "grammar.yp"
754             {
755             my ($config) = $_[0]->YYData->{'config'};
756              
757             # print "var='$_[1]' method='$_[2]' value='$_[3]'\n";
758              
759             ### for conditional expressions, don't bother evaluating
760             ### if a previous condition was true
761             return undef
762             if ($config->{'in_expr'}
763             && $config->{'cond_stack'}->[-1] == CS_NO_EVAL);
764              
765             ### for statements, don't evaluate if we're inside a
766             ### false conditional block
767             return undef
768             if (! $config->{'in_expr'}
769             && @{$config->{'cond_stack'}}
770             && $config->{'cond_stack'}->[-1] != CS_TRUE);
771              
772             return $config->_call_obj_method($_[1], $_[2],
773             @{pop(@{$config->{arg_stack}})});
774             }
775             ],
776             [#Rule 34
777             '@3-1', 0,
778             sub
779             #line 269 "grammar.yp"
780             {
781             my ($config) = $_[0]->YYData->{'config'};
782             push(@{$config->{'list_stack'}}, []);
783             }
784             ],
785             [#Rule 35
786             'list', 4,
787             sub
788             #line 274 "grammar.yp"
789             {
790             my ($config) = $_[0]->YYData->{'config'};
791             return pop(@{$config->{'list_stack'}});
792             }
793             ],
794             [#Rule 36
795             'list_values', 0, undef
796             ],
797             [#Rule 37
798             'list_values', 1,
799             sub
800             #line 283 "grammar.yp"
801             {
802             my ($config) = $_[0]->YYData->{'config'};
803             push(@{$config->{'list_stack'}->[-1]}, $_[1]);
804             }
805             ],
806             [#Rule 38
807             'list_values', 3,
808             sub
809             #line 288 "grammar.yp"
810             {
811             my ($config) = $_[0]->YYData->{'config'};
812             push(@{$config->{'list_stack'}->[-1]}, $_[3]);
813             }
814             ],
815             [#Rule 39
816             'hash', 2,
817             sub
818             #line 295 "grammar.yp"
819             {
820             return {};
821             }
822             ],
823             [#Rule 40
824             '@4-1', 0,
825             sub
826             #line 299 "grammar.yp"
827             {
828             my ($config) = $_[0]->YYData->{'config'};
829              
830             push(@{$config->{'hash_stack'}}, {});
831             }
832             ],
833             [#Rule 41
834             'hash', 4,
835             sub
836             #line 305 "grammar.yp"
837             {
838             my ($config) = $_[0]->YYData->{'config'};
839              
840             return pop(@{$config->{'hash_stack'}});
841             }
842             ],
843             [#Rule 42
844             'hash_values', 3, undef
845             ],
846             [#Rule 43
847             'hash_values', 1, undef
848             ],
849             [#Rule 44
850             'hash_value', 1,
851             sub
852             #line 319 "grammar.yp"
853             {
854             my ($config) = $_[0]->YYData->{'config'};
855              
856             # print "\t'$_[1]' => undef\n";
857             $config->{'hash_stack'}->[-1]->{$_[1]} = undef;
858             }
859             ],
860             [#Rule 45
861             'hash_value', 3,
862             sub
863             #line 326 "grammar.yp"
864             {
865             my ($config) = $_[0]->YYData->{'config'};
866              
867             # print "\t'$_[1]' => '$_[3]'\n";
868             $config->{'hash_stack'}->[-1]->{$_[1]} = $_[3];
869             }
870             ]
871             ],
872             @_);
873             bless($self,$class);
874             }
875              
876             #line 334 "grammar.yp"
877              
878              
879             ###
880             ### Footer section
881             ###
882              
883              
884              
885             1;