r20567: Print proper errors with filename and line numbers in ParseExpr()
[samba.git] / source4 / pidl / lib / Parse / Pidl / Expr.pm
index 2f1a98f374405a2ad22f4a4cccac5864345a87af..fc0a3a92aa4d806dccd65eafeb04dd4e1d66cd44 100644 (file)
@@ -1085,7 +1085,7 @@ sub new {
        [#Rule 2
                 'exp', 1,
 sub
-#line 22 "pidl/expr.yp"
+#line 22 "expr.yp"
 { "\"$_[1]\"" }
        ],
        [#Rule 3
@@ -1094,187 +1094,187 @@ sub
        [#Rule 4
                 'exp', 3,
 sub
-#line 24 "pidl/expr.yp"
+#line 24 "expr.yp"
 { "$_[1].$_[3]" }
        ],
        [#Rule 5
                 'exp', 1,
 sub
-#line 25 "pidl/expr.yp"
-{ $_[0]->Lookup($_[1]) }
+#line 25 "expr.yp"
+{ $_[0]->_Lookup($_[1]) }
        ],
        [#Rule 6
                 'exp', 2,
 sub
-#line 26 "pidl/expr.yp"
-{ $_[0]->Dereference($_[2]); "*$_[2]" }
+#line 26 "expr.yp"
+{ $_[0]->_Dereference($_[2]); "*$_[2]" }
        ],
        [#Rule 7
                 'exp', 2,
 sub
-#line 27 "pidl/expr.yp"
+#line 27 "expr.yp"
 { "~$_[2]" }
        ],
        [#Rule 8
                 'exp', 3,
 sub
-#line 28 "pidl/expr.yp"
+#line 28 "expr.yp"
 { "$_[1] + $_[3]" }
        ],
        [#Rule 9
                 'exp', 3,
 sub
-#line 29 "pidl/expr.yp"
+#line 29 "expr.yp"
 { "$_[1] - $_[3]" }
        ],
        [#Rule 10
                 'exp', 3,
 sub
-#line 30 "pidl/expr.yp"
+#line 30 "expr.yp"
 { "$_[1] * $_[3]" }
        ],
        [#Rule 11
                 'exp', 3,
 sub
-#line 31 "pidl/expr.yp"
+#line 31 "expr.yp"
 { "$_[1] % $_[3]" }
        ],
        [#Rule 12
                 'exp', 3,
 sub
-#line 32 "pidl/expr.yp"
+#line 32 "expr.yp"
 { "$_[1] < $_[3]" }
        ],
        [#Rule 13
                 'exp', 3,
 sub
-#line 33 "pidl/expr.yp"
+#line 33 "expr.yp"
 { "$_[1] > $_[3]" }
        ],
        [#Rule 14
                 'exp', 3,
 sub
-#line 34 "pidl/expr.yp"
+#line 34 "expr.yp"
 { "$_[1] | $_[3]" }
        ],
        [#Rule 15
                 'exp', 3,
 sub
-#line 35 "pidl/expr.yp"
+#line 35 "expr.yp"
 { "$_[1] == $_[3]" }
        ],
        [#Rule 16
                 'exp', 3,
 sub
-#line 36 "pidl/expr.yp"
+#line 36 "expr.yp"
 { "$_[1] <= $_[3]" }
        ],
        [#Rule 17
                 'exp', 3,
 sub
-#line 37 "pidl/expr.yp"
+#line 37 "expr.yp"
 { "$_[1] => $_[3]" }
        ],
        [#Rule 18
                 'exp', 3,
 sub
-#line 38 "pidl/expr.yp"
+#line 38 "expr.yp"
 { "$_[1] << $_[3]" }
        ],
        [#Rule 19
                 'exp', 3,
 sub
-#line 39 "pidl/expr.yp"
+#line 39 "expr.yp"
 { "$_[1] >> $_[3]" }
        ],
        [#Rule 20
                 'exp', 3,
 sub
-#line 40 "pidl/expr.yp"
+#line 40 "expr.yp"
 { "$_[1] != $_[3]" }
        ],
        [#Rule 21
                 'exp', 3,
 sub
-#line 41 "pidl/expr.yp"
+#line 41 "expr.yp"
 { "$_[1] || $_[3]" }
        ],
        [#Rule 22
                 'exp', 3,
 sub
-#line 42 "pidl/expr.yp"
+#line 42 "expr.yp"
 { "$_[1] && $_[3]" }
        ],
        [#Rule 23
                 'exp', 3,
 sub
-#line 43 "pidl/expr.yp"
+#line 43 "expr.yp"
 { "$_[1] & $_[3]" }
        ],
        [#Rule 24
                 'exp', 3,
 sub
-#line 44 "pidl/expr.yp"
+#line 44 "expr.yp"
 { $_[1]."->".$_[3] }
        ],
        [#Rule 25
                 'exp', 5,
 sub
-#line 45 "pidl/expr.yp"
+#line 45 "expr.yp"
 { "$_[1]?$_[3]:$_[5]" }
        ],
        [#Rule 26
                 'exp', 2,
 sub
-#line 46 "pidl/expr.yp"
+#line 46 "expr.yp"
 { "~$_[1]" }
        ],
        [#Rule 27
                 'exp', 2,
 sub
-#line 47 "pidl/expr.yp"
+#line 47 "expr.yp"
 { "not $_[1]" }
        ],
        [#Rule 28
                 'exp', 3,
 sub
-#line 48 "pidl/expr.yp"
+#line 48 "expr.yp"
 { "$_[1] / $_[3]" }
        ],
        [#Rule 29
                 'exp', 2,
 sub
-#line 49 "pidl/expr.yp"
+#line 49 "expr.yp"
 { "-$_[2]" }
        ],
        [#Rule 30
                 'exp', 2,
 sub
-#line 50 "pidl/expr.yp"
+#line 50 "expr.yp"
 { "&$_[2]" }
        ],
        [#Rule 31
                 'exp', 3,
 sub
-#line 51 "pidl/expr.yp"
+#line 51 "expr.yp"
 { "$_[1]^$_[3]" }
        ],
        [#Rule 32
                 'exp', 3,
 sub
-#line 52 "pidl/expr.yp"
+#line 52 "expr.yp"
 { "($_[2])" }
        ],
        [#Rule 33
                 'func', 4,
 sub
-#line 55 "pidl/expr.yp"
+#line 55 "expr.yp"
 { "$_[1]($_[3])" }
        ],
        [#Rule 34
                 'opt_args', 0,
 sub
-#line 56 "pidl/expr.yp"
+#line 56 "expr.yp"
 { "" }
        ],
        [#Rule 35
@@ -1286,7 +1286,7 @@ sub
        [#Rule 37
                 'args', 3,
 sub
-#line 57 "pidl/expr.yp"
+#line 57 "expr.yp"
 { "$_[1], $_[3]" }
        ]
 ],
@@ -1294,7 +1294,7 @@ sub
     bless($self,$class);
 }
 
-#line 59 "pidl/expr.yp"
+#line 59 "expr.yp"
 
 
 package Parse::Pidl::Expr;
@@ -1332,13 +1332,13 @@ sub _Lexer {
     }
 }
 
-sub Lookup($$) 
+sub _Lookup($$) 
 {
        my ($self, $x) = @_;
        return $self->YYData->{LOOKUP}->($x);
 }
 
-sub Dereference($$)
+sub _Dereference($$)
 {
        my ($self, $x) = @_;
        if (defined($self->YYData->{DEREFERENCE})) {
@@ -1346,12 +1346,20 @@ sub Dereference($$)
        }
 }
 
+sub _Error($)
+{
+       my ($self) = @_;
+       $self->YYData->{ERROR}->("Parse error in `".$self->YYData->{FULL_INPUT}."' near `". $self->YYData->{LAST_TOKEN} . "'");
+}
+
 sub Run {
     my($self, $data, $error, $lookup, $deref) = @_;
+    $self->YYData->{FULL_INPUT} = $data;
     $self->YYData->{INPUT} = $data;
     $self->YYData->{LOOKUP} = $lookup;
     $self->YYData->{DEREFERENCE} = $deref;
-    return $self->YYParse( yylex => \&_Lexer, yyerror => $error );
+    $self->YYData->{ERROR} = $error;
+    return $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error);
 }
 
 1;