Message ID | 20200707085829.1459-1-hujiangping@cn.fujitsu.com |
---|---|
State | New |
Headers | show |
Series | [wwwdocs] remove tree-browser page and links | expand |
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> > -</pre> > - > -<p>For listing available commands, you could try:</p> > - > -<pre class="smallexample"> > -TB> 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> > -</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> 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> > -</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> p > - <expr_with_file_location 0x401a2aa0 > - type <void_type 0x401a089c void VOID > - align 8 symtab 0 alias set -1 > - pointer_to_this <pointer_type 0x401a0910>> > - side-effects public > - arg 0 <bind_expr 0x401a28e0 type <void_type 0x401a089c void> > - side-effects > - vars <var_decl 0x401c3910 T.1 type <integer_type 0x40199414 int> > - used SI file one.c line 10 > - size <integer_cst 0x401964e0 constant 32> > - unit size <integer_cst 0x40196580 constant 4> > - align 32 context <function_decl 0x401c34fc foo> chain <var_decl 0x401c3984 T.2>> > - body <compound_expr 0x401a2960 type <void_type 0x401a089c void> > - side-effects > - arg 0 <expr_with_file_location 0x401a2ac0 type <void_type 0x401a089c void> > - side-effects public > - arg 0 <init_expr 0x401a2900 type <void_type 0x401a089c void> > - side-effects arg 0 <var_decl 0x401c36cc i> > - arg 1 <integer_cst 0x401a2780 constant 0>> > - arg 1 <identifier_node 0x401c6480 one.c> > - one.c:3:0> > - arg 1 <compound_expr 0x401a29a0 type <void_type 0x401a089c void> > - side-effects > - arg 0 <expr_with_file_location 0x401a2b60 type <integer_type 0x40199414 int> > - side-effects public > - arg 0 <modify_expr 0x401a2b20 type <integer_type 0x40199414 int> > - side-effects arg 0 <var_decl 0x401c36cc i> > - arg 1 <plus_expr 0x401a2b00 type <integer_type 0x40199414 int> > - arg 0 <var_decl 0x401c36cc i> arg 1 <integer_cst 0x40196c20 1>>> arg 1 <identifier_node 0x401c6480 one.c> > - one.c:4:0> > - arg 1 <compound_expr 0x401a2a40 type <void_type 0x401a089c void> > - side-effects > - arg 0 <expr_with_file_location 0x401a2980 type <integer_type 0x40199414 int> > - side-effects public > - arg 0 <call_expr 0x401a27c0 type <integer_type 0x40199414 int> > - side-effects arg 0 <addr_expr 0x401b35d0>> arg 1 <identifier_node 0x401c6480 one.c> > - one.c:5:0> > - arg 1 <compound_expr 0x401a2a80 type <void_type 0x401a089c void> > - side-effects > - arg 0 <expr_with_file_location 0x401a2a20 type <void_type 0x401a089c void> > - side-effects public arg 0 <cond_expr 0x401a2a00> arg 1 <identifier_node 0x401c6480 one.c> > - one.c:7:0> > - arg 1 <expr_with_file_location 0x401a2a60 type <void_type 0x401a089c void> > - side-effects public arg 0 <return_expr 0x401b3768> arg 1 <identifier_node 0x401c6480 one.c> > - one.c:12:0>>>>> > - block <block 0x40198294 used vars <var_decl 0x401c36cc i> > - supercontext <block 0x401982c0 used supercontext <function_decl 0x401c34fc foo> subblocks <block 0x40198294>>>> > - arg 1 <identifier_node 0x401c6480 one.c> > - one.c:3:0> > -TB> > -</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> 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> 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> > -</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> 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> nx > -koo (), if (i != 0) > - { > - bar (i) > - } > -else > - { > - T.1 = i * 3, T.2 = i + T.1, toons (T.2) > - }, return i; > -TB> nx > -if (i != 0) > - { > - bar (i) > - } > -else > - { > - T.1 = i * 3, T.2 = i + T.1, toons (T.2) > - }, return i; > -TB> > -</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> hpr > -koo (), if (i != 0) > - { > - bar (i) > - } > -else > - { > - T.1 = i * 3, T.2 = i + T.1, toons (T.2) > - }, return i; > -TB> > -</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> 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> > -</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>
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
> 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 --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> -</pre> - -<p>For listing available commands, you could try:</p> - -<pre class="smallexample"> -TB> 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> -</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> 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> -</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> p - <expr_with_file_location 0x401a2aa0 - type <void_type 0x401a089c void VOID - align 8 symtab 0 alias set -1 - pointer_to_this <pointer_type 0x401a0910>> - side-effects public - arg 0 <bind_expr 0x401a28e0 type <void_type 0x401a089c void> - side-effects - vars <var_decl 0x401c3910 T.1 type <integer_type 0x40199414 int> - used SI file one.c line 10 - size <integer_cst 0x401964e0 constant 32> - unit size <integer_cst 0x40196580 constant 4> - align 32 context <function_decl 0x401c34fc foo> chain <var_decl 0x401c3984 T.2>> - body <compound_expr 0x401a2960 type <void_type 0x401a089c void> - side-effects - arg 0 <expr_with_file_location 0x401a2ac0 type <void_type 0x401a089c void> - side-effects public - arg 0 <init_expr 0x401a2900 type <void_type 0x401a089c void> - side-effects arg 0 <var_decl 0x401c36cc i> - arg 1 <integer_cst 0x401a2780 constant 0>> - arg 1 <identifier_node 0x401c6480 one.c> - one.c:3:0> - arg 1 <compound_expr 0x401a29a0 type <void_type 0x401a089c void> - side-effects - arg 0 <expr_with_file_location 0x401a2b60 type <integer_type 0x40199414 int> - side-effects public - arg 0 <modify_expr 0x401a2b20 type <integer_type 0x40199414 int> - side-effects arg 0 <var_decl 0x401c36cc i> - arg 1 <plus_expr 0x401a2b00 type <integer_type 0x40199414 int> - arg 0 <var_decl 0x401c36cc i> arg 1 <integer_cst 0x40196c20 1>>> arg 1 <identifier_node 0x401c6480 one.c> - one.c:4:0> - arg 1 <compound_expr 0x401a2a40 type <void_type 0x401a089c void> - side-effects - arg 0 <expr_with_file_location 0x401a2980 type <integer_type 0x40199414 int> - side-effects public - arg 0 <call_expr 0x401a27c0 type <integer_type 0x40199414 int> - side-effects arg 0 <addr_expr 0x401b35d0>> arg 1 <identifier_node 0x401c6480 one.c> - one.c:5:0> - arg 1 <compound_expr 0x401a2a80 type <void_type 0x401a089c void> - side-effects - arg 0 <expr_with_file_location 0x401a2a20 type <void_type 0x401a089c void> - side-effects public arg 0 <cond_expr 0x401a2a00> arg 1 <identifier_node 0x401c6480 one.c> - one.c:7:0> - arg 1 <expr_with_file_location 0x401a2a60 type <void_type 0x401a089c void> - side-effects public arg 0 <return_expr 0x401b3768> arg 1 <identifier_node 0x401c6480 one.c> - one.c:12:0>>>>> - block <block 0x40198294 used vars <var_decl 0x401c36cc i> - supercontext <block 0x401982c0 used supercontext <function_decl 0x401c34fc foo> subblocks <block 0x40198294>>>> - arg 1 <identifier_node 0x401c6480 one.c> - one.c:3:0> -TB> -</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> 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> 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> -</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> 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> nx -koo (), if (i != 0) - { - bar (i) - } -else - { - T.1 = i * 3, T.2 = i + T.1, toons (T.2) - }, return i; -TB> nx -if (i != 0) - { - bar (i) - } -else - { - T.1 = i * 3, T.2 = i + T.1, toons (T.2) - }, return i; -TB> -</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> hpr -koo (), if (i != 0) - { - bar (i) - } -else - { - T.1 = i * 3, T.2 = i + T.1, toons (T.2) - }, return i; -TB> -</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> 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> -</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>