From 1815b305ea226fa8a9cf8582df259e0bde76bbdf Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 13 Aug 2022 16:16:24 +0100 Subject: Bytecode: Flag values for explicit defaulting --- src/bytecode/bytecode.h | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/bytecode/bytecode.h b/src/bytecode/bytecode.h index 7f5ea9d..ccfdcac 100644 --- a/src/bytecode/bytecode.h +++ b/src/bytecode/bytecode.h @@ -18,9 +18,20 @@ typedef uint32_t css_code_t; typedef enum css_properties_e opcode_t; +enum flag_value { + FLAG_VALUE__NONE = 0, + FLAG_VALUE_INHERIT = 1, + FLAG_VALUE_INITIAL = 2, + FLAG_VALUE_REVERT = 3, + FLAG_VALUE_UNSET = 4, +}; + enum flag { - FLAG_IMPORTANT = (1<<0), - FLAG_INHERIT = (1<<1) + FLAG_IMPORTANT = (1 << 0), + FLAG_INHERIT = (FLAG_VALUE_INHERIT << 1), + FLAG_INITIAL = (FLAG_VALUE_INITIAL << 1), + FLAG_REVERT = (FLAG_VALUE_REVERT << 1), + FLAG_UNSET = (FLAG_VALUE_UNSET << 1), }; @@ -95,12 +106,22 @@ static inline uint16_t getValue(css_code_t OPV) static inline bool isImportant(css_code_t OPV) { - return getFlags(OPV) & 0x1; + return getFlags(OPV) & FLAG_IMPORTANT; +} + +static inline enum flag_value getFlagValue(css_code_t OPV) +{ + return (getFlags(OPV) >> 1) & 0x7; +} + +static inline bool hasFlagValue(css_code_t OPV) +{ + return getFlagValue(OPV) != FLAG_VALUE__NONE; } static inline bool isInherit(css_code_t OPV) { - return getFlags(OPV) & 0x2; + return getFlagValue(OPV) == FLAG_VALUE_INHERIT; } #endif -- cgit v1.2.1