/* Definitions and documentation for the codes used by the Tree Browser.
   Copyright (C) 2002, 2007 Free Software Foundation, Inc.
   Contributed by Sebastian Pop <s.pop@laposte.net>

This file is part of GCC.

GCC 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 3, or (at your option) any later
version.

GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

/* First field in the following declarations is the code of the command
   used by the tree browser.  
   Second field is what is parsed in order to recognize a command.
   Third field is used for printing the help message.  */


/* Misc. commands.  */
DEFTBCODE (TB_EXIT,		"x",	"Exits tree-browser.")
DEFTBCODE (TB_QUIT,             "q",    "Exits tree-browser.")
DEFTBCODE (TB_HELP,		"h",	"Prints this help message.")
DEFTBCODE (TB_UPDATE_UP,        "update", "Update information about parent expressions.")
DEFTBCODE (TB_VERBOSE,          "verbose", "Sets/unsets verbose mode (default is on).")

/* Walking commands.  */
DEFTBCODE (TB_FUN,		"fun",	"Go to the current function declaration.")
DEFTBCODE (TB_NEXT,		"nx",	"Go to the next expression in a BIND_EXPR.")
DEFTBCODE (TB_PREV,		"pr",   "Go to the previous expression in a BIND_EXPR.")
DEFTBCODE (TB_UP,		"up",	"Go to the parent tree node.")
DEFTBCODE (TB_LAST,             "last", "Go to the last expression in a BIND_EXPR.")
DEFTBCODE (TB_FIRST,            "first","Go to the first expression in a BIND_EXPR.")
DEFTBCODE (TB_HPREV,            "hpr",  "Go to the previous visited node (history previous).")

/* Fields accessors.  */
DEFTBCODE (TB_CHILD_0,          "arg0",  "Child 0.")
DEFTBCODE (TB_CHILD_1,          "arg1",  "Child 1.")
DEFTBCODE (TB_CHILD_2,          "arg2",  "Child 2.")
DEFTBCODE (TB_CHILD_3,          "arg3",  "Child 3.")
DEFTBCODE (TB_DECL_SAVED_TREE,  "decl_saved_tree", "Body of a function.")
DEFTBCODE (TB_TYPE,             "type", "Field accessor.")
DEFTBCODE (TB_SIZE,             "size", "Field accessor.")
DEFTBCODE (TB_UNIT_SIZE,        "unit_size", "Field accessor.")
DEFTBCODE (TB_OFFSET,           "offset", "Field accessor.")
DEFTBCODE (TB_BIT_OFFSET,       "bit_offset", "Field accessor.")
DEFTBCODE (TB_CONTEXT,          "context", "Field accessor.")
DEFTBCODE (TB_ATTRIBUTES,       "attributes", "Field accessor.")
DEFTBCODE (TB_ABSTRACT_ORIGIN,  "abstract_origin", "Field accessor.")
DEFTBCODE (TB_ARGUMENTS,        "arguments", "Field accessor.")
DEFTBCODE (TB_RESULT,           "result", "Field accessor.")
DEFTBCODE (TB_INITIAL,          "initial", "Field accessor.")
DEFTBCODE (TB_ARG_TYPE,         "arg-type", "Field accessor.")
DEFTBCODE (TB_ARG_TYPE_AS_WRITTEN, "arg-type-as-written", "Field accessor.")
DEFTBCODE (TB_CHAIN,            "chain", "Field accessor.")
DEFTBCODE (TB_VALUES,           "values", "Field accessor.")
DEFTBCODE (TB_DOMAIN,           "domain", "Field accessor.")
DEFTBCODE (TB_METHOD_BASE_TYPE, "method_basetype", "Field accessor.")
DEFTBCODE (TB_FIELDS,           "fields", "Field accessor.")
DEFTBCODE (TB_ARG_TYPES,        "arg-types", "Field accessor.")
DEFTBCODE (TB_BASETYPE,         "basetype", "Field accessor.")
DEFTBCODE (TB_POINTER_TO_THIS,  "pointer_to_this", "Field accessor.")
DEFTBCODE (TB_REFERENCE_TO_THIS,"reference_to_this", "Field accessor.")
DEFTBCODE (TB_VARS,             "vars", "Field accessor.")
DEFTBCODE (TB_SUPERCONTEXT,     "supercontext", "Field accessor.")
DEFTBCODE (TB_BODY,             "body", "Field accessor.")
DEFTBCODE (TB_SUBBLOCKS,        "subblocks", "Field accessor.")
DEFTBCODE (TB_BLOCK,            "block", "Field accessor.")
DEFTBCODE (TB_REAL,             "real", "Field accessor.")
DEFTBCODE (TB_IMAG,             "imag", "Field accessor.")
DEFTBCODE (TB_PURPOSE,          "purpose", "Field accessor.")
DEFTBCODE (TB_VALUE,            "value", "Field accessor.")
DEFTBCODE (TB_ELT,              "elt", "Field accessor.")
DEFTBCODE (TB_MIN,              "min", "Field accessor.")
DEFTBCODE (TB_MAX,              "max", "Field accessor.")

/* Searching commands.  */
DEFTBCODE (TB_SEARCH_CODE,	"sc",	"Search a node having a TREE_CODE given as a parameter.") 
DEFTBCODE (TB_SEARCH_NAME,	"sn",	"Search an identifier having a name given as a parameter.")

/* Printing commands.  */
DEFTBCODE (TB_PRETTY_PRINT,     "pp",   "Pretty print current node.") 
DEFTBCODE (TB_PRINT,            "p",    "Prints the current node.")  


/*
Local variables:
mode:c
End:
*/
