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