[3/7] widl: Get simple enums working
Dan Hipschman
dsh at linux.ucla.edu
Mon Jun 25 20:24:11 CDT 2007
This patch gets simple enums working. It includes tests that pass on
wine and XP.
---
dlls/rpcrt4/tests/server.c | 19 +++++++++++++++++++
dlls/rpcrt4/tests/server.idl | 9 +++++++++
tools/widl/typegen.c | 4 ++++
3 files changed, 32 insertions(+), 0 deletions(-)
diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index a0291e0..5437e71 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -272,6 +272,20 @@ s_sum_pcarr(int *a[], int n)
return s;
}
+int
+s_enum_ord(e_t e)
+{
+ switch (e)
+ {
+ case E1: return 1;
+ case E2: return 2;
+ case E3: return 3;
+ case E4: return 4;
+ default:
+ return 0;
+ }
+}
+
void
s_stop(void)
{
@@ -385,6 +399,11 @@ basic_tests(void)
ok(dot_copy_vectors(vec1, vec2) == -21, "RPC dot_copy_vectors\n");
ok(sum_fixed_array(f) == -2, "RPC sum_fixed_array\n");
ok(sum_sp(&sp) == 29, "RPC sum_sp\n");
+
+ ok(enum_ord(E1) == 1, "RPC enum_ord\n");
+ ok(enum_ord(E2) == 2, "RPC enum_ord\n");
+ ok(enum_ord(E3) == 3, "RPC enum_ord\n");
+ ok(enum_ord(E4) == 4, "RPC enum_ord\n");
}
static void
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index d409c53..935c4bb 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -157,8 +157,17 @@ interface IServer
case ENCU_F: float f;
} encu_t;
+ typedef enum
+ {
+ E1 = 23,
+ E2 = 4,
+ E3 = 0,
+ E4 = 64
+ } e_t;
+
double square_encu(encu_t *eu);
int sum_parr(int *a[3]);
int sum_pcarr([size_is(n)] int *a[], int n);
+ int enum_ord(e_t e);
void stop(void);
}
diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c
index 8dedd8d..5fec7c7 100644
--- a/tools/widl/typegen.c
+++ b/tools/widl/typegen.c
@@ -2122,12 +2122,14 @@ static unsigned int get_required_buffer_size_type(
case RPC_FC_WCHAR:
case RPC_FC_USHORT:
case RPC_FC_SHORT:
+ case RPC_FC_ENUM16:
*alignment = 4;
size = 2;
break;
case RPC_FC_ULONG:
case RPC_FC_LONG:
+ case RPC_FC_ENUM32:
case RPC_FC_FLOAT:
case RPC_FC_ERROR_STATUS_T:
*alignment = 4;
@@ -2344,12 +2346,14 @@ void print_phase_basetype(FILE *file, int indent, enum remoting_phase phase,
case RPC_FC_WCHAR:
case RPC_FC_USHORT:
case RPC_FC_SHORT:
+ case RPC_FC_ENUM16:
size = 2;
alignment = 2;
break;
case RPC_FC_ULONG:
case RPC_FC_LONG:
+ case RPC_FC_ENUM32:
case RPC_FC_FLOAT:
case RPC_FC_ERROR_STATUS_T:
size = 4;
More information about the wine-patches
mailing list