summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/build/pidl/idl.pm2
-rw-r--r--source4/build/pidl/idl.yp2
-rw-r--r--source4/build/pidl/typelist.pm27
-rw-r--r--testprogs/win32/rpcecho/rpcecho.idl34
4 files changed, 39 insertions, 26 deletions
diff --git a/source4/build/pidl/idl.pm b/source4/build/pidl/idl.pm
index 156a3435e6..8b6cf3956e 100644
--- a/source4/build/pidl/idl.pm
+++ b/source4/build/pidl/idl.pm
@@ -2470,7 +2470,7 @@ sub parse_idl($$)
if (! defined $cpp) {
$cpp = "cpp"
}
- my $data = `$cpp -xc $filename`;
+ my $data = `$cpp -D__PIDL__ -xc $filename`;
$/ = $saved_delim;
$self->YYData->{INPUT} = $data;
diff --git a/source4/build/pidl/idl.yp b/source4/build/pidl/idl.yp
index e283237627..b556b064b4 100644
--- a/source4/build/pidl/idl.yp
+++ b/source4/build/pidl/idl.yp
@@ -384,7 +384,7 @@ sub parse_idl($$)
if (! defined $cpp) {
$cpp = "cpp"
}
- my $data = `$cpp -xc $filename`;
+ my $data = `$cpp -D__PIDL__ -xc $filename`;
$/ = $saved_delim;
$self->YYData->{INPUT} = $data;
diff --git a/source4/build/pidl/typelist.pm b/source4/build/pidl/typelist.pm
index a8600cedbe..cc8504e80f 100644
--- a/source4/build/pidl/typelist.pm
+++ b/source4/build/pidl/typelist.pm
@@ -153,7 +153,7 @@ sub mapScalarType($)
# it's a bug when a type is not in the list
# of known scalars or has no mapping
- return $scalars->{$name}{C_TYPE} if defined($scalars->{$name}) and defined($scalars->{$name}{C_TYPE});
+ return $typedefs{$name}->{DATA}->{C_TYPE} if defined($typedefs{$name}) and defined($typedefs{$name}->{DATA}->{C_TYPE});
die("Unknown scalar type $name");
}
@@ -225,11 +225,27 @@ sub RegisterScalars()
$typedefs{$k} = {
NAME => $k,
TYPE => "TYPEDEF",
- DATA => {
- TYPE => "SCALAR",
- NAME => $k
- }
+ DATA => $scalars->{$k}
};
+ $typedefs{$k}->{DATA}->{TYPE} = "SCALAR";
+ $typedefs{$k}->{DATA}->{NAME} = $k;
+ }
+}
+
+my $aliases = {
+ "DWORD" => "uint32",
+ "int" => "int32",
+ "WORD" => "uint16",
+ "char" => "uint8",
+ "long" => "int32",
+ "short" => "int16",
+ "hyper" => "HYPER_T"
+};
+
+sub RegisterAliases()
+{
+ foreach my $k (keys %{$aliases}) {
+ $typedefs{$k} = $typedefs{$aliases->{$k}};
}
}
@@ -304,5 +320,6 @@ sub LoadIdl($)
}
RegisterScalars();
+RegisterAliases();
1;
diff --git a/testprogs/win32/rpcecho/rpcecho.idl b/testprogs/win32/rpcecho/rpcecho.idl
index 38fa58af41..3802d3c678 100644
--- a/testprogs/win32/rpcecho/rpcecho.idl
+++ b/testprogs/win32/rpcecho/rpcecho.idl
@@ -18,6 +18,10 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
+#ifndef __PIDL__
+#define unistr [string] wchar_t *
+#endif
+
[
uuid(60a15ec5-4de8-11d7-a637-005056a20182),
version(1.0)
@@ -45,13 +49,6 @@ interface rpcecho
[in] int len,
[out] [size_is(len)] char out_data[]
);
-
-#define unistr [string] wchar_t *
-#define uint8 char
-#define uint16 short
-#define uint32 long
-#define HYPER_T hyper
-
const long myconstant = 42;
/* test strings */
@@ -60,36 +57,35 @@ interface rpcecho
[out] unistr *s2
);
-
/* test some alignment issues */
typedef struct {
- uint8 v;
+ char v;
} echo_info1;
typedef struct {
- uint16 v;
+ short v;
} echo_info2;
typedef struct {
- uint32 v;
+ long v;
} echo_info3;
typedef struct {
- HYPER_T v;
+ hyper v;
} echo_info4;
typedef struct {
- uint8 v1;
- HYPER_T v2;
+ char v1;
+ hyper v2;
} echo_info5;
typedef struct {
- uint8 v1;
+ char v1;
echo_info1 info1;
} echo_info6;
typedef struct {
- uint8 v1;
+ char v1;
echo_info4 info4;
} echo_info7;
@@ -139,13 +135,13 @@ interface rpcecho
);
typedef struct {
- uint32 x;
- [size_is(x)] uint16 surrounding[*];
+ long x;
+ [size_is(x)] short surrounding[*];
} echo_Surrounding;
void echo_TestSurrounding(
[in,out,ref] echo_Surrounding *data
);
- uint16 echo_TestDoublePointer([in] uint16 ***data);
+ short echo_TestDoublePointer([in] short ***data);
}