Recoverable-Operations.html 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
  2. <html>
  3. <!-- Created on November 8, 2012 by texi2html 1.82
  4. texi2html was written by:
  5. Lionel Cons <[email protected]> (original author)
  6. Karl Berry <[email protected]>
  7. Olaf Bachmann <[email protected]>
  8. and many others.
  9. Maintained by: Many creative people.
  10. Send bugs and suggestions to <[email protected]>
  11. -->
  12. <head>
  13. <title>avram - a virtual machine code interpreter: 3.1.2 Recoverable Operations</title>
  14. <meta name="description" content="avram - a virtual machine code interpreter: 3.1.2 Recoverable Operations">
  15. <meta name="keywords" content="avram - a virtual machine code interpreter: 3.1.2 Recoverable Operations">
  16. <meta name="resource-type" content="document">
  17. <meta name="distribution" content="global">
  18. <meta name="Generator" content="texi2html 1.82">
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <style type="text/css">
  21. <!--
  22. a.summary-letter {text-decoration: none}
  23. blockquote.smallquotation {font-size: smaller}
  24. pre.display {font-family: serif}
  25. pre.format {font-family: serif}
  26. pre.menu-comment {font-family: serif}
  27. pre.menu-preformatted {font-family: serif}
  28. pre.smalldisplay {font-family: serif; font-size: smaller}
  29. pre.smallexample {font-size: smaller}
  30. pre.smallformat {font-family: serif; font-size: smaller}
  31. pre.smalllisp {font-size: smaller}
  32. span.roman {font-family:serif; font-weight:normal;}
  33. span.sansserif {font-family:sans-serif; font-weight:normal;}
  34. ul.toc {list-style: none}
  35. -->
  36. </style>
  37. </head>
  38. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  39. <a name="Recoverable-Operations"></a>
  40. <table cellpadding="1" cellspacing="1" border="0">
  41. <tr><td valign="middle" align="left">[<a href="Simple-Operations.html#Simple-Operations" title="Previous section in reading order"> &lt; </a>]</td>
  42. <td valign="middle" align="left">[<a href="List-Transformations.html#List-Transformations" title="Next section in reading order"> &gt; </a>]</td>
  43. <td valign="middle" align="left"> &nbsp; </td>
  44. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  45. <td valign="middle" align="left">[<a href="Lists.html#Lists" title="Up section"> Up </a>]</td>
  46. <td valign="middle" align="left">[<a href="Character-Table.html#Character-Table" title="Next chapter"> &gt;&gt; </a>]</td>
  47. <td valign="middle" align="left"> &nbsp; </td>
  48. <td valign="middle" align="left"> &nbsp; </td>
  49. <td valign="middle" align="left"> &nbsp; </td>
  50. <td valign="middle" align="left"> &nbsp; </td>
  51. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  52. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  53. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  54. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  55. </tr></table>
  56. <hr size="1">
  57. <a name="Recoverable-Operations-1"></a>
  58. <h3 class="subsection">3.1.2 Recoverable Operations</h3>
  59. <p>The functions in this section are similar to the ones in the previous
  60. section except with regard to error handling. Whereas the other ones
  61. cause an error message to be printed and the process to exit in the
  62. event of an overflow, these return to the caller, whose responsibility
  63. it is to take appropriate action. The functions in both sections are
  64. declared in &lsquo;<tt>lists.h</tt>&rsquo;, and should be preceded by a call to
  65. <code>avm_initialize_lists</code>.
  66. </p>
  67. <dl>
  68. <dt><a name="index-avm_005frecoverable_005fjoin"></a><u>Function:</u> list <b>avm_recoverable_join</b><i> (list <var>left</var>, list <var>right</var>)</i></dt>
  69. <dd><p>This function is similar to <code>avm_join</code>, but will return a
  70. <code>NULL</code> pointer if memory that was needed can not be allocated. A
  71. <code>NULL</code> pointer would never be the result of a join under normal
  72. circumstances, so the overflow can be detected by the caller. Regardless
  73. of whether overflow occurs, the arguments are deallocated by this function
  74. and should not be referenced thereafter.
  75. </p></dd></dl>
  76. <dl>
  77. <dt><a name="index-avm_005frecoverable_005fenqueue"></a><u>Function:</u> void <b>avm_recoverable_enqueue</b><i> (list *<var>front</var>, list *<var>back</var>, list <var>operand</var>, int *<var>fault</var>)</i></dt>
  78. <dd><p>This version of the enqueue function will dispose of the <code><var>operand</var></code> if there
  79. isn&rsquo;t room to append another item and set <code>*<var>fault</var></code> to a non-zero
  80. value. Other than that, it does the same as <code>avm_enqueue</code>.
  81. </p></dd></dl>
  82. <dl>
  83. <dt><a name="index-avm_005frecoverable_005flength"></a><u>Function:</u> counter <b>avm_recoverable_length</b><i> (list <var>operand</var>)</i></dt>
  84. <dd><p>This function checks for arithmetic overflow when calculating the length
  85. of a list, and returns a zero value if overflow occurs. The caller can
  86. detect the error by noting that zero is not the length of any list other
  87. than <code>NULL</code>. This kind of overflow is impossible unless the host
  88. does not have long enough integers for its address space.
  89. </p></dd></dl>
  90. <dl>
  91. <dt><a name="index-avm_005frecoverable_005farea"></a><u>Function:</u> counter <b>avm_recoverable_area</b><i> (list <var>operand</var>, int *<var>fault</var>)</i></dt>
  92. <dd><p>This function is similar to <code>avm_area</code>, except that it reacts
  93. differently to arithmetic overflow. The <code>fault</code> parameter should be
  94. the address of an integer known to the caller, which will be set to a
  95. non-zero value if overflow occurs. In that event, the value of zero will
  96. also be returned for the area. Note that it is possible for non-empty
  97. lists to have an area of zero, so this condition alone is not indicative
  98. of an error.
  99. </p></dd></dl>
  100. <dl>
  101. <dt><a name="index-avm_005frecoverable_005fnatural"></a><u>Function:</u> list <b>avm_recoverable_natural</b><i> (counter <var>number</var>)</i></dt>
  102. <dd><p>This function returns the <code>list</code> representation of a native
  103. unsigned long integer, provided that there is enough memory, similarly to the
  104. <code>avm_natural</code> function. Unlike that function, this one will return
  105. a value of <code>NULL</code> rather than exiting the program in the event of a
  106. memory overflow. The overflow can be detected by the caller insofar as a
  107. <code>NULL</code> <code>list</code> does not represent any number other than zero.
  108. </p></dd></dl>
  109. <hr size="1">
  110. <table cellpadding="1" cellspacing="1" border="0">
  111. <tr><td valign="middle" align="left">[<a href="Simple-Operations.html#Simple-Operations" title="Previous section in reading order"> &lt; </a>]</td>
  112. <td valign="middle" align="left">[<a href="List-Transformations.html#List-Transformations" title="Next section in reading order"> &gt; </a>]</td>
  113. <td valign="middle" align="left"> &nbsp; </td>
  114. <td valign="middle" align="left">[<a href="Library-Reference.html#Library-Reference" title="Beginning of this chapter or previous chapter"> &lt;&lt; </a>]</td>
  115. <td valign="middle" align="left">[<a href="Lists.html#Lists" title="Up section"> Up </a>]</td>
  116. <td valign="middle" align="left">[<a href="Character-Table.html#Character-Table" title="Next chapter"> &gt;&gt; </a>]</td>
  117. <td valign="middle" align="left"> &nbsp; </td>
  118. <td valign="middle" align="left"> &nbsp; </td>
  119. <td valign="middle" align="left"> &nbsp; </td>
  120. <td valign="middle" align="left"> &nbsp; </td>
  121. <td valign="middle" align="left">[<a href="avram.html#Top" title="Cover (top) of document">Top</a>]</td>
  122. <td valign="middle" align="left">[<a href="avram_toc.html#SEC_Contents" title="Table of contents">Contents</a>]</td>
  123. <td valign="middle" align="left">[<a href="Function-Index.html#Function-Index" title="Index">Index</a>]</td>
  124. <td valign="middle" align="left">[<a href="avram_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
  125. </tr></table>
  126. <p>
  127. <font size="-1">
  128. This document was generated on <i>November 8, 2012</i> using <a href="http://www.nongnu.org/texi2html/"><i>texi2html 1.82</i></a>.
  129. </font>
  130. <br>
  131. </p>
  132. </body>
  133. </html>