1 ###################################################
2 # utility functions to support pidl
3 # Copyright tridge@samba.org 2000
4 # released under the GNU GPL
5 package Parse
::Pidl
::Util
;
9 @EXPORT = qw(has_property property_matches ParseExpr ParseExprExt is_constant make_str unmake_str print_uuid MyDumper genpad);
10 use vars
qw($VERSION);
15 use Parse::Pidl::Expr;
16 use Parse::Pidl qw(error);
20 Parse::Pidl::Util - Generic utility functions for pidl
24 use Parse::Pidl::Util;
28 Simple module that contains a couple of trivial helper functions
29 used throughout the various pidl modules.
38 a dumper wrapper to prevent dependence on the Data::Dumper module
39 unless we actually need it
46 $Data::Dumper
::Sortkeys
= 1;
48 return Data
::Dumper
::Dumper
($s);
52 see if a pidl property list contains a given property
59 return undef if (not defined($e->{PROPERTIES
}));
61 return $e->{PROPERTIES
}->{$p};
64 =item B<property_matches>
65 see if a pidl property matches a value
68 sub property_matches
($$$)
72 if (!defined has_property
($e, $p)) {
76 if ($e->{PROPERTIES
}->{$p} =~ /$v/) {
84 return 1 if the string is a C constant
90 return 1 if ($s =~ /^\d+$/);
91 return 1 if ($s =~ /^0x[0-9A-Fa-f]+$/);
96 return a "" quoted string, unless already quoted
102 if (substr($str, 0, 1) eq "\"") {
109 unquote a "" quoted string
116 $str =~ s/^\"(.*)\"$/$1/;
122 Print C representation of a UUID.
129 my ($time_low,$time_mid,$time_hi,$clock_seq,$node) = split /-/, $uuid;
130 return undef if not defined($node);
132 my @clock_seq = $clock_seq =~ /(..)/g;
133 my @node = $node =~ /(..)/g;
135 return "{0x$time_low,0x$time_mid,0x$time_hi," .
136 "{".join(',', map {"0x$_"} @clock_seq)."}," .
137 "{".join(',', map {"0x$_"} @node)."}}";
141 Interpret an IDL expression, substituting particular variables.
146 my($expr, $varlist, $e) = @_;
148 my $x = new Parse
::Pidl
::Expr
();
150 return $x->Run($expr, sub { my $x = shift; error
($e, $x); },
153 return($varlist->{$x}) if (defined($varlist->{$x}));
159 =item B<ParseExprExt>
160 Interpret an IDL expression, substituting particular variables. Can call
161 callbacks when pointers are being dereferenced or variables are being used.
164 sub ParseExprExt
($$$$$)
166 my($expr, $varlist, $e, $deref, $use) = @_;
168 my $x = new Parse
::Pidl
::Expr
();
170 return $x->Run($expr, sub { my $x = shift; error
($e, $x); },
173 return($varlist->{$x}) if (defined($varlist->{$x}));
180 return an empty string consisting of tabs and spaces suitable for proper indent
187 my $nt = int((length($s)+1)/8);
189 my $ns = (length($s)-$lt);
190 return "\t"x
($nt)." "x
($ns);