git.samba.org
/
samba.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r20567: Print proper errors with filename and line numbers in ParseExpr()
[samba.git]
/
source4
/
pidl
/
expr.yp
diff --git
a/source4/pidl/expr.yp
b/source4/pidl/expr.yp
index 5b248ea5d6bf19cd261084cf01bb7a3816895679..58704ff89e0eda41020789c9be3e0d25a0be8fb6 100644
(file)
--- a/
source4/pidl/expr.yp
+++ b/
source4/pidl/expr.yp
@@
-22,8
+22,8
@@
exp: NUM
| TEXT { "\"$_[1]\"" }
| func
| exp '.' VAR { "$_[1].$_[3]" }
| 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]" }
| '~' 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);
}
{
my ($self, $x) = @_;
return $self->YYData->{LOOKUP}->($x);
}
-sub Dereference($$)
+sub
_
Dereference($$)
{
my ($self, $x) = @_;
if (defined($self->YYData->{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) = @_;
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;
$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);
}
}