svn commit: samba r5478 - in branches/SAMBA_4_0/source/build/pidl: .

jelmer at samba.org jelmer at samba.org
Mon Feb 21 00:21:34 GMT 2005


Author: jelmer
Date: 2005-02-21 00:21:33 +0000 (Mon, 21 Feb 2005)
New Revision: 5478

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=5478

Log:
Bunch of small optimizations and generalizations.

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/typelist.pm


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/header.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/header.pm	2005-02-20 21:45:51 UTC (rev 5477)
+++ branches/SAMBA_4_0/source/build/pidl/header.pm	2005-02-21 00:21:33 UTC (rev 5478)
@@ -212,19 +212,15 @@
 {
     my($d) = shift;
 
+	my $tf = NdrParser::get_typefamily($d->{DATA}{TYPE});
+
     if (needed::is_needed("ndr_size_$d->{NAME}")) {
-	    if ($d->{DATA}{TYPE} eq "STRUCT") {
-		    pidl "size_t ndr_size_$d->{NAME}(const struct $d->{NAME} *r, int flags);\n";
-	    }
-	    if ($d->{DATA}{TYPE} eq "UNION") {
-		    pidl "size_t ndr_size_$d->{NAME}(const union $d->{NAME} *r, uint32_t level, int flags);\n";
-	    }
+		my $size_args = $tf->{SIZE_FN_ARGS}->($d);
+		pidl "size_t ndr_size_$d->{NAME}($size_args);\n";
     }
 
     return unless util::has_property($d, "public");
 
-	my $tf = NdrParser::get_typefamily($d->{DATA}{TYPE});
-
 	my $pull_args = $tf->{PULL_FN_ARGS}->($d);
 	my $push_args = $tf->{PUSH_FN_ARGS}->($d);
 	my $print_args = $tf->{PRINT_FN_ARGS}->($d);
@@ -281,7 +277,6 @@
     return undef;
 }
 
-
 #####################################################################
 # parse a function
 sub HeaderFunction($)
@@ -347,7 +342,6 @@
     pidl "\n";
 }
 
-
 #####################################################################
 # generate vtable structure for DCOM interface
 sub HeaderVTable($)
@@ -365,7 +359,6 @@
 	pidl "};\n\n";
 }
 
-
 #####################################################################
 # parse the interface definitions
 sub HeaderInterface($)

Modified: branches/SAMBA_4_0/source/build/pidl/ndr.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-20 21:45:51 UTC (rev 5477)
+++ branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-21 00:21:33 UTC (rev 5478)
@@ -719,11 +719,6 @@
 		my $type_decl = typelist::mapType($e2);
 		pidl "if (($ndr_flags) & NDR_SCALARS) {";
 		indent;
-		if (typelist::getType($e2->{TYPE})->{DATA}->{TYPE} eq "ENUM") {
-			$type_decl = typelist::mapType($e2);
-		} elsif (typelist::getType($e2->{TYPE})->{DATA}->{TYPE} eq "BITMAP") {
-			$type_decl = typelist::mapType($e2);
-		}
 		pidl "$type_decl _level;";
 		pidl "NDR_CHECK(ndr_pull_$e2->{TYPE}(ndr, NDR_SCALARS, &_level));";
 		if ($switch_var =~ /r->in/) {
@@ -1303,16 +1298,10 @@
 	my $static = fn_prefix($t);
 	my $sizevar;
 
-	pidl "size_t ndr_size_$t->{NAME}(const struct $t->{NAME} *r, int flags)";
-	pidl "{";
-	indent;
 	if (my $flags = util::has_property($t, "flag")) {
 		pidl "flags |= $flags;";
 	}
 	pidl "return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_$t->{NAME});";
-	deindent;
-	pidl "}";
-	pidl "";
 }
 
 sub ArgsStructPush($)
@@ -1333,6 +1322,12 @@
 	return "struct ndr_pull *ndr, int ndr_flags, struct $e->{NAME} *r";
 }
 
