svn commit: samba r5466 - in branches/SAMBA_4_0/source/build/pidl: .
jelmer at samba.org
jelmer at samba.org
Sun Feb 20 12:17:33 GMT 2005
Author: jelmer
Date: 2005-02-20 12:17:33 +0000 (Sun, 20 Feb 2005)
New Revision: 5466
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=5466
Log:
Put the type information list in a seperate module
(require for some of the COM stuff)
Added:
branches/SAMBA_4_0/source/build/pidl/typelist.pm
Modified:
branches/SAMBA_4_0/source/build/pidl/header.pm
branches/SAMBA_4_0/source/build/pidl/ndr.pm
branches/SAMBA_4_0/source/build/pidl/util.pm
Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/header.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/header.pm 2005-02-20 02:57:38 UTC (rev 5465)
+++ branches/SAMBA_4_0/source/build/pidl/header.pm 2005-02-20 12:17:33 UTC (rev 5466)
@@ -7,6 +7,7 @@
use strict;
use needed;
+use typelist;
my($res);
my($tab_depth);
@@ -195,7 +196,7 @@
}
my $dt;
- if (my $t = NdrParser::get_typedef($e->{TYPE})) {
+ if (my $t = typelist::getType($e->{TYPE})) {
$dt = $t->{DATA};
}
Modified: branches/SAMBA_4_0/source/build/pidl/ndr.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ndr.pm 2005-02-20 02:57:38 UTC (rev 5465)
+++ branches/SAMBA_4_0/source/build/pidl/ndr.pm 2005-02-20 12:17:33 UTC (rev 5466)
@@ -9,27 +9,19 @@
use strict;
use needed;
+use typelist;
# list of known types
-my %typedefs;
my %typefamily;
-sub get_typedef($)
-{
- my $n = shift;
- return $typedefs{$n};
-}
-
sub get_typefamily($)
{
my $n = shift;
return $typefamily{$n};
}
-sub RegisterPrimitives()
-{
- my %type_alignments =
- (
+my %scalar_alignments =
+(
"char" => 1,
"int8" => 1,
"uint8" => 1,
@@ -55,25 +47,22 @@
"ipv4address" => 4,
"hyper" => 8,
"NTTIME_hyper" => 8
- );
+);
- foreach my $k (keys %type_alignments) {
- $typedefs{$k} = {
- NAME => $k,
- TYPE => "TYPEDEF",
- DATA => {
- TYPE => "SCALAR",
- ALIGN => $type_alignments{$k}
- }
- };
+$typefamily{SCALAR} = {
+ ALIGN => sub {
+ my $t = shift;
+ return $scalar_alignments{$t->{NAME}};
}
-}
+};
sub is_scalar_type($)
{
my $type = shift;
- if (my $dt = $typedefs{$type}->{DATA}->{TYPE}) {
+ return 0 unless typelist::hasType($type);
+
+ if (my $dt = typelist::getType($type)->{DATA}->{TYPE}) {
return 1 if ($dt eq "SCALAR" or $dt eq "ENUM" or $dt eq "BITMAP");
}
@@ -430,16 +419,16 @@
{
my $e = shift;
- unless (defined($typedefs{$e}) && defined($typedefs{$e}->{DATA}->{TYPE})) {
+ unless (typelist::hasType($e)) {
# it must be an external type - all we can do is guess
# print "Warning: assuming alignment of unknown type '$e' is 4\n";
return 4;
}
- my $dt = $typedefs{$e}->{DATA};
+ my $dt = typelist::getType($e)->{DATA};
- return $dt->{ALIGN} if ($dt->{ALIGN});
- return $typefamily{$dt->{TYPE}}->{ALIGN}->($dt);
+ my $tmp = $typefamily{$dt->{TYPE}}->{ALIGN}->($dt);
+ return $tmp;
}
#####################################################################
@@ -657,7 +646,6 @@
pidl "NDR_CHECK(ndr_push_unique_ptr(ndr, $var_prefix$e->{NAME}));";
}
-
#####################################################################
# print scalars in a structure element
sub ParseElementPrint($$)
@@ -721,7 +709,7 @@
my $cprefix = c_pull_prefix($e);
- my $utype = $typedefs{$e->{TYPE}};
+ my $utype = typelist::getType($e->{TYPE});
check_null_pointer($switch_var);
@@ -731,9 +719,9 @@
my $type_decl = util::map_type($e2->{TYPE});
pidl "if (($ndr_flags) & NDR_SCALARS) {";
indent;
- if ($typedefs{$e2->{TYPE}}->{DATA}->{TYPE} eq "ENUM") {
+ if (typelist::getType($e2->{TYPE})->{DATA}->{TYPE} eq "ENUM") {
$type_decl = util::enum_type_decl($e2);
- } elsif ($typedefs{$e2->{TYPE}}->{DATA}->{TYPE} eq "BITMAP") {
+ } elsif (typelist::getType($e2->{TYPE})->{DATA}->{TYPE} eq "BITMAP") {
$type_decl = util::bitmap_type_decl($e2);
}
pidl "$type_decl _level;";
@@ -783,7 +771,7 @@
check_null_pointer($switch_var);
- my $utype = $typedefs{$e->{TYPE}};
+ my $utype = typelist::getType($e->{TYPE});
if (!defined $utype ||
!util::has_property($utype, "nodiscriminant")) {
my $e2 = find_sibling($e, $switch);
@@ -2104,7 +2092,7 @@
foreach my $d (@{$x->{DATA}}) {
if (($d->{TYPE} eq "DECLARE") or ($d->{TYPE} eq "TYPEDEF")) {
- $typedefs{$d->{NAME}} = $d;
+ typelist::addType($d);
if ($d->{DATA}->{TYPE} eq "STRUCT" or $d->{DATA}->{TYPE} eq "UNION") {
CheckPointerTypes($d->{DATA}, $x->{PROPERTIES}->{pointer_default});
}
@@ -2190,7 +2178,4 @@
return $res;
}
-RegisterPrimitives();
-
1;
-
Added: branches/SAMBA_4_0/source/build/pidl/typelist.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/typelist.pm 2005-02-20 02:57:38 UTC (rev 5465)
+++ branches/SAMBA_4_0/source/build/pidl/typelist.pm 2005-02-20 12:17:33 UTC (rev 5466)
@@ -0,0 +1,56 @@
+###################################################
+# Samba4 parser generator for IDL structures
+# Copyright jelmer at samba.org 2005
+# released under the GNU GPL
+
+package typelist;
+
+use strict;
+
+my %typedefs;
+
+sub addType($)
+{
+ my $t = shift;
+ $typedefs{$t->{NAME}} = $t;
+}
+
+sub getType($)
+{
+ my $t = shift;
+ return undef unless(defined($typedefs{$t}));
+ return $typedefs{$t};
+}
+
+sub hasType($)
+{
+ my $t = shift;
+ return 1 if defined($typedefs{$t});
+ return 0;
+}
+
+sub RegisterPrimitives()
+{
+ my @primitives = (
+ "char", "int8", "uint8", "short", "wchar_t",
+ "int16", "uint16", "long", "int32", "uint32",
+ "dlong", "udlong", "udlongr", "NTTIME", "NTTIME_1sec",
+ "time_t", "DATA_BLOB", "error_status_t", "WERROR",
+ "NTSTATUS", "boolean32", "unsigned32", "ipv4address",
+ "hyper", "NTTIME_hyper");
+
+ foreach my $k (@primitives) {
+ $typedefs{$k} = {
+ NAME => $k,
+ TYPE => "TYPEDEF",
+ DATA => {
+ TYPE => "SCALAR",
+ NAME => $k
+ }
+ };
+ }
+}
+
+RegisterPrimitives();
+
+1;
Modified: branches/SAMBA_4_0/source/build/pidl/util.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/util.pm 2005-02-20 02:57:38 UTC (rev 5465)
+++ branches/SAMBA_4_0/source/build/pidl/util.pm 2005-02-20 12:17:33 UTC (rev 5466)
@@ -322,4 +322,3 @@
}
1;
-
More information about the samba-cvs
mailing list