From 9248316fb65eeafb7749b3879b81459f87bd9f54 Mon Sep 17 00:00:00 2001 From: Richard Brooksby Date: Wed, 12 Sep 2012 19:32:37 +0100 Subject: [PATCH] Further reduction of interface puns that violate the strict aliasing rule, this time in thread function types and the corresponding threadstruct. Copied from Perforce Change: 179451 ServerID: perforce.ravenbrook.com --- mps/code/mpm.h | 4 ++-- mps/code/mpmtypes.h | 10 +--------- mps/code/mps.h | 1 + mps/code/mpsi.c | 6 ++---- mps/code/root.c | 8 ++++---- mps/code/than.c | 2 +- mps/code/thix.c | 2 +- mps/code/thw3.h | 2 +- 8 files changed, 13 insertions(+), 22 deletions(-) diff --git a/mps/code/mpm.h b/mps/code/mpm.h index 165c7485e37..58fb4da6a31 100644 --- a/mps/code/mpm.h +++ b/mps/code/mpm.h @@ -936,14 +936,14 @@ extern Res RootCreateTableMasked(Root *rootReturn, Arena arena, Word mask); extern Res RootCreateReg(Root *rootReturn, Arena arena, Rank rank, Thread thread, - RootScanRegMethod scan, + mps_reg_scan_t scan, void *p, size_t s); extern Res RootCreateFmt(Root *rootReturn, Arena arena, Rank rank, RootMode mode, FormatScanMethod scan, Addr base, Addr limit); extern Res RootCreateFun(Root *rootReturn, Arena arena, - Rank rank, RootScanMethod scan, + Rank rank, mps_root_scan_t scan, void *p, size_t s); extern void RootDestroy(Root root); extern Bool RootModeCheck(RootMode mode); diff --git a/mps/code/mpmtypes.h b/mps/code/mpmtypes.h index b1853178cbb..12d23e39989 100644 --- a/mps/code/mpmtypes.h +++ b/mps/code/mpmtypes.h @@ -96,7 +96,7 @@ typedef struct mps_arena_s *Arena; /* */ typedef struct GlobalsStruct *Globals; /* */ typedef struct VMStruct *VM; /* * */ typedef struct RootStruct *Root; /* */ -typedef struct ThreadStruct *Thread; /* * */ +typedef struct mps_thr_s *Thread; /* * */ typedef struct MutatorFaultContextStruct *MutatorFaultContext; /* */ typedef struct PoolDebugMixinStruct *PoolDebugMixin; @@ -255,14 +255,6 @@ typedef void (*FormatPadMethod)(Addr base, Size size); typedef Addr (*FormatClassMethod)(Addr object); -/* Root*Method -- see design.mps.root-interface */ -/* .root-methods: These methods must match those defined in the */ -/* MPS C Interface. (See .) */ - -typedef Res (*RootScanMethod)(mps_ss_t ss, void *p, size_t s); -typedef Res (*RootScanRegMethod)(mps_ss_t ss, Thread thread, void *p, size_t s); - - /* CONSTANTS */ diff --git a/mps/code/mps.h b/mps/code/mps.h index 469639b6c6d..945d43cc13b 100644 --- a/mps/code/mps.h +++ b/mps/code/mps.h @@ -178,6 +178,7 @@ typedef struct mps_ld_s { /* location dependency descriptor */ /* Format and Root Method Types */ +/* see design.mps.root-interface */ /* .fmt-methods: Keep in sync with */ /* .root-methods: Keep in sync with */ diff --git a/mps/code/mpsi.c b/mps/code/mpsi.c index 240861f8dad..c620cad18dd 100644 --- a/mps/code/mpsi.c +++ b/mps/code/mpsi.c @@ -1194,8 +1194,7 @@ mps_res_t mps_root_create(mps_root_t *mps_root_o, mps_arena_t arena, AVER(mps_rm == (mps_rm_t)0); /* See .root-mode. */ - res = RootCreateFun(&root, arena, rank, - (RootScanMethod)mps_root_scan, p, s); + res = RootCreateFun(&root, arena, rank, mps_root_scan, p, s); ArenaLeave(arena); @@ -1308,8 +1307,7 @@ mps_res_t mps_root_create_reg(mps_root_t *mps_root_o, mps_arena_t arena, /* See .root-mode. */ res = RootCreateReg(&root, arena, rank, thread, - (RootScanRegMethod)mps_reg_scan, - reg_scan_p, mps_size); + mps_reg_scan, reg_scan_p, mps_size); ArenaLeave(arena); diff --git a/mps/code/root.c b/mps/code/root.c index 9ce385a124c..c94217c04ad 100644 --- a/mps/code/root.c +++ b/mps/code/root.c @@ -33,7 +33,7 @@ typedef struct RootStruct { RootVar var; /* union discriminator */ union RootUnion { struct { - RootScanMethod scan; /* the function which does the scanning */ + mps_root_scan_t scan; /* the function which does the scanning */ void *p; /* environment for scan */ size_t s; /* environment for scan */ } fun; @@ -47,7 +47,7 @@ typedef struct RootStruct { Word mask; /* tag mask for scanning */ } tableMasked; struct { - RootScanRegMethod scan; /* function for scanning registers */ + mps_reg_scan_t scan; /* function for scanning registers */ Thread thread; /* passed to scan */ void *p; /* passed to scan */ size_t s; /* passed to scan */ @@ -296,7 +296,7 @@ Res RootCreateTableMasked(Root *rootReturn, Arena arena, Res RootCreateReg(Root *rootReturn, Arena arena, Rank rank, Thread thread, - RootScanRegMethod scan, void *p, size_t s) + mps_reg_scan_t scan, void *p, size_t s) { union RootUnion theUnion; @@ -336,7 +336,7 @@ Res RootCreateFmt(Root *rootReturn, Arena arena, } Res RootCreateFun(Root *rootReturn, Arena arena, Rank rank, - RootScanMethod scan, void *p, size_t s) + mps_root_scan_t scan, void *p, size_t s) { union RootUnion theUnion; diff --git a/mps/code/than.c b/mps/code/than.c index 96553c7cd75..752ef3ed64c 100644 --- a/mps/code/than.c +++ b/mps/code/than.c @@ -17,7 +17,7 @@ SRCID(than, "$Id$"); -typedef struct ThreadStruct { /* ANSI fake thread structure */ +typedef struct mps_thr_s { /* ANSI fake thread structure */ Sig sig; /* */ Serial serial; /* from arena->threadSerial */ Arena arena; /* owning arena */ diff --git a/mps/code/thix.c b/mps/code/thix.c index 5089f33f56e..b792cd96783 100644 --- a/mps/code/thix.c +++ b/mps/code/thix.c @@ -43,7 +43,7 @@ SRCID(thix, "$Id$"); /* ThreadStruct -- thread desriptor */ -typedef struct ThreadStruct { /* PThreads thread structure */ +typedef struct mps_thr_s { /* PThreads thread structure */ Sig sig; /* */ Serial serial; /* from arena->threadSerial */ Arena arena; /* owning arena */ diff --git a/mps/code/thw3.h b/mps/code/thw3.h index b3e67cb319d..7e3cd68e2f1 100644 --- a/mps/code/thw3.h +++ b/mps/code/thw3.h @@ -21,7 +21,7 @@ #include "mpswin.h" -typedef struct ThreadStruct { /* Win32 thread structure */ +typedef struct mps_thr_s { /* Win32 thread structure */ Sig sig; /* */ Serial serial; /* from arena->threadSerial */ Arena arena; /* owning arena */