Rev 11542: Prepare for generating separate primitives/deferred code. in file:///home/jelmer/bzr.samba/SAMBA_4_0/

Jelmer Vernooij jelmer at samba.org
Mon Feb 19 23:08:34 GMT 2007


At file:///home/jelmer/bzr.samba/SAMBA_4_0/

------------------------------------------------------------
revno: 11542
revision-id: jelmer at samba.org-20070219230825-to4yp0eswh2gd283
parent: svn-v2:21457 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0
committer: Jelmer Vernooij <jelmer at samba.org>
branch nick: SAMBA_4_0
timestamp: Tue 2007-02-20 00:08:25 +0100
message:
  Prepare for generating separate primitives/deferred code.
modified:
  source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm svn-v2:12463 at 0c0555d6-39d7-0310-84fc-f1cc0bd64818-branches%2fSAMBA_4_0-source%2fpidl%2flib%2fParse%2fPidl%2fSamba4%2fNDR%2fParser.pm
=== modified file 'source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm'
--- a/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm	2007-02-19 21:37:54 +0000
+++ b/source/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm	2007-02-19 23:08:25 +0000
@@ -643,9 +643,9 @@
 				return;
 			} 
 		} elsif ($l->{TYPE} eq "SWITCH") {
-			ParseSwitchPush($e, $l, $ndr, $var_name, $ndr_flags, $env);
+			ParseSwitchPush($e, $l, $ndr, $var_name, $env);
 		} elsif ($l->{TYPE} eq "DATA") {
-			ParseDataPush($e, $l, $ndr, $var_name, $ndr_flags);
+			ParseDataPush($e, $l, $ndr, $var_name, $primitives, $deferred);
 		}
 	}
 
@@ -868,9 +868,9 @@
 
 #####################################################################
 # parse scalars in a structure element - pull size
-sub ParseSwitchPull($$$$$$)
+sub ParseSwitchPull($$$$$)
 {
-	my($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
+	my($e,$l,$ndr,$var_name,$env) = @_;
 	my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL}, 
 		check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
 
@@ -880,9 +880,9 @@
 
 #####################################################################
 # push switch element
-sub ParseSwitchPush($$$$$$)
+sub ParseSwitchPush($$$$$)
 {
-	my($e,$l,$ndr,$var_name,$ndr_flags,$env) = @_;
+	my($e,$l,$ndr,$var_name,$env) = @_;
 	my $switch_var = ParseExprExt($l->{SWITCH_IS}, $env, $e->{ORIGINAL}, 
 		check_null_pointer($e, $env, \&pidl, "return NT_STATUS_INVALID_PARAMETER_MIX;"), check_fully_dereferenced($e, $env));
 
@@ -890,12 +890,14 @@
 	pidl "NDR_CHECK(ndr_push_set_switch_value($ndr, $var_name, $switch_var));";
 }
 
-sub ParseDataPull($$$$$)
+sub ParseDataPull($$$$$$)
 {
-	my ($e,$l,$ndr,$var_name,$ndr_flags) = @_;
+	my ($e,$l,$ndr,$var_name,$primitives,$deferred) = @_;
 
 	if (not ref($l->{DATA_TYPE}) or 
 		defined($l->{DATA_TYPE}->{NAME})) {
+
+		my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
 		my $t;
 		if (ref($l->{DATA_TYPE}) eq "HASH") {
 			$t = "$l->{DATA_TYPE}->{TYPE}_$l->{DATA_TYPE}->{NAME}";
@@ -919,13 +921,13 @@
 			pidl "}";
 		}
 	} else {
-		ParseTypePull($l->{DATA_TYPE}, $var_name);
+		ParseTypePull($l->{DATA_TYPE}, $var_name, $primitives, $deferred);
 	}
 }
 
-sub ParseDataPush($$$$$)
+sub ParseDataPush($$$$$$)
 {
-	my ($e,$l,$ndr,$var_name,$ndr_flags) = @_;
+	my ($e,$l,$ndr,$var_name,$primitives,$deferred) = @_;
 
 	if (not ref($l->{DATA_TYPE}) or defined($l->{DATA_TYPE}->{NAME})) {
 		my $t;
@@ -941,9 +943,10 @@
 			$var_name = get_pointer_to($var_name);
 		}
 
+		my $ndr_flags = CalcNdrFlags($l, $primitives, $deferred);
 		pidl "NDR_CHECK(ndr_push_$t($ndr, $ndr_flags, $var_name));";
 	} else {
-		ParseTypePush($l->{DATA_TYPE}, $var_name);
+		ParseTypePush($l->{DATA_TYPE}, $var_name, $primitives, $deferred);
 	}
 }
 
@@ -1069,9 +1072,9 @@
 		} elsif ($l->{TYPE} eq "POINTER") {
 			ParsePtrPull($e, $l, $ndr, $var_name);
 		} elsif ($l->{TYPE} eq "SWITCH") {
-			ParseSwitchPull($e, $l, $ndr, $var_name, $ndr_flags, $env);
+			ParseSwitchPull($e, $l, $ndr, $var_name, $env);
 		} elsif ($l->{TYPE} eq "DATA") {
-			ParseDataPull($e, $l, $ndr, $var_name, $ndr_flags);
+			ParseDataPull($e, $l, $ndr, $var_name, $primitives, $deferred);
 		}
 	}
 
@@ -2419,9 +2422,9 @@
 
 }
 
-sub ParseTypePush($$)
+sub ParseTypePush($$$$)
 {
-	my ($e, $varname) = @_;
+	my ($e, $varname, $primitives, $deferred) = @_;
 
 	# save the old relative_base_offset
 	pidl "uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr);" if defined(has_property($e, "relative_base"));
@@ -2439,16 +2442,16 @@
 
 	pidl "{";
 	indent;
-	ParseTypePush($e, $varname);
+	ParseTypePush($e, $varname, 1, 1);
 	pidl "return NT_STATUS_OK;";
 	deindent;
 	pidl "}";
 	pidl "";;
 }
 
-sub ParseTypePull($$)
+sub ParseTypePull($$$$)
 {
-	my ($e, $varname) = @_;
+	my ($e, $varname, $primitives, $deferred) = @_;
 
 	# save the old relative_base_offset
 	pidl "uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr);" if defined(has_property($e, "relative_base"));
@@ -2468,7 +2471,7 @@
 
 	pidl "{";
 	indent;
-	ParseTypePull($e, $varname);
+	ParseTypePull($e, $varname, 1, 1);
 	pidl "return NT_STATUS_OK;";
 	deindent;
 	pidl "}";



More information about the samba-cvs mailing list