+sub ArgsStructNdrSize($)
+{
+	my $d = shift;
+	return "const struct $d->{NAME} *r, int flags";
+}
+
 $typefamily{STRUCT} = {
 	PUSH_FN_BODY => \&ParseStructPush,
 	PUSH_FN_ARGS => \&ArgsStructPush,
@@ -1340,7 +1335,8 @@
 	PULL_FN_ARGS => \&ArgsStructPull,
 	PRINT_FN_BODY => \&ParseStructPrint,
 	PRINT_FN_ARGS => \&ArgsStructPrint,
-	SIZE_FN => \&ParseStructNdrSize,
+	SIZE_FN_BODY => \&ParseStructNdrSize,
+	SIZE_FN_ARGS => \&ArgsStructNdrSize,
 	ALIGN => \&find_largest_alignment
 };
 
@@ -1352,16 +1348,10 @@
 	my $static = fn_prefix($t);
 	my $sizevar;
 
-	pidl "size_t ndr_size_$t->{NAME}(const union $t->{NAME} *r, int level, int flags)";
-	pidl "{";
-	indent;
 	if (my $flags = util::has_property($t, "flag")) {
 		pidl "flags |= $flags;";
 	}
 	pidl "return ndr_size_union(r, flags, level, (ndr_push_union_fn_t)ndr_push_$t->{NAME});";
-	deindent;
-	pidl "}";
-	pidl "";;
 }
 
 #####################################################################
@@ -1560,6 +1550,12 @@
 	return "struct ndr_pull *ndr, int ndr_flags, int level, union $e->{NAME} *r";
 }
 
+sub ArgsUnionNdrSize($)
+{
+	my $d = shift;
+	return "const union $d->{NAME} *r, uint32_t level, int flags";
+}
+
 $typefamily{UNION} = {
 	PUSH_FN_BODY => \&ParseUnionPush,
 	PUSH_FN_ARGS => \&ArgsUnionPush,
@@ -1567,7 +1563,8 @@
 	PULL_FN_ARGS => \&ArgsUnionPull,
 	PRINT_FN_BODY => \&ParseUnionPrint,
 	PRINT_FN_ARGS => \&ArgsUnionPrint,
-	SIZE_FN => \&ParseUnionNdrSize,
+	SIZE_FN_ARGS => \&ArgsUnionNdrSize,
+	SIZE_FN_BODY => \&ParseUnionNdrSize,
 	ALIGN => \&find_largest_alignment
 };
 	
@@ -1639,7 +1636,16 @@
 
 	return unless needed::is_needed("ndr_size_$t->{NAME}");
 
-	$typefamily{$t->{DATA}->{TYPE}}->{SIZE_FN}->($t);
+	my $tf = $typefamily{$t->{DATA}->{TYPE}};
+	my $args = $tf->{SIZE_FN_ARGS}->($t);
+
+	pidl "size_t ndr_size_$t->{NAME}($args)";
+	pidl "{";
+	indent;
+	$typefamily{$t->{DATA}->{TYPE}}->{SIZE_FN_BODY}->($t);
+	deindent;
+	pidl "}";
+	pidl "";
 }
 
 #####################################################################

Modified: branches/SAMBA_4_0/source/build/pidl/typelist.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/typelist.pm	2005-02-20 21:45:51 UTC (rev 5477)
+++ branches/SAMBA_4_0/source/build/pidl/typelist.pm	2005-02-21 00:21:33 UTC (rev 5478)
@@ -126,6 +126,7 @@
 	return mapScalarType($e->{TYPE}) if ($dt->{DATA}->{TYPE} eq "SCALAR");
 	return "enum $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "ENUM");
 	return "struct $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "STRUCT");
+	return "struct $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "INTERFACE");
 	return "union $dt->{NAME}" if ($dt->{DATA}->{TYPE} eq "UNION");
 	return mapScalarType(bitmap_type_fn($dt->{DATA})) if ($dt->{DATA}->{TYPE} eq "BITMAP");
 
@@ -138,7 +139,14 @@
 
 	foreach my $x (@{$idl}) {
 		next if $x->{TYPE} ne "INTERFACE";
-		addType($x);
+
+		# DCOM interfaces can be types as well
+		addType({
+			NAME => $x->{NAME},
+			TYPE => "TYPEDEF",
+			DATA => $x
+			}) if (util::has_property($x, "object"));
+
 		foreach my $y (@{$x->{DATA}}) {
 			addType($y) if (
 				$y->{TYPE} eq "TYPEDEF" 



More information about the samba-cvs mailing list