1
0
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:
Jelmer Vernooij 2007-01-05 12:56:15 +00:00 committed by Gerald (Jerry) Carter
parent 34040b420a
commit 362d4b14ae
2 changed files with 62 additions and 11 deletions

View File

@ -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
View 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"}));