X-Git-Url: http://git.samba.org/?a=blobdiff_plain;ds=sidebyside;f=source4%2Fpidl%2Fexpr.yp;fp=source4%2Fpidl%2Fexpr.yp;h=58704ff89e0eda41020789c9be3e0d25a0be8fb6;hb=a7bc3801f94891880a90b2974dfbadc9e9f8c2ee;hp=5b248ea5d6bf19cd261084cf01bb7a3816895679;hpb=38ba8bf8ba75c19ab8d34eb4862b05befc8e1497;p=samba.git diff --git a/source4/pidl/expr.yp b/source4/pidl/expr.yp index 5b248ea5d6b..58704ff89e0 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); }