summary refs log tree commit diff stats
path: root/compiler/semexprs.nim
diff options
context:
space:
mode:
authorBillingsly Wetherfordshire <phowl.mouth@gmail.com>2013-12-23 11:52:11 -0600
committerBillingsly Wetherfordshire <phowl.mouth@gmail.com>2013-12-23 11:52:11 -0600
commitb3057be2c9a2b354ad1244814a2cac3968cc4d65 (patch)
tree199d6f234c1ff6c2bb05fa952bdf85f522788820 /compiler/semexprs.nim
parentc3b3339e779dfe19ed1891295a763aea47981131 (diff)
downloadNim-b3057be2c9a2b354ad1244814a2cac3968cc4d65.tar.gz
Update endians.nim
adds swapEndian16 function
Diffstat (limited to 'compiler/semexprs.nim')
0 files changed, 0 insertions, 0 deletions
103'>103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - same-fringe.mu</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
a { color:#eeeeee; text-decoration: none; }
a:hover { text-decoration: underline; }
* { font-size: 12pt; font-size: 1em; }
.muRecipe { color: #ff8700; }
.Special { color: #c00000; }
.Conceal { color: #4e4e4e; }
.Delimiter { color: #800080; }
.Comment { color: #9090ff; }
.Comment a { color:#0000ee; text-decoration:underline; }
.Constant { color: #00a0a0; }
.LineNr { color: #444444; }
.muControl { color: #c0a020; }
.muData { color: #ffff00; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment"># Another example of continuations: the 'same fringe' problem:</span>
<span id="L2" class="LineNr"> 2 </span><span class="Comment">#   <a href="http://wiki.c2.com/?SameFringeProblem">http://wiki.c2.com/?SameFringeProblem</a></span>
<span id="L3" class="LineNr"> 3 </span><span class="Comment">#</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment"># Expected output:</span>
<span id="L5" class="LineNr"> 5 </span><span class="Comment">#   1</span>
<span id="L6" class="LineNr"> 6 </span><span class="Comment"># (i.e. that the two given trees x and y have the same leaves, in the same</span>
<span id="L7" class="LineNr"> 7 </span><span class="Comment"># order from left to right)</span>
<span id="L8" class="LineNr"> 8 </span>
<span id="L9" class="LineNr"> 9 </span><span class="muData">container</span> <a href='same-fringe.mu.html#L9'>tree</a>:_elem [
<span id="L10" class="LineNr">10 </span>  val:_elem
<span id="L11" class="LineNr">11 </span>  left:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem
<span id="L12" class="LineNr">12 </span>  right:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem
<span id="L13" class="LineNr">13 </span>]
<span id="L14" class="LineNr">14 </span>
<span id="L15" class="LineNr">15 </span><span class="muRecipe">def</span> <a href='same-fringe.mu.html#L15'>main</a> [
<span id="L16" class="LineNr">16 </span>  <span class="Constant">local-scope</span>
<span id="L17" class="LineNr">17 </span>  <span class="Comment"># x: ((a b) c)</span>
<span id="L18" class="LineNr">18 </span>  <span class="Comment"># y: (a (b c))</span>
<span id="L19" class="LineNr">19 </span>  a:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree<span class="Constant"> 3</span>
<span id="L20" class="LineNr">20 </span>  b:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree<span class="Constant"> 4</span>
<span id="L21" class="LineNr">21 </span>  c:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree<span class="Constant"> 5</span>
<span id="L22" class="LineNr">22 </span>  x1:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree a, b
<span id="L23" class="LineNr">23 </span>  x:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree x1, c
<span id="L24" class="LineNr">24 </span>  y1:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree b, c
<span id="L25" class="LineNr">25 </span>  y:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:num <span class="Special">&lt;-</span> new-tree a, y1
<span id="L26" class="LineNr">26 </span>  result:bool <span class="Special">&lt;-</span> <a href='same-fringe.mu.html#L30'>same-fringe</a> x, y
<span id="L27" class="LineNr">27 </span>  $print result <span class="Constant">10/newline</span>
<span id="L28" class="LineNr">28 </span>]
<span id="L29" class="LineNr">29 </span>
<span id="L30" class="LineNr">30 </span><span class="muRecipe">def</span> <a href='same-fringe.mu.html#L30'>same-fringe</a> a:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem, b:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem<span class="muRecipe"> -&gt; </span>result:bool [
<span id="L31" class="LineNr">31 </span>  <span class="Constant">local-scope</span>
<span id="L32" class="LineNr">32 </span>  <span class="Constant">load-inputs</span>
<span id="L33" class="LineNr">33 </span>  k1:continuation <span class="Special">&lt;-</span> call-with-continuation-mark <a href='same-fringe.mu.html#L48'>process</a>, a
<span id="L34" class="LineNr">34 </span>  k2:continuation <span class="Special">&lt;-</span> call-with-continuation-mark <a href='same-fringe.mu.html#L48'>process</a>, b
<span id="L35" class="LineNr">35 </span>  <span class="Delimiter">{</span>
<span id="L36" class="LineNr">36 </span>  <span class="Conceal">¦</span> k1, x:_elem, a-done?:bool <span class="Special">&lt;-</span> call k1
<span id="L37" class="LineNr">37 </span>  <span class="Conceal">¦</span> k2, y:_elem, b-done?:bool <span class="Special">&lt;-</span> call k2
<span id="L38" class="LineNr">38 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> a-done?
<span id="L39" class="LineNr">39 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> b-done?
<span id="L40" class="LineNr">40 </span>  <span class="Conceal">¦</span> match?:bool <span class="Special">&lt;-</span> equal x, y
<span id="L41" class="LineNr">41 </span>  <span class="Conceal">¦</span> <span class="muControl">return-unless</span> match?, <span class="Constant">0/false</span>
<span id="L42" class="LineNr">42 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L43" class="LineNr">43 </span>  <span class="Delimiter">}</span>
<span id="L44" class="LineNr">44 </span>  result <span class="Special">&lt;-</span> and a-done?, b-done?
<span id="L45" class="LineNr">45 </span>]
<span id="L46" class="LineNr">46 </span>
<span id="L47" class="LineNr">47 </span><span class="Comment"># harness around traversal</span>
<span id="L48" class="LineNr">48 </span><span class="muRecipe">def</span> <a href='same-fringe.mu.html#L48'>process</a> t:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem [
<span id="L49" class="LineNr">49 </span>  <span class="Constant">local-scope</span>
<span id="L50" class="LineNr">50 </span>  <span class="Constant">load-inputs</span>
<span id="L51" class="LineNr">51 </span>  return-continuation-until-mark  <span class="Comment"># initial</span>
<span id="L52" class="LineNr">52 </span>  <a href='same-fringe.mu.html#L59'>traverse</a> t
<span id="L53" class="LineNr">53 </span>  zero-val:&amp;:_elem <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>
<span id="L54" class="LineNr">54 </span>  return-continuation-until-mark *zero-val, <span class="Constant">1/done</span>  <span class="Comment"># final</span>
<span id="L55" class="LineNr">55 </span>  assert <span class="Constant">0/false</span>, <span class="Constant">[continuation called past done]</span>
<span id="L56" class="LineNr">56 </span>]
<span id="L57" class="LineNr">57 </span>
<span id="L58" class="LineNr">58 </span><span class="Comment"># core traversal</span>
<span id="L59" class="LineNr">59 </span><span class="muRecipe">def</span> <a href='same-fringe.mu.html#L59'>traverse</a> t:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem [
<span id="L60" class="LineNr">60 </span>  <span class="Constant">local-scope</span>
<span id="L61" class="LineNr">61 </span>  <span class="Constant">load-inputs</span>
<span id="L62" class="LineNr">62 </span>  <span class="muControl">return-unless</span> t
<span id="L63" class="LineNr">63 </span>  l:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem <span class="Special">&lt;-</span> get *t, <span class="Constant">left:offset</span>
<span id="L64" class="LineNr">64 </span>  <a href='same-fringe.mu.html#L59'>traverse</a> l
<span id="L65" class="LineNr">65 </span>  r:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem <span class="Special">&lt;-</span> get *t, <span class="Constant">right:offset</span>
<span id="L66" class="LineNr">66 </span>  <a href='same-fringe.mu.html#L59'>traverse</a> r
<span id="L67" class="LineNr">67 </span>  <span class="muControl">return-if</span> l
<span id="L68" class="LineNr">68 </span>  <span class="muControl">return-if</span> r
<span id="L69" class="LineNr">69 </span>  <span class="Comment"># leaf</span>
<span id="L70" class="LineNr">70 </span>  v:_elem <span class="Special">&lt;-</span> get *t, <span class="Constant">val:offset</span>
<span id="L71" class="LineNr">71 </span>  return-continuation-until-mark v, <span class="Constant">0/not-done</span>
<span id="L72" class="LineNr">72 </span>]
<span id="L73" class="LineNr">73 </span>
<span id="L74" class="LineNr">74 </span><span class="Comment"># details</span>
<span id="L75" class="LineNr">75 </span>
<span id="L76" class="LineNr">76 </span><span class="muRecipe">def</span> new-tree x:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem [
<span id="L77" class="LineNr">77 </span>  <span class="Constant">local-scope</span>
<span id="L78" class="LineNr">78 </span>  <span class="Constant">load-inputs</span>
<span id="L79" class="LineNr">79 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(tree _elem): type<span class="Delimiter">}</span>
<span id="L80" class="LineNr">80 </span>  put *result, <span class="Constant">val:offset</span>, x
<span id="L81" class="LineNr">81 </span>]
<span id="L82" class="LineNr">82 </span>
<span id="L83" class="LineNr">83 </span><span class="muRecipe">def</span> new-tree l:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem, r:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='same-fringe.mu.html#L9'>tree</a>:_elem [
<span id="L84" class="LineNr">84 </span>  <span class="Constant">local-scope</span>
<span id="L85" class="LineNr">85 </span>  <span class="Constant">load-inputs</span>
<span id="L86" class="LineNr">86 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(tree _elem): type<span class="Delimiter">}</span>
<span id="L87" class="LineNr">87 </span>  put *result, <span class="Constant">left:offset</span>, l
<span id="L88" class="LineNr">88 </span>  put *result, <span class="Constant">right:offset</span>, r
<span id="L89" class="LineNr">89 </span>]
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->