diff mbox series

[wwwdocs] remove tree-browser page and links

Message ID 20200707085829.1459-1-hujiangping@cn.fujitsu.com
State New
Headers show
Series [wwwdocs] remove tree-browser page and links | expand

Commit Message

Hu, Jiangping July 7, 2020, 8:58 a.m. UTC
Hi,

I'm trying Tree Browser during debugging, but failed.
I found that tree-browser.c and tree-browser.def have been
removed at 2015-07-25. So, to avoid misunderstanding,
can we remove this tree-browser page too?

Regards.
hujp

---
 htdocs/projects/tree-ssa/index.html        |   6 -
 htdocs/projects/tree-ssa/tree-browser.html | 306 ---------------------
 2 files changed, 312 deletions(-)
 delete mode 100644 htdocs/projects/tree-ssa/tree-browser.html

Comments

Richard Sandiford July 9, 2020, 8:21 a.m. UTC | #1
Hu Jiangping <hujiangping@cn.fujitsu.com> writes:
> Hi,
>
> I'm trying Tree Browser during debugging, but failed.
> I found that tree-browser.c and tree-browser.def have been
> removed at 2015-07-25. So, to avoid misunderstanding,
> can we remove this tree-browser page too?

Thanks for the patch.  Seems like a good idea to me.  I guess the only
question is whether we should keep it around for historical purposes,
but with a big banner to say that it's no longer up-to-date.  I also
don't know whether we try to avoid 404s on old pages.

Gerald, WDYT?

Richard

