aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2015-12-19 18:09:41 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2015-12-19 18:09:41 -0800
commit6aa2cbe8070e9d7f0385a57bbc0cce1045fd1725 (patch)
treed7c3cfcc8cf5988f359674b2820b016f112f5a15
parentad72421b2c738e93ed8d99823974b5a823a02e03 (diff)
Shave 4 bytes from parse_node_t
Bitfields ftw
-rw-r--r--src/parse_tree.cpp4
-rw-r--r--src/parse_tree.h4
2 files changed, 5 insertions, 3 deletions
diff --git a/src/parse_tree.cpp b/src/parse_tree.cpp
index c1f1f80f..ead78a6e 100644
--- a/src/parse_tree.cpp
+++ b/src/parse_tree.cpp
@@ -1149,7 +1149,9 @@ void parse_ll_t::accept_tokens(parse_token_t token1, parse_token_t token2)
// Get the production for the top of the stack
parse_stack_element_t &stack_elem = symbol_stack.back();
parse_node_t &node = nodes.at(stack_elem.node_idx);
- const production_t *production = production_for_token(stack_elem.type, token1, token2, &node.tag);
+ parse_node_tag_t tag = 0;
+ const production_t *production = production_for_token(stack_elem.type, token1, token2, &tag);
+ node.tag = tag;
if (production == NULL)
{
parse_error_failed_production(stack_elem, token1);
diff --git a/src/parse_tree.h b/src/parse_tree.h
index b4c4b8ba..4d0ad4a6 100644
--- a/src/parse_tree.h
+++ b/src/parse_tree.h
@@ -103,10 +103,10 @@ public:
enum parse_keyword_t keyword;
/* Node flags */
- parse_node_flags_t flags;
+ parse_node_flags_t flags:4;
/* This is used to store e.g. the statement decoration. */
- parse_node_tag_t tag;
+ parse_node_tag_t tag:4;
/* Description */
wcstring describe(void) const;