X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9852b61c2b87f619117e4a170c7c34b29a8afc59..fc51acddb45242904128a7637dc2ab9216ba0662:/src/scan-code.h diff --git a/src/scan-code.h b/src/scan-code.h index c98a54ad..7010f642 100644 --- a/src/scan-code.h +++ b/src/scan-code.h @@ -1,6 +1,6 @@ /* Bison code properties structure and scanner. - Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 2006-2007, 2009-2014 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. @@ -45,7 +45,10 @@ typedef struct code_props { CODE_PROPS_SYMBOL_ACTION, CODE_PROPS_RULE_ACTION } kind; - /** \c NULL iff \c code_props::kind is \c CODE_PROPS_NONE. */ + /** + * \c NULL iff \c code_props::kind is \c CODE_PROPS_NONE. + * Memory is allocated in an obstack freed elsewhere. + */ char const *code; /** Undefined iff \c code_props::code is \c NULL. */ location location; @@ -63,6 +66,17 @@ typedef struct code_props { */ bool is_value_used; + /** + * \c true iff this code is an action that is not to be deferred in + * a non-deterministic parser. + */ + bool is_predicate; + + /** + * Whether this is actually used (i.e., not completely masked by + * other code props). */ + bool is_used; + /** \c NULL iff \c code_props::kind is not \c CODE_PROPS_RULE_ACTION. */ struct symbol_list *rule; @@ -79,11 +93,20 @@ typedef struct code_props { void code_props_none_init (code_props *self); /** Equivalent to \c code_props_none_init. */ -#define CODE_PROPS_NONE_INIT \ - {CODE_PROPS_NONE, NULL, EMPTY_LOCATION_INIT, false, NULL, NULL} +# define CODE_PROPS_NONE_INIT \ + { \ + /* .kind = */ CODE_PROPS_NONE, \ + /* .code = */ NULL, \ + /* .location = */ EMPTY_LOCATION_INIT, \ + /* .is_value_used = */ false, \ + /* .is_predicate = */ false, \ + /* .is_used = */ false, \ + /* .rule = */ NULL, \ + /* .named_ref = */ NULL \ + } /** Initialized by \c CODE_PROPS_NONE_INIT with no further modification. */ -extern code_props const code_props_none; +extern code_props code_props_none; /** * \pre @@ -134,7 +157,7 @@ void code_props_symbol_action_init (code_props *self, char const *code, */ void code_props_rule_action_init (code_props *self, char const *code, location code_loc, struct symbol_list *rule, - named_ref *name); + named_ref *name, bool is_predicate); /** * \pre