coan 4.2.4
|
![]() |
Data Structures | |
struct | eval_result |
Files | |
file | eval_result.c |
file | eval_result.h |
Defines | |
#define | EVAL_RESULT_INITOR {0,0,0,INT_SPEC_INITOR,EVAL_PENDING,0} |
#define | SET_FLAGS(eval_result, bits) ((eval_result).flags |= (bits)) |
#define | SET_FLAGS_IF(cond, eval_result, bits) (void)((cond) ? SET_FLAGS(eval_result,bits) : 0) |
#define | CLEAR_FLAGS(eval_result, bits) ((eval_result).flags &= ~(bits)) |
#define | CLEAR_FLAGS_IF(cond, eval_result, bits) (void)((cond) ? CLEAR_FLAGS(eval_result,bits) : 0) |
#define | FLIP_FLAGS(eval_result, bits) ((eval_result).flags ^= (bits)) |
#define | FLAGS_IN(eval_result, bits) ((eval_result).flags & (bits)) |
#define | AFFIRM_FLAGS(eval_result, bits) (((eval_result).flags & (bits)) == (bits)) |
#define | DENY_FLAGS(eval_result, bits) (((eval_result).flags & (bits)) == 0) |
#define | IS_TRUE(eval_result) AFFIRM_FLAGS(eval_result,EVAL_TRUE) |
#define | IS_FALSE(eval_result) AFFIRM_FLAGS(eval_result,EVAL_FALSE) |
#define | IS_CONST(eval_result) AFFIRM_FLAGS(eval_result,EVAL_CONST) |
#define | INT_WIDTH(eval_result) ((eval_result).value.width) |
#define | UNRESOLVED(eval_result) DENY_FLAGS(eval_result,EVAL_FALSE | EVAL_TRUE) |
#define | RESOLVED(eval_result) !UNRESOLVED(eval_result) |
#define | SET_REPORTED(eval_result) SET_FLAGS(eval_result,EVAL_REPORTED_SYM) |
#define | REPORTED(eval_result) AFFIRM_FLAGS(eval_result,EVAL_REPORTED_SYM) |
#define | DEL_PAREN(eval_result) AFFIRM_FLAGS(eval_result,EVAL_DEL_PAREN) |
#define | SET_DEL_PAREN(eval_result) SET_FLAGS(eval_result,EVAL_DEL_PAREN) |
#define | SET_KEEP_PAREN(eval_result) CLEAR_FLAGS(eval_result,EVAL_DEL_PAREN) |
#define | KEEP(eval_result) AFFIRM_FLAGS(eval_result,EVAL_KEEP) |
#define | SET_KEEP(eval_result) SET_FLAGS(eval_result,EVAL_KEEP) |
#define | KEEP_CONST(eval_result) AFFIRM_FLAGS(eval_result,EVAL_KEEP_CONST) |
#define | SET_KEEP_CONST(eval_result) SET_FLAGS(eval_result,EVAL_KEEP_CONST) |
#define | SET_CONST(eval_result) SET_FLAGS(eval_result,EVAL_CONST) |
#define | SET_ILLEGAL(eval_result) SET_FLAGS(eval_result,EVAL_ILLEGAL) |
#define | SET_LEGAL(eval_result) CLEAR_FLAGS(eval_result,EVAL_ILLEGAL) |
#define | ILLEGAL(eval_result) AFFIRM_FLAGS(eval_result,EVAL_ILLEGAL) |
#define | LEGAL(eval_result) !ILLEGAL(eval_result) |
#define | SET_UNRESOLVED(eval_result) CLEAR_FLAGS(eval_result,EVAL_TRUE | EVAL_FALSE) |
#define | SET_INSOURCE_SYM(eval_result) SET_FLAGS(eval_result,EVAL_INSOURCE_SYM) |
#define | INSOURCE_SYM(eval_result) AFFIRM_FLAGS(eval_result,EVAL_INSOURCE_SYM) |
#define | SET_GLOBAL_SYM(eval_result) SET_FLAGS(eval_result,EVAL_GLOBAL_SYM) |
#define | GLOBAL_SYM(eval_result) AFFIRM_FLAGS(eval_result,EVAL_GLOBAL_SYM) |
Typedefs | |
typedef struct eval_result | eval_result_t |
Enumerations | |
enum | eval_flags { EVAL_PENDING, EVAL_CONST = 1, EVAL_KEEP = 2, EVAL_KEEP_CONST = EVAL_CONST | EVAL_KEEP, EVAL_DEL_PAREN = 4, EVAL_TRUE = 8, EVAL_FALSE = 16, EVAL_ILLEGAL = 32, EVAL_INSOURCE_SYM = 64, EVAL_GLOBAL_SYM = 128, EVAL_REPORTED_SYM = 256, EVAL_RESOLVED = EVAL_TRUE | EVAL_FALSE, EVAL_PARSED = EVAL_RESOLVED | EVAL_KEEP } |
enum | line_type_t { LT_IF, LT_TRUE, LT_FALSE, LT_ELIF, LT_ELTRUE, LT_ELFALSE, LT_ELSE, LT_ENDIF, LT_PLAIN, LT_EOF, LT_DIRECTIVE_DROP, LT_DIRECTIVE_KEEP, LT_SENTINEL } |
Functions | |
void | eval_result_set_value (eval_result_t *result, int_spec_t const *int_spec) |
void | eval_result_clear (eval_result_t *result) |
bool | eval_result_parsed (eval_result_t *result) |
Variables | |
int_spec_t const | int_spec_false |
int_spec_t const | int_spec_true |
#define AFFIRM_FLAGS | ( | eval_result, | |
bits | |||
) | (((eval_result).flags & (bits)) == (bits)) |
Test whether specified flags are set in an eval_result_t
Definition at line 168 of file eval_result.h.
#define CLEAR_FLAGS | ( | eval_result, | |
bits | |||
) | ((eval_result).flags &= ~(bits)) |
Clear flags in an eval_result_t
Definition at line 151 of file eval_result.h.
#define CLEAR_FLAGS_IF | ( | cond, | |
eval_result, | |||
bits | |||
) | (void)((cond) ? CLEAR_FLAGS(eval_result,bits) : 0) |
Clear flags in an eval_result_t if a condition is true
Definition at line 155 of file eval_result.h.
Referenced by op_or().
#define DEL_PAREN | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_DEL_PAREN) |
Test whether an eval_result_t stipulates deleting superfluous parentheses
Definition at line 222 of file eval_result.h.
Referenced by eval_table(), and eval_unary().
#define DENY_FLAGS | ( | eval_result, | |
bits | |||
) | (((eval_result).flags & (bits)) == 0) |
Test whether specified flags are clear in an eval_result_t
Definition at line 174 of file eval_result.h.
#define EVAL_RESULT_INITOR {0,0,0,INT_SPEC_INITOR,EVAL_PENDING,0} |
Static initialiser for type eval_result_t
Definition at line 138 of file eval_result.h.
Referenced by eval_possible_symbol(), eval_result_clear(), eval_table(), eval_unary(), integer_binary_op(), op_and(), op_divide(), op_mod(), and op_or().
#define FLAGS_IN | ( | eval_result, | |
bits | |||
) | ((eval_result).flags & (bits)) |
Get the flags in eval_result_t that match a mask
Definition at line 164 of file eval_result.h.
Referenced by op_or().
#define FLIP_FLAGS | ( | eval_result, | |
bits | |||
) | ((eval_result).flags ^= (bits)) |
Invert the values of specified flags in an eval_result_t
Definition at line 161 of file eval_result.h.
Referenced by eval_unary().
#define GLOBAL_SYM | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_GLOBAL_SYM) |
Test whether an eval_result is a symbol defined or undefined globally
Definition at line 279 of file eval_result.h.
Referenced by symbol_is_configured(), and symbol_is_global().
#define ILLEGAL | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_ILLEGAL) |
Test whether an eval_result_t represents a non-expression
Definition at line 260 of file eval_result.h.
#define INSOURCE_SYM | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_INSOURCE_SYM) |
Test whether an eval_result is a symbol defined or undefined in-source
Definition at line 273 of file eval_result.h.
Referenced by symbol_is_configured().
#define INT_WIDTH | ( | eval_result | ) | ((eval_result).value.width) |
Return the integer width of the value of an eval result
Definition at line 193 of file eval_result.h.
#define IS_CONST | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_CONST) |
Test whether an eval_result_t represents a constant.
Definition at line 189 of file eval_result.h.
Referenced by integer_binary_op(), op_divide(), and op_mod().
#define IS_FALSE | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_FALSE) |
Test whether an eval_result_t represents a false expression.
Definition at line 185 of file eval_result.h.
Referenced by eval_if(), eval_table(), op_and(), and op_or().
#define IS_TRUE | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_TRUE) |
Test whether an eval_result_t represents a true expression
Definition at line 180 of file eval_result.h.
Referenced by eval_if(), eval_table(), op_and(), and op_or().
#define KEEP | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_KEEP) |
Test whether an eval_result_t represents an expression we can't eliminate.
Definition at line 236 of file eval_result.h.
Referenced by eval_result_parsed(), and eval_table().
#define KEEP_CONST | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_KEEP_CONST) |
Test whether an eval_result_t represents a non-eliminable constant
Definition at line 245 of file eval_result.h.
Referenced by eval_if(), eval_table(), op_and(), and op_or().
#define LEGAL | ( | eval_result | ) | !ILLEGAL(eval_result) |
Test whether an eval_result_t represents a legal expression
Definition at line 263 of file eval_result.h.
Referenced by eval_table().
#define REPORTED | ( | eval_result | ) | AFFIRM_FLAGS(eval_result,EVAL_REPORTED_SYM) |
Test whether an eval_result_t represents a symbol that has been reported.
The test supports the option of reporting symbols only once rather than at each occurrence.
Definition at line 217 of file eval_result.h.
Referenced by symbol_reported().
#define RESOLVED | ( | eval_result | ) | !UNRESOLVED(eval_result) |
Test whether an eval_result_t represents a resolved expression.
Definition at line 203 of file eval_result.h.
Referenced by eval_result_parsed(), eval_table(), eval_unary(), integer_binary_op(), op_divide(), op_mod(), and symbol_resolve().
#define SET_CONST | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_CONST) |
Flag an eval_result_t as a constant
Definition at line 251 of file eval_result.h.
Referenced by eval_unary().
#define SET_DEL_PAREN | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_DEL_PAREN) |
Flag an eval_result_t for deletion of superflous parentheses.
Definition at line 227 of file eval_result.h.
Referenced by eval_table(), and eval_unary().
#define SET_FLAGS | ( | eval_result, | |
bits | |||
) | ((eval_result).flags |= (bits)) |
Set flags in an eval_result_t
Definition at line 142 of file eval_result.h.
Referenced by eval_result_set_value(), and eval_unary().
#define SET_FLAGS_IF | ( | cond, | |
eval_result, | |||
bits | |||
) | (void)((cond) ? SET_FLAGS(eval_result,bits) : 0) |
Set flags in an eval_result_t if a condition is true
Definition at line 146 of file eval_result.h.
#define SET_GLOBAL_SYM | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_GLOBAL_SYM) |
Flag an eval_result as symbol defined or undefined globally
Definition at line 276 of file eval_result.h.
Referenced by symbol_define(), and symbol_undefine().
#define SET_ILLEGAL | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_ILLEGAL) |
Flag an eval_result_t as a non-expression
Definition at line 254 of file eval_result.h.
Referenced by eval_table(), and eval_unary().
#define SET_INSOURCE_SYM | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_INSOURCE_SYM) |
Flag an eval_result as symbol defined or undefined in-source
Definition at line 270 of file eval_result.h.
Referenced by symbol_define(), and symbol_undefine().
#define SET_KEEP | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_KEEP) |
Flag an eval_result_t as an expression we can't eliminate.
Definition at line 241 of file eval_result.h.
Referenced by eval_table(), eval_unary(), and symbol_resolve().
#define SET_KEEP_CONST | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_KEEP_CONST) |
Flag an eval_result_t as a non-eliminable constant
Definition at line 248 of file eval_result.h.
#define SET_KEEP_PAREN | ( | eval_result | ) | CLEAR_FLAGS(eval_result,EVAL_DEL_PAREN) |
Flag an eval_result_t for retention of parentheses.
Definition at line 231 of file eval_result.h.
Referenced by eval_table().
#define SET_LEGAL | ( | eval_result | ) | CLEAR_FLAGS(eval_result,EVAL_ILLEGAL) |
Flag an eval_result_t as a legal expression
Definition at line 257 of file eval_result.h.
#define SET_REPORTED | ( | eval_result | ) | SET_FLAGS(eval_result,EVAL_REPORTED_SYM) |
Test whether an eval_result_t represents insoluble text.
Flag an eval_result_t as qa symbol that has been reported.
Definition at line 209 of file eval_result.h.
Referenced by report_symbol().
#define SET_UNRESOLVED | ( | eval_result | ) | CLEAR_FLAGS(eval_result,EVAL_TRUE | EVAL_FALSE) |
Flag an eval_result_t as unresolved
Definition at line 266 of file eval_result.h.
#define UNRESOLVED | ( | eval_result | ) | DENY_FLAGS(eval_result,EVAL_FALSE | EVAL_TRUE) |
Test whether an eval_result_t represents unresolved text.
Definition at line 198 of file eval_result.h.
Referenced by eval_unary(), and op_and().
typedef struct eval_result eval_result_t |
Structure representing the evaluation of a text item
enum eval_flags |
Bit flags denoting findings of evaluation
Definition at line 54 of file eval_result.h.
enum line_type_t |
Enumeration of types of input lines
Definition at line 85 of file eval_result.h.
void eval_result_clear | ( | eval_result_t * | result | ) |
Zero all fields in an eval_result_t
result | If not NULL, pointer to an eval_result_t to be cleared. |
If result is NULL the function is a no-op.
Definition at line 68 of file eval_result.c.
References canonical_string_dispose(), EVAL_RESULT_INITOR, eval_result::most_resolved, eval_result::sym_def, and eval_result::sym_name.
Referenced by symbol_dispose(), symbol_init(), and symbol_resolve().
bool eval_result_parsed | ( | eval_result_t * | result | ) |
Say whether an eval_result_t has been fully parsed.
result | Pointer the eval_result_t to be tested. |
EVAL_RESOLVED
or EVAL_KEEP
. Definition at line 89 of file eval_result.c.
void eval_result_set_value | ( | eval_result_t * | result, |
int_spec_t const * | int_spec | ||
) |
Assign a value in an eval_result_t
result | Pointer the the eval_result_t to which a value is to be assigned. |
int_spec | Descriptor of the integer value to be assigned. |
Definition at line 61 of file eval_result.c.
References EVAL_FALSE, EVAL_TRUE, SET_FLAGS, int_spec::val, and eval_result::value.
Referenced by eval_possible_symbol(), eval_unary(), integer_binary_op(), op_and(), op_divide(), op_mod(), op_or(), symbol_resolve(), and symbol_undefine().
int_spec_t const int_spec_false |
Constant int_spec_t representing falsity
Definition at line 55 of file eval_result.c.
Referenced by eval_possible_symbol(), eval_unary(), op_and(), op_or(), and symbol_undefine().
int_spec_t const int_spec_true |
Constant int_spec_t representing truth
Definition at line 58 of file eval_result.c.
Referenced by eval_unary(), and op_or().