X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/7c0c61812d534683d10234082e6e6adee6eb81a6..026816664ff8283a55f91915843a8ff0ac5cf86c:/src/scan-code.h diff --git a/src/scan-code.h b/src/scan-code.h index c5f14fd5..d5a15c1a 100644 --- a/src/scan-code.h +++ b/src/scan-code.h @@ -1,12 +1,12 @@ /* Bison code properties structure and scanner. - Copyright (C) 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2006-2007, 2009-2013 Free Software Foundation, Inc. This file is part of Bison, the GNU Compiler Compiler. - This program is free software; you can redistribute it and/or modify + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -15,15 +15,13 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA -*/ + along with this program. If not, see . */ #ifndef SCAN_CODE_H_ # define SCAN_CODE_H_ # include "location.h" +# include "named-ref.h" struct symbol_list; @@ -47,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; @@ -65,8 +66,22 @@ 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; + + /* Named reference. */ + named_ref *named_ref; } code_props; /** @@ -78,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} +# 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 @@ -132,7 +156,8 @@ void code_props_symbol_action_init (code_props *self, char const *code, * - The caller frees \c rule. */ void code_props_rule_action_init (code_props *self, char const *code, - location code_loc, struct symbol_list *rule); + location code_loc, struct symbol_list *rule, + named_ref *name, bool is_predicate); /** * \pre @@ -163,13 +188,9 @@ void code_scanner_last_string_free (void); * - None. * \post * - All dynamic memory allocated during invocations of - * \c code_props_translate_code or \c translate_rule_action (if any) has - * been freed. All \c code_props instances may now be invalid. + * \c code_props_translate_code (if any) has been freed. All \c code_props + * instances may now be invalid. */ void code_scanner_free (void); -/* The action of the rule R contains $$, $1 etc. referring to the values - of the rule R. */ -char const *translate_rule_action (struct symbol_list *r); - #endif /* !SCAN_CODE_H_ */