summaryrefslogtreecommitdiff
path: root/regexp.h
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2023-03-21 22:02:48 +0100
committerYves Orton <demerphq@gmail.com>2023-03-29 20:54:49 +0800
commit44eb4cdc274114db740861e4a116ffce3371d70f (patch)
treece493442d641765399dacc07ac2e81830796f0fa /regexp.h
parentb292ecb4e4450921a8424ad87000f49bd9c858de (diff)
downloadperl-44eb4cdc274114db740861e4a116ffce3371d70f.tar.gz
regcomp.h - use a common union for head and args across all regnodes.
This helps with HPUX builds where we need to ensure everything is aligned the same (on 32 bit boundaries). It also strongly encourages everything to use the accessor macros and not access the members directly. By using a union for the variadic fields we make it more obvious that some regops use the field in different ways. This patch also converts all the arg unions into a standardized union with standardized member names.
Diffstat (limited to 'regexp.h')
-rw-r--r--regexp.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/regexp.h b/regexp.h
index d3269ad18c..243cf246c6 100644
--- a/regexp.h
+++ b/regexp.h
@@ -29,10 +29,23 @@ struct regnode_meta {
U8 off_by_arg;
};
+/* this ensures that on alignment sensitive platforms
+ * this struct is aligned on 32 bit boundaries */
+union regnode_head {
+ struct {
+ union {
+ U8 flags;
+ U8 str_len_u8;
+ U8 first_byte;
+ } u_8;
+ U8 type;
+ U16 next_off;
+ } data;
+ U32 data_u32;
+};
+
struct regnode {
- U8 flags;
- U8 type;
- U16 next_off;
+ union regnode_head head;
};
typedef struct regnode regnode;