>
> Regards.
> hujp
>
> ---
>  htdocs/projects/tree-ssa/index.html        |   6 -
>  htdocs/projects/tree-ssa/tree-browser.html | 306 ---------------------
>  2 files changed, 312 deletions(-)
>  delete mode 100644 htdocs/projects/tree-ssa/tree-browser.html
>
> diff --git a/htdocs/projects/tree-ssa/index.html b/htdocs/projects/tree-ssa/index.html
> index a15d0f32..930df390 100644
> --- a/htdocs/projects/tree-ssa/index.html
> +++ b/htdocs/projects/tree-ssa/index.html
> @@ -21,7 +21,6 @@
>  <li><a href="#gimple">GENERIC and GIMPLE</a></li>
>  <li><a href="#ssa">SSA implementation</a></li>
>  <li><a href="#unparse">Unparsing GENERIC trees</a></li>
> -<li><a href="#tb">Tree Browser</a></li>
>  <li><a href="#status">Implementation Status (last updated: 2003-11-22)</a></li>
>  <li><a href="#todo">TODO list (last updated: 2003-12-27)</a></li>
>  </ul>
> @@ -221,11 +220,6 @@ functions that given a GENERIC tree node, they print a C representation of
>  the tree.  The output is not meant to be compilable, but it is of great
>  help when debugging transformations done by the transformation passes.</p>
>  
> -<hr />
> -<h2 id="tb">Tree Browser</h2>
> -For debugging, browsing, discovering, and playing with trees you can
> -use the <a href="tree-browser.html">Tree Browser</a> directly from gdb.
> -
>  <hr />
>  <h2 id="status">Implementation Status</h2>
>  
> diff --git a/htdocs/projects/tree-ssa/tree-browser.html b/htdocs/projects/tree-ssa/tree-browser.html
> deleted file mode 100644
> index ce95a103..00000000
> --- a/htdocs/projects/tree-ssa/tree-browser.html
> +++ /dev/null
> @@ -1,306 +0,0 @@
> -<!DOCTYPE html>
> -<html lang="en">
> -
> -<head>
> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
> -<title>Tree Browser</title>
> -<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
> -</head>
> -  
> -  <body>
> -    <h1>Tree Browser</h1>
> -    
> -<p>Until recently the only way to debug trees from gdb was to call
> -debug_tree as follows:</p>
> -    
> -<pre class="smallexample">
> -(gdb) p debug_tree (current_function_decl) 
> -</pre>
> -
> -<p>An alternative for interactively scan tree structures is to use the
> -Tree Browser.  You can access Tree Browser from anywhere during a debugging
> -session as follows:</p>
> -
> -<pre class="smallexample">
> -(gdb) p browse_tree (current_function_decl)
> - 
> -Tree Browser 
> -foo 
> -Up/prev expressions updated. 
> -TB&gt; 
> -</pre>
> -
> -<p>For listing available commands, you could try:</p>
> -
> -<pre class="smallexample">
> -TB&gt; h 
> -Possible commands are: 
> - 
> -                   x  -  Exits tree-browser. 
> -                   q  -  Exits tree-browser. 
> -                   h  -  Prints this help message. 
> -              update  -  Update information about parent expressions. 
> -             verbose  -  Sets/unsets verbose mode (default is on). 
> -                 fun  -  Go to the current function declaration. 
> -                  nx  -  Go to the next expression in a BIND_EXPR. 
> -                  pr  -  Go to the previous expression in a BIND_EXPR. 
> -                  up  -  Go to the parent tree node. 
> -                last  -  Go to the last expression in a BIND_EXPR. 
> -               first  -  Go to the first expression in a BIND_EXPR. 
> -                 hpr  -  Go to the previous visited node (history previous). 
> -                arg0  -  Child 0. 
> -                arg1  -  Child 1. 
> -                arg2  -  Child 2. 
> -                arg3  -  Child 3. 
> -     decl_saved_tree  -  Body of a function. 
> -                type  -  Field accessor. 
> -                size  -  Field accessor. 
> -           unit_size  -  Field accessor. 
> -              offset  -  Field accessor. 
> -          bit_offset  -  Field accessor. 
> -             context  -  Field accessor. 
> -          attributes  -  Field accessor. 
> -     abstract_origin  -  Field accessor. 
> -           arguments  -  Field accessor. 
> -              result  -  Field accessor. 
> -             initial  -  Field accessor. 
> -            arg-type  -  Field accessor. 
> - arg-type-as-written  -  Field accessor. 
> -               chain  -  Field accessor. 
> -              values  -  Field accessor. 
> -              domain  -  Field accessor. 
> -     method_basetype  -  Field accessor. 
> -              fields  -  Field accessor. 
> -           arg-types  -  Field accessor. 
> -            basetype  -  Field accessor. 
> -     pointer_to_this  -  Field accessor. 
> -   reference_to_this  -  Field accessor. 
> -                vars  -  Field accessor. 
> -        supercontext  -  Field accessor. 
> -                body  -  Field accessor. 
> -           subblocks  -  Field accessor. 
> -               block  -  Field accessor. 
> -                real  -  Field accessor. 
> -                imag  -  Field accessor. 
> -             purpose  -  Field accessor. 
> -               value  -  Field accessor. 
> -                 elt  -  Field accessor. 
> -                 min  -  Field accessor. 
> -                 max  -  Field accessor. 
> -                  sc  -  Search a node having a TREE_CODE given as a parameter. 
> -                  sn  -  Search an identifier having a name given as a parameter. 
> -                  pp  -  Pretty print current node. 
> -                   p  -  Prints the current node. 
> -TB&gt;  
> -</pre>
> -
> -<p>Note that this list of commands is susceptible to change, since this
> -is a pretty new tool and is still in development.</p>
> -    
> -<p>Now let's try some of these commands: we're on the declaration of the
> -current function, we can have a look at its body.</p>
> -
> -<pre class="smallexample">
> -TB&gt; decl_saved_tree 
> -{ 
> -  int T.1; 
> -  int T.2; 
> -  int i; 
> -  extern  koo; 
> -  extern  bar; 
> -  extern  toons; 
> - 
> -  i = 0, i = i + 1, koo (), if (i != 0) 
> -    { 
> -      bar (i) 
> -    } 
> -  else 
> -    { 
> -      T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -    }, return i; 
> -} 
> -TB&gt;  
> -</pre>
> -
> -<p>The above output is a pretty-print of the body of the current function.
> -A call to debug_tree would have printed more things about the structure of
> -the Abstract Syntax Trees (AST), as follows:</p>
> -
> -<pre class="smallexample">
> -TB&gt; p 
> - &lt;expr_with_file_location 0x401a2aa0 
> -    type &lt;void_type 0x401a089c void VOID 
> -        align 8 symtab 0 alias set -1 
> -        pointer_to_this &lt;pointer_type 0x401a0910&gt;&gt; 
> -    side-effects public 
> -    arg 0 &lt;bind_expr 0x401a28e0 type &lt;void_type 0x401a089c void&gt; 
> -        side-effects 
> -        vars &lt;var_decl 0x401c3910 T.1 type &lt;integer_type 0x40199414 int&gt; 
> -            used SI file one.c line 10 
> -            size &lt;integer_cst 0x401964e0 constant 32&gt; 
> -            unit size &lt;integer_cst 0x40196580 constant 4&gt; 
> -            align 32 context &lt;function_decl 0x401c34fc foo&gt; chain &lt;var_decl 0x401c3984 T.2&gt;&gt; 
> -        body &lt;compound_expr 0x401a2960 type &lt;void_type 0x401a089c void&gt; 
> -            side-effects 
> -            arg 0 &lt;expr_with_file_location 0x401a2ac0 type &lt;void_type 0x401a089c void&gt; 
> -                side-effects public 
> -                arg 0 &lt;init_expr 0x401a2900 type &lt;void_type 0x401a089c void&gt; 
> -                    side-effects arg 0 &lt;var_decl 0x401c36cc i&gt; 
> -                    arg 1 &lt;integer_cst 0x401a2780 constant 0&gt;&gt; 
> -                arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
> -                one.c:3:0&gt; 
> -            arg 1 &lt;compound_expr 0x401a29a0 type &lt;void_type 0x401a089c void&gt; 
> -                side-effects 
> -                arg 0 &lt;expr_with_file_location 0x401a2b60 type &lt;integer_type 0x40199414 int&gt; 
> -                    side-effects public 
> -                    arg 0 &lt;modify_expr 0x401a2b20 type &lt;integer_type 0x40199414 int&gt; 
> -                        side-effects arg 0 &lt;var_decl 0x401c36cc i&gt; 
> -                        arg 1 &lt;plus_expr 0x401a2b00 type &lt;integer_type 0x40199414 int&gt; 
> -                            arg 0 &lt;var_decl 0x401c36cc i&gt; arg 1 &lt;integer_cst 0x40196c20 1&gt;&gt;&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
> -                    one.c:4:0&gt; 
> -                arg 1 &lt;compound_expr 0x401a2a40 type &lt;void_type 0x401a089c void&gt; 
> -                    side-effects 
> -                    arg 0 &lt;expr_with_file_location 0x401a2980 type &lt;integer_type 0x40199414 int&gt; 
> -                        side-effects public 
> -                        arg 0 &lt;call_expr 0x401a27c0 type &lt;integer_type 0x40199414 int&gt; 
> -                            side-effects arg 0 &lt;addr_expr 0x401b35d0&gt;&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
> -                        one.c:5:0&gt; 
> -                    arg 1 &lt;compound_expr 0x401a2a80 type &lt;void_type 0x401a089c void&gt; 
> -                        side-effects 
> -                        arg 0 &lt;expr_with_file_location 0x401a2a20 type &lt;void_type 0x401a089c void&gt; 
> -                            side-effects public arg 0 &lt;cond_expr 0x401a2a00&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
> -                            one.c:7:0&gt; 
> -                        arg 1 &lt;expr_with_file_location 0x401a2a60 type &lt;void_type 0x401a089c void&gt; 
> -                            side-effects public arg 0 &lt;return_expr 0x401b3768&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
> -                            one.c:12:0&gt;&gt;&gt;&gt;&gt; 
> -        block &lt;block 0x40198294 used vars &lt;var_decl 0x401c36cc i&gt; 
> -            supercontext &lt;block 0x401982c0 used supercontext &lt;function_decl 0x401c34fc foo&gt; subblocks &lt;block 0x40198294&gt;&gt;&gt;&gt; 
> -    arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
> -    one.c:3:0&gt; 
> -TB&gt;  
> -</pre>
> -
> -<p>An interesting thing to remark in this dumping is that a node is
> -represented as a well parenthesized expression.  Each tree node contains
> -several fields that are in general aligned at the same indentation level.  
> -For example BIND_EXPR has a child called vars (a set of variabl
> -definitions), a body, and a block.  All these fields are accessible from
> -Tree Browser.</p>
> -
> -<p>Thus if we continue our exploration of the current tree structure,</p>
> -
> -<pre class="smallexample">
> -TB&gt; arg0 
> -{ 
> -  int T.1; 
> -  int T.2; 
> -  int i; 
> -  extern  koo; 
> -  extern  bar; 
> -  extern  toons; 
> - 
> -  i = 0, i = i + 1, koo (), if (i != 0) 
> -    { 
> -      bar (i) 
> -    } 
> -  else 
> -    { 
> -      T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -    }, return i; 
> -} 
> -TB&gt; body 
> -i = 0, i = i + 1, koo (), if (i != 0) 
> -  { 
> -    bar (i) 
> -  } 
> -else 
> -  { 
> -    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -  }, return i; 
> -TB&gt; 
> -</pre>
> -
> -<p>Here I have to write some notes on the current chaining of expressions
> -procedure.  A compound_expr contains two operands: arg0 the child that
> -contains the expression and arg1 the child that contains the rest of the
> -list of expressions.  In arg0 GCC stores an expr_with_file_location node
> -that contains the expression and an information about the position of this
> -expression in the original source code.</p>
> -
> -<p>For accessing the next expression you can use the next command:</p>
> -
> -<pre class="smallexample">
> -TB&gt; nx 
> -i = i + 1, koo (), if (i != 0) 
> -  { 
> -    bar (i) 
> -  } 
> -else 
> -  { 
> -    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -  }, return i; 
> -TB&gt; nx 
> -koo (), if (i != 0) 
> -  { 
> -    bar (i) 
> -  } 
> -else 
> -  { 
> -    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -  }, return i; 
> -TB&gt; nx 
> -if (i != 0) 
> -  { 
> -    bar (i) 
> -  } 
> -else 
> -  { 
> -    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -  }, return i; 
> -TB&gt;  
> -</pre>
> -
> -<p>You can choose to go backwards via the history stack: this pops the
> -last visited node from the stack.</p>
> -
> -<pre class="smallexample">
> -TB&gt; hpr 
> -koo (), if (i != 0) 
> -  { 
> -    bar (i) 
> -  } 
> -else 
> -  { 
> -    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -  }, return i; 
> -TB&gt;  
> -</pre>
> -
> -<p>Or via the previous expression command (this information is not
> -yet included in GCC's trees, Tree Browser stores it in a hash table):</p>
> -
> -<pre class="smallexample">
> -TB&gt; pr 
> -i = i + 1, koo (), if (i != 0) 
> -  { 
> -    bar (i) 
> -  } 
> -else 
> -  { 
> -    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
> -  }, return i; 
> -TB&gt;  
> -</pre>
> -
> -    <h1> Extensions </h1>
> -
> -<p>Some extensions could be added in the near future, such as including
> -commands that allows you to modify tree structure, apply optimizations
> -locally on a given node.</p>
> -
> -<p>A more interesting but much more long term project is to write 
> -an interactive program editor/optimizer, but for the moment this is only 
> -science fiction... :-)</p>
> -    
> -  </body>
> -</html>
Gerald Pfeifer July 9, 2020, 8:49 a.m. UTC | #2
On Thu, 9 Jul 2020, Richard Sandiford wrote:
>> I'm trying Tree Browser during debugging, but failed.
>> I found that tree-browser.c and tree-browser.def have been
>> removed at 2015-07-25. So, to avoid misunderstanding,
>> can we remove this tree-browser page too?
> Thanks for the patch.  Seems like a good idea to me.  I guess the only
> question is whether we should keep it around for historical purposes,
> but with a big banner to say that it's no longer up-to-date.  I also
> don't know whether we try to avoid 404s on old pages.

