summaryrefslogtreecommitdiff
path: root/source4/pidl/expr.yp
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2007-01-05 20:52:12 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:37:01 -0500
commita7bc3801f94891880a90b2974dfbadc9e9f8c2ee (patch)
tree2cc690d4b35022398e8062847f70982fd34585e0 /source4/pidl/expr.yp
parent38ba8bf8ba75c19ab8d34eb4862b05befc8e1497 (diff)
downloadsamba-a7bc3801f94891880a90b2974dfbadc9e9f8c2ee.tar.gz
samba-a7bc3801f94891880a90b2974dfbadc9e9f8c2ee.tar.bz2
samba-a7bc3801f94891880a90b2974dfbadc9e9f8c2ee.zip
r20567: Print proper errors with filename and line numbers in ParseExpr()
(This used to be commit f5dc1b47ecf18068a47f8f68016463ef4a55dc03)
Diffstat (limited to 'source4/pidl/expr.yp')
-rw-r--r--source4/pidl/expr.yp18
1 files changed, 13 insertions, 5 deletions
diff --git a/source4/pidl/expr.yp b/source4/pidl/expr.yp
index 5b248ea5d6..58704ff89e 100644
--- a/source4/pidl/expr.yp
+++ b/source4/pidl/expr.yp
@@ -22,8 +22,8 @@ exp: NUM
| TEXT { "\"$_[1]\"" }
| func
| exp '.' VAR { "$_[1].$_[3]" }
- | VAR { $_[0]->Lookup($_[1]) }
- | '*' exp %prec DEREF { $_[0]->Dereference($_[2]); "*$_[2]" }
+ | VAR { $_[0]->_Lookup($_[1]) }
+ | '*' exp %prec DEREF { $_[0]->_Dereference($_[2]); "*$_[2]" }
| '~' exp %prec INV { "~$_[2]" }
| exp '+' exp { "$_[1] + $_[3]" }
| exp '-' exp { "$_[1] - $_[3]" }
@@ -93,13 +93,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})) {
@@ -107,10 +107,18 @@ 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);
}