Expression-trees.html 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>GNU Compiler Collection (GCC) Internals: Expression trees</title>
  20. <meta name="description" content="GNU Compiler Collection (GCC) Internals: Expression trees">
  21. <meta name="keywords" content="GNU Compiler Collection (GCC) Internals: Expression trees">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="GENERIC.html#GENERIC" rel="up" title="GENERIC">
  30. <link href="Constant-expressions.html#Constant-expressions" rel="next" title="Constant expressions">
  31. <link href="Attributes.html#Attributes" rel="prev" title="Attributes">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style:oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="Expression-trees"></a>
  63. <div class="header">
  64. <p>
  65. Next: <a href="Statements.html#Statements" accesskey="n" rel="next">Statements</a>, Previous: <a href="Attributes.html#Attributes" accesskey="p" rel="prev">Attributes</a>, Up: <a href="GENERIC.html#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  66. </div>
  67. <hr>
  68. <a name="Expressions-1"></a>
  69. <h3 class="section">10.6 Expressions</h3>
  70. <a name="index-expression"></a>
  71. <a name="index-TREE_005fTYPE-3"></a>
  72. <a name="index-TREE_005fOPERAND"></a>
  73. <p>The internal representation for expressions is for the most part quite
  74. straightforward. However, there are a few facts that one must bear in
  75. mind. In particular, the expression &ldquo;tree&rdquo; is actually a directed
  76. acyclic graph. (For example there may be many references to the integer
  77. constant zero throughout the source program; many of these will be
  78. represented by the same expression node.) You should not rely on
  79. certain kinds of node being shared, nor should you rely on certain kinds of
  80. nodes being unshared.
  81. </p>
  82. <p>The following macros can be used with all expression nodes:
  83. </p>
  84. <dl compact="compact">
  85. <dt><code>TREE_TYPE</code>
  86. <a name="index-TREE_005fTYPE-4"></a>
  87. </dt>
  88. <dd><p>Returns the type of the expression. This value may not be precisely the
  89. same type that would be given the expression in the original program.
  90. </p></dd>
  91. </dl>
  92. <p>In what follows, some nodes that one might expect to always have type
  93. <code>bool</code> are documented to have either integral or boolean type. At
  94. some point in the future, the C front end may also make use of this same
  95. intermediate representation, and at this point these nodes will
  96. certainly have integral type. The previous sentence is not meant to
  97. imply that the C++ front end does not or will not give these nodes
  98. integral type.
  99. </p>
  100. <p>Below, we list the various kinds of expression nodes. Except where
  101. noted otherwise, the operands to an expression are accessed using the
  102. <code>TREE_OPERAND</code> macro. For example, to access the first operand to
  103. a binary plus expression <code>expr</code>, use:
  104. </p>
  105. <div class="smallexample">
  106. <pre class="smallexample">TREE_OPERAND (expr, 0)
  107. </pre></div>
  108. <p>As this example indicates, the operands are zero-indexed.
  109. </p>
  110. <table class="menu" border="0" cellspacing="0">
  111. <tr><td align="left" valign="top">&bull; <a href="Constant-expressions.html#Constant-expressions" accesskey="1">Constants</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
  112. </td></tr>
  113. <tr><td align="left" valign="top">&bull; <a href="Storage-References.html#Storage-References" accesskey="2">Storage References</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
  114. </td></tr>
  115. <tr><td align="left" valign="top">&bull; <a href="Unary-and-Binary-Expressions.html#Unary-and-Binary-Expressions" accesskey="3">Unary and Binary Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
  116. </td></tr>
  117. <tr><td align="left" valign="top">&bull; <a href="Vectors.html#Vectors" accesskey="4">Vectors</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
  118. </td></tr>
  119. </table>
  120. <hr>
  121. <div class="header">
  122. <p>
  123. Next: <a href="Statements.html#Statements" accesskey="n" rel="next">Statements</a>, Previous: <a href="Attributes.html#Attributes" accesskey="p" rel="prev">Attributes</a>, Up: <a href="GENERIC.html#GENERIC" accesskey="u" rel="up">GENERIC</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  124. </div>
  125. </body>
  126. </html>