mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
r20543: Merge some pidl bug fixes:
* C expressions that just started with a constant were erroneously flagged
as being a constant.
* 1-length variable names in expressions were broken.
(This used to be commit 44775a6ac4
)
This commit is contained in:
parent
34040b420a
commit
362d4b14ae
@ -26,12 +26,9 @@ sub MyDumper($)
|
||||
# see if a pidl property list contains a given property
|
||||
sub has_property($$)
|
||||
{
|
||||
my($e) = shift;
|
||||
my($p) = shift;
|
||||
my($e, $p) = @_;
|
||||
|
||||
if (!defined $e->{PROPERTIES}) {
|
||||
return undef;
|
||||
}
|
||||
return undef if (not defined($e->{PROPERTIES}));
|
||||
|
||||
return $e->{PROPERTIES}->{$p};
|
||||
}
|
||||
@ -40,9 +37,7 @@ sub has_property($$)
|
||||
# see if a pidl property matches a value
|
||||
sub property_matches($$$)
|
||||
{
|
||||
my($e) = shift;
|
||||
my($p) = shift;
|
||||
my($v) = shift;
|
||||
my($e,$p,$v) = @_;
|
||||
|
||||
if (!defined has_property($e, $p)) {
|
||||
return undef;
|
||||
@ -59,7 +54,7 @@ sub property_matches($$$)
|
||||
sub is_constant($)
|
||||
{
|
||||
my $s = shift;
|
||||
if (defined $s && $s =~ /^\d/) {
|
||||
if (defined $s && $s =~ /^\d$/) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@ -72,7 +67,7 @@ sub make_str($)
|
||||
if (substr($str, 0, 1) eq "\"") {
|
||||
return $str;
|
||||
}
|
||||
return "\"" . $str . "\"";
|
||||
return "\"$str\"";
|
||||
}
|
||||
|
||||
sub print_uuid($)
|
||||
@ -80,6 +75,7 @@ sub print_uuid($)
|
||||
my ($uuid) = @_;
|
||||
$uuid =~ s/"//g;
|
||||
my ($time_low,$time_mid,$time_hi,$clock_seq,$node) = split /-/, $uuid;
|
||||
return undef if not defined($node);
|
||||
|
||||
my @clock_seq = $clock_seq =~ /(..)/g;
|
||||
my @node = $node =~ /(..)/g;
|
||||
@ -106,7 +102,7 @@ sub ParseExpr($$)
|
||||
|
||||
die("Undefined value in ParseExpr") if not defined($expr);
|
||||
|
||||
my @tokens = split /((?:[A-Za-z_])(?:(?:(?:[A-Za-z0-9_.])|(?:->))+))/, $expr;
|
||||
my @tokens = split /((?:[A-Za-z_])(?:(?:(?:[A-Za-z0-9_.])|(?:->))+)?)/, $expr;
|
||||
my $ret = "";
|
||||
|
||||
foreach my $t (@tokens) {
|
||||
|
55
source4/pidl/tests/util.pl
Executable file
55
source4/pidl/tests/util.pl
Executable file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/perl
|
||||
# (C) 2007 Jelmer Vernooij <jelmer@samba.org>
|
||||
# Published under the GNU General Public License
|
||||
use strict;
|
||||
|
||||
use Test::More tests => 25;
|
||||
use FindBin qw($RealBin);
|
||||
use lib "$RealBin/../lib";
|
||||
use Parse::Pidl::Util;
|
||||
|
||||
# has_property()
|
||||
is(undef, has_property({}, "foo"));
|
||||
is(undef, has_property({PROPERTIES => {}}, "foo"));
|
||||
is("data", has_property({PROPERTIES => {foo => "data"}}, "foo"));
|
||||
is(undef, has_property({PROPERTIES => {foo => undef}}, "foo"));
|
||||
|
||||
# is_constant()
|
||||
ok(is_constant("2"));
|
||||
ok(not is_constant("str"));
|
||||
ok(not is_constant("2 * expr"));
|
||||
|
||||
# make_str()
|
||||
is("\"bla\"", make_str("bla"));
|
||||
is("\"bla\"", make_str("\"bla\""));
|
||||
is("\"\"bla\"\"", make_str("\"\"bla\"\""));
|
||||
is("\"bla\"\"", make_str("bla\""));
|
||||
is("\"foo\"bar\"", make_str("foo\"bar"));
|
||||
|
||||
# print_uuid()
|
||||
is(undef, print_uuid("invalid"));
|
||||
is("{0x12345778,0x1234,0xabcd,{0xef,0x00},{0x01,0x23,0x45,0x67,0x89,0xac}}",
|
||||
print_uuid("12345778-1234-abcd-ef00-0123456789ac"));
|
||||
is("{0x12345778,0x1234,0xabcd,{0xef,0x00},{0x01,0x23,0x45,0x67,0x89,0xac}}",
|
||||
print_uuid("\"12345778-1234-abcd-ef00-0123456789ac\""));
|
||||
|
||||
# property_matches()
|
||||
# missing property
|
||||
ok(not property_matches({PROPERTIES => {}}, "x", "data"));
|
||||
# data not matching
|
||||
ok(not property_matches({PROPERTIES => {x => "bar"}}, "x", "data"));
|
||||
# data matching exactly
|
||||
ok(property_matches({PROPERTIES => {x => "data"}}, "x", "data"));
|
||||
# regex matching
|
||||
ok(property_matches({PROPERTIES => {x => "data"}}, "x", "^([dat]+)\$"));
|
||||
|
||||
# ParseExpr()
|
||||
is("", ParseExpr("", {}));
|
||||
is("a", ParseExpr("a", {"b" => "2"}));
|
||||
is("2", ParseExpr("a", {"a" => "2"}));
|
||||
is("2*2", ParseExpr("a*a", {"a" => "2"}));
|
||||
is("r->length+r->length",
|
||||
ParseExpr("length+length", {"length" => "r->length"}));
|
||||
is("2/2*(r->length)",
|
||||
ParseExpr("constant/constant*(len)", {"constant" => "2",
|
||||
"len" => "r->length"}));
|
Loading…
Reference in New Issue
Block a user