Thank you, Hujp and Richard!

We generally try to avoid 404s.  So in case we remove a page put in
a redirect. You can do so via a new entry in wwwdocs/htdocs/.htaccess 
(which I believe is self explanatory, and I'm happy to help, too).

My recommendation in a case like this is to follow the approach of
adding a big banner at the top as you suggest, Richard. That said,
if the consensus by you/those working in this area is to completely
remove the page, that is perfectly fine, too.

Gerald
Hu, Jiangping July 13, 2020, 2:49 a.m. UTC | #3
> On Thu, 9 Jul 2020, Richard Sandiford wrote:
> >> I'm trying Tree Browser during debugging, but failed.
> >> I found that tree-browser.c and tree-browser.def have been removed at
> >> 2015-07-25. So, to avoid misunderstanding, can we remove this
> >> tree-browser page too?
> > Thanks for the patch.  Seems like a good idea to me.  I guess the only
> > question is whether we should keep it around for historical purposes,
> > but with a big banner to say that it's no longer up-to-date.  I also
> > don't know whether we try to avoid 404s on old pages.
> 
> Thank you, Hujp and Richard!
> 
> We generally try to avoid 404s.  So in case we remove a page put in a redirect.
> You can do so via a new entry in wwwdocs/htdocs/.htaccess (which I believe is
> self explanatory, and I'm happy to help, too).
> 
Thank you, Richard and Gerald!

Since the tree-ssa/index.html and tree-ssa/tree_browser.html are no longer
up-to-date, I think it may be better to add a redirect than to update.
Is there a page means the page which was redirected is no longer up-to-date?
Or just redirect to index.html itself as the following, it's OK?

Regards.
Hujp

---
diff --git a/htdocs/.htaccess b/htdocs/.htaccess
index 18997d63..67ee474f 100644
--- a/htdocs/.htaccess
+++ b/htdocs/.htaccess
@@ -67,6 +67,7 @@ Redirect permanent /proj-optimize.html                https://gcc.gnu.org/projects/optimize.ht
 Redirect permanent /projects.html              https://gcc.gnu.org/projects/
 Redirect permanent /projects/cxx1z.html                https://gcc.gnu.org/projects/cxx-status.html#cxx1z
 Redirect permanent /projects/web.html          https://gcc.gnu.org/about.html
+Redirect permanent /projects/tree-ssa/tree-browser.html        https://gcc.gnu.org/projects/tree-ssa/
 Redirect permanent /reghunt-howto.html         https://gcc.gnu.org/bugs/reghunt.html
 Redirect permanent /svn.html                   https://gcc.gnu.org/git.html
 Redirect permanent /svnwrite.html              https://gcc.gnu.org/gitwrite.html
--

> My recommendation in a case like this is to follow the approach of adding a big
> banner at the top as you suggest, Richard. That said, if the consensus by
> you/those working in this area is to completely remove the page, that is
> perfectly fine, too.
> 
> Gerald
>
diff mbox series

Patch

diff --git a/htdocs/projects/tree-ssa/index.html b/htdocs/projects/tree-ssa/index.html
index a15d0f32..930df390 100644
--- a/htdocs/projects/tree-ssa/index.html
+++ b/htdocs/projects/tree-ssa/index.html
@@ -21,7 +21,6 @@ 
 <li><a href="#gimple">GENERIC and GIMPLE</a></li>
 <li><a href="#ssa">SSA implementation</a></li>
 <li><a href="#unparse">Unparsing GENERIC trees</a></li>
-<li><a href="#tb">Tree Browser</a></li>
 <li><a href="#status">Implementation Status (last updated: 2003-11-22)</a></li>
 <li><a href="#todo">TODO list (last updated: 2003-12-27)</a></li>
 </ul>
@@ -221,11 +220,6 @@  functions that given a GENERIC tree node, they print a C representation of
 the tree.  The output is not meant to be compilable, but it is of great
 help when debugging transformations done by the transformation passes.</p>
 
-<hr />
-<h2 id="tb">Tree Browser</h2>
-For debugging, browsing, discovering, and playing with trees you can
-use the <a href="tree-browser.html">Tree Browser</a> directly from gdb.
-
 <hr />
 <h2 id="status">Implementation Status</h2>
 
diff --git a/htdocs/projects/tree-ssa/tree-browser.html b/htdocs/projects/tree-ssa/tree-browser.html
deleted file mode 100644
index ce95a103..00000000
--- a/htdocs/projects/tree-ssa/tree-browser.html
+++ /dev/null
@@ -1,306 +0,0 @@ 
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>Tree Browser</title>
-<link rel="stylesheet" type="text/css" href="https://gcc.gnu.org/gcc.css" />
-</head>
-  
-  <body>
-    <h1>Tree Browser</h1>
-    
-<p>Until recently the only way to debug trees from gdb was to call
-debug_tree as follows:</p>
-    
-<pre class="smallexample">
-(gdb) p debug_tree (current_function_decl) 
-</pre>
-
-<p>An alternative for interactively scan tree structures is to use the
-Tree Browser.  You can access Tree Browser from anywhere during a debugging
-session as follows:</p>
-
-<pre class="smallexample">
-(gdb) p browse_tree (current_function_decl)
- 
-Tree Browser 
-foo 
-Up/prev expressions updated. 
-TB&gt; 
-</pre>
-
-<p>For listing available commands, you could try:</p>
-
-<pre class="smallexample">
-TB&gt; h 
-Possible commands are: 
- 
-                   x  -  Exits tree-browser. 
-                   q  -  Exits tree-browser. 
-                   h  -  Prints this help message. 
-              update  -  Update information about parent expressions. 
-             verbose  -  Sets/unsets verbose mode (default is on). 
-                 fun  -  Go to the current function declaration. 
-                  nx  -  Go to the next expression in a BIND_EXPR. 
-                  pr  -  Go to the previous expression in a BIND_EXPR. 
-                  up  -  Go to the parent tree node. 
-                last  -  Go to the last expression in a BIND_EXPR. 
-               first  -  Go to the first expression in a BIND_EXPR. 
-                 hpr  -  Go to the previous visited node (history previous). 
-                arg0  -  Child 0. 
-                arg1  -  Child 1. 
-                arg2  -  Child 2. 
-                arg3  -  Child 3. 
-     decl_saved_tree  -  Body of a function. 
-                type  -  Field accessor. 
-                size  -  Field accessor. 
-           unit_size  -  Field accessor. 
-              offset  -  Field accessor. 
-          bit_offset  -  Field accessor. 
-             context  -  Field accessor. 
-          attributes  -  Field accessor. 
-     abstract_origin  -  Field accessor. 
-           arguments  -  Field accessor. 
-              result  -  Field accessor. 
-             initial  -  Field accessor. 
-            arg-type  -  Field accessor. 
- arg-type-as-written  -  Field accessor. 
-               chain  -  Field accessor. 
-              values  -  Field accessor. 
-              domain  -  Field accessor. 
-     method_basetype  -  Field accessor. 
-              fields  -  Field accessor. 
-           arg-types  -  Field accessor. 
-            basetype  -  Field accessor. 
-     pointer_to_this  -  Field accessor. 
-   reference_to_this  -  Field accessor. 
-                vars  -  Field accessor. 
-        supercontext  -  Field accessor. 
-                body  -  Field accessor. 
-           subblocks  -  Field accessor. 
-               block  -  Field accessor. 
-                real  -  Field accessor. 
-                imag  -  Field accessor. 
-             purpose  -  Field accessor. 
-               value  -  Field accessor. 
-                 elt  -  Field accessor. 
-                 min  -  Field accessor. 
-                 max  -  Field accessor. 
-                  sc  -  Search a node having a TREE_CODE given as a parameter. 
-                  sn  -  Search an identifier having a name given as a parameter. 
-                  pp  -  Pretty print current node. 
-                   p  -  Prints the current node. 
-TB&gt;  
-</pre>
-
-<p>Note that this list of commands is susceptible to change, since this
-is a pretty new tool and is still in development.</p>
-    
-<p>Now let's try some of these commands: we're on the declaration of the
-current function, we can have a look at its body.</p>
-
-<pre class="smallexample">
-TB&gt; decl_saved_tree 
-{ 
-  int T.1; 
-  int T.2; 
-  int i; 
-  extern  koo; 
-  extern  bar; 
-  extern  toons; 
- 
-  i = 0, i = i + 1, koo (), if (i != 0) 
-    { 
-      bar (i) 
-    } 
-  else 
-    { 
-      T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-    }, return i; 
-} 
-TB&gt;  
-</pre>
-
-<p>The above output is a pretty-print of the body of the current function.
-A call to debug_tree would have printed more things about the structure of
-the Abstract Syntax Trees (AST), as follows:</p>
-
-<pre class="smallexample">
-TB&gt; p 
- &lt;expr_with_file_location 0x401a2aa0 
-    type &lt;void_type 0x401a089c void VOID 
-        align 8 symtab 0 alias set -1 
-        pointer_to_this &lt;pointer_type 0x401a0910&gt;&gt; 
-    side-effects public 
-    arg 0 &lt;bind_expr 0x401a28e0 type &lt;void_type 0x401a089c void&gt; 
-        side-effects 
-        vars &lt;var_decl 0x401c3910 T.1 type &lt;integer_type 0x40199414 int&gt; 
-            used SI file one.c line 10 
-            size &lt;integer_cst 0x401964e0 constant 32&gt; 
-            unit size &lt;integer_cst 0x40196580 constant 4&gt; 
-            align 32 context &lt;function_decl 0x401c34fc foo&gt; chain &lt;var_decl 0x401c3984 T.2&gt;&gt; 
-        body &lt;compound_expr 0x401a2960 type &lt;void_type 0x401a089c void&gt; 
-            side-effects 
-            arg 0 &lt;expr_with_file_location 0x401a2ac0 type &lt;void_type 0x401a089c void&gt; 
-                side-effects public 
-                arg 0 &lt;init_expr 0x401a2900 type &lt;void_type 0x401a089c void&gt; 
-                    side-effects arg 0 &lt;var_decl 0x401c36cc i&gt; 
-                    arg 1 &lt;integer_cst 0x401a2780 constant 0&gt;&gt; 
-                arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
-                one.c:3:0&gt; 
-            arg 1 &lt;compound_expr 0x401a29a0 type &lt;void_type 0x401a089c void&gt; 
-                side-effects 
-                arg 0 &lt;expr_with_file_location 0x401a2b60 type &lt;integer_type 0x40199414 int&gt; 
-                    side-effects public 
-                    arg 0 &lt;modify_expr 0x401a2b20 type &lt;integer_type 0x40199414 int&gt; 
-                        side-effects arg 0 &lt;var_decl 0x401c36cc i&gt; 
-                        arg 1 &lt;plus_expr 0x401a2b00 type &lt;integer_type 0x40199414 int&gt; 
-                            arg 0 &lt;var_decl 0x401c36cc i&gt; arg 1 &lt;integer_cst 0x40196c20 1&gt;&gt;&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
-                    one.c:4:0&gt; 
-                arg 1 &lt;compound_expr 0x401a2a40 type &lt;void_type 0x401a089c void&gt; 
-                    side-effects 
-                    arg 0 &lt;expr_with_file_location 0x401a2980 type &lt;integer_type 0x40199414 int&gt; 
-                        side-effects public 
-                        arg 0 &lt;call_expr 0x401a27c0 type &lt;integer_type 0x40199414 int&gt; 
-                            side-effects arg 0 &lt;addr_expr 0x401b35d0&gt;&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
-                        one.c:5:0&gt; 
-                    arg 1 &lt;compound_expr 0x401a2a80 type &lt;void_type 0x401a089c void&gt; 
-                        side-effects 
-                        arg 0 &lt;expr_with_file_location 0x401a2a20 type &lt;void_type 0x401a089c void&gt; 
-                            side-effects public arg 0 &lt;cond_expr 0x401a2a00&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
-                            one.c:7:0&gt; 
-                        arg 1 &lt;expr_with_file_location 0x401a2a60 type &lt;void_type 0x401a089c void&gt; 
-                            side-effects public arg 0 &lt;return_expr 0x401b3768&gt; arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
-                            one.c:12:0&gt;&gt;&gt;&gt;&gt; 
-        block &lt;block 0x40198294 used vars &lt;var_decl 0x401c36cc i&gt; 
-            supercontext &lt;block 0x401982c0 used supercontext &lt;function_decl 0x401c34fc foo&gt; subblocks &lt;block 0x40198294&gt;&gt;&gt;&gt; 
-    arg 1 &lt;identifier_node 0x401c6480 one.c&gt; 
-    one.c:3:0&gt; 
-TB&gt;  
-</pre>
-
-<p>An interesting thing to remark in this dumping is that a node is
-represented as a well parenthesized expression.  Each tree node contains
-several fields that are in general aligned at the same indentation level.  
-For example BIND_EXPR has a child called vars (a set of variabl
-definitions), a body, and a block.  All these fields are accessible from
-Tree Browser.</p>
-
-<p>Thus if we continue our exploration of the current tree structure,</p>
-
-<pre class="smallexample">
-TB&gt; arg0 
-{ 
-  int T.1; 
-  int T.2; 
-  int i; 
-  extern  koo; 
-  extern  bar; 
-  extern  toons; 
- 
-  i = 0, i = i + 1, koo (), if (i != 0) 
-    { 
-      bar (i) 
-    } 
-  else 
-    { 
-      T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-    }, return i; 
-} 
-TB&gt; body 
-i = 0, i = i + 1, koo (), if (i != 0) 
-  { 
-    bar (i) 
-  } 
-else 
-  { 
-    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-  }, return i; 
-TB&gt; 
-</pre>
-
-<p>Here I have to write some notes on the current chaining of expressions
-procedure.  A compound_expr contains two operands: arg0 the child that
-contains the expression and arg1 the child that contains the rest of the
-list of expressions.  In arg0 GCC stores an expr_with_file_location node
-that contains the expression and an information about the position of this
-expression in the original source code.</p>
-
-<p>For accessing the next expression you can use the next command:</p>
-
-<pre class="smallexample">
-TB&gt; nx 
-i = i + 1, koo (), if (i != 0) 
-  { 
-    bar (i) 
-  } 
-else 
-  { 
-    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-  }, return i; 
-TB&gt; nx 
-koo (), if (i != 0) 
-  { 
-    bar (i) 
-  } 
-else 
-  { 
-    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-  }, return i; 
-TB&gt; nx 
-if (i != 0) 
-  { 
-    bar (i) 
-  } 
-else 
-  { 
-    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-  }, return i; 
-TB&gt;  
-</pre>
-
-<p>You can choose to go backwards via the history stack: this pops the
-last visited node from the stack.</p>
-
-<pre class="smallexample">
-TB&gt; hpr 
-koo (), if (i != 0) 
-  { 
-    bar (i) 
-  } 
-else 
-  { 
-    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-  }, return i; 
-TB&gt;  
-</pre>
-
-<p>Or via the previous expression command (this information is not
-yet included in GCC's trees, Tree Browser stores it in a hash table):</p>
-
-<pre class="smallexample">
-TB&gt; pr 
-i = i + 1, koo (), if (i != 0) 
-  { 
-    bar (i) 
-  } 
-else 
-  { 
-    T.1 = i * 3, T.2 = i + T.1, toons (T.2) 
-  }, return i; 
-TB&gt;  
-</pre>
-
-    <h1> Extensions </h1>
-
-<p>Some extensions could be added in the near future, such as including
-commands that allows you to modify tree structure, apply optimizations
-locally on a given node.</p>
-
-<p>A more interesting but much more long term project is to write 
-an interactive program editor/optimizer, but for the moment this is only 
-science fiction... :-)</p>
-    
-  </body>
-</html>