File: test.htm - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

001: <html><head><style type="text/css">body{background-color:#202020;}pre {font-family: "Bitstream Vera Sans Mono", monospace; font-size: 13px;}.err{color:#;}.comm{color:#678;}.ident{color:#D0D0D0;}.str{color:#ED9D13;}.int{color:#3677A9;}.float{color:#235741;}.unop{color:#009799;}.binop{color:#F92672;}.delim{color:#D0D0D0;}.kwd{color:#6AB825;}</style></head><body><table class="code_listing" border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="listing_lines" align="right"><pre style="color:#777;display:block;margin:0;padding-right:25px;text-align:right;white-space:pre;width:25px;"> 1
002: 2
003: 3
004: 4
005: 5
006: 6
007: 7
008: 8
009: 9
010: 10
011: 11
012: 12
013: 13
014: 14
015: 15
016: 16
017: 17
018: 18
019: 19
020: 20
021: 21
022: 22
023: 23
024: 24
025: 25
026: 26
027: 27
028: 28
029: 29
030: 30
031: 31
032: 32
033: 33
034: 34
035: 35
036: 36
037: 37
038: 38
039: 39
040: 40
041: 41
042: 42
043: 43
044: 44
045: 45
046: 46
047: 47
048: 48
049: 49
050: 50
051: 51
052: 52
053: 53
054: 54
055: 55
056: 56
057: 57
058: 58
059: 59
060: 60
061: 61
062: 62
063: 63
064: 64
065: 65
066: 66
067: 67
068: 68
069: 69
070: 70
071: 71
072: 72
073: 73
074: 74
075: 75
076: 76
077: 77
078: 78
079: 79
080: 80
081: 81
082: 82
083: 83
084: 84
085: 85
086: 86
087: 87
088: 88
089: 89
090: 90
091: 91
092: 92
093: 93
094: 94
095: 95
096: 96
097: 97
098: 98
099: 99
100: 100
101: 101
102: 102
103: 103
104: 104
105: 105
106: 106
107: 107
108: 108
109: 109
110: 110
111: 111
112: 112
113: 113
114: 114
115: 115
116: 116
117: 117
118: 118
119: 119
120: 120
121: 121
122: 122
123: 123 </pre> </td> <td class="listing_code"> <pre><span class="kwd">extern</span> <span class="kwd">Fn</span> <span class="ident">malloc</span> <span class="ident">int</span> <span class="kwd">-></span> <span class="ident">void</span><span class="unop">'</span>
124: <span class="kwd">extern</span> <span class="kwd">Fn</span> <span class="ident">free</span> <span class="ident">void</span><span class="unop">'</span> <span class="kwd">-></span> <span class="ident">void</span>
125: <span class="kwd">extern</span> <span class="kwd">Fn</span> <span class="ident">realloc</span> <span class="ident">void</span><span class="unop">'</span> <span class="ident">uint</span> <span class="kwd">-></span> <span class="ident">void</span><span class="unop">'</span>
126: <span class="kwd">extern</span> <span class="kwd">Fn</span> <span class="ident">calloc</span> <span class="ident">uint</span> <span class="ident">uint</span> <span class="kwd">-></span> <span class="ident">void</span><span class="unop">'</span>
127: <span class="kwd">extern</span> <span class="kwd">Fn</span> <span class="ident">recalloc</span> <span class="ident">void</span><span class="unop">'</span> <span class="ident">uint</span> <span class="ident">uint</span> <span class="kwd">-></span> <span class="ident">void</span><span class="unop">'</span>
128: 
129: <span class="kwd">extern</span> <span class="kwd">Fn</span> <span class="ident">puts</span> <span class="ident">str</span> <span class="kwd">-></span> <span class="ident">int</span>
130: <span class="comm">;extern Fn itoa int str int -> str</span>
131: <span class="kwd">fn</span> <span class="ident">fac2</span> <span class="ident">n</span><span class="kwd">:</span><span class="ident">int</span> <span class="kwd">-></span> <span class="ident">int</span> <span class="binop">=</span> <span class="kwd">if</span><span class="delim">(</span><span class="ident">n</span> <span class="binop"><=</span> <span class="int">1</span><span class="delim">)</span> <span class="int">1</span> <span class="kwd">fi</span> <span class="ident">fac</span> <span class="ident">n</span><span class="binop">-</span><span class="int">1</span> <span class="binop">*</span> <span class="ident">n</span>
132: <span class="kwd">fn</span> <span class="ident">f</span> <span class="binop">=</span> <span class="int">0</span>
133: <span class="kwd">fn</span> <span class="ident">fff</span> <span class="binop">=</span> <span class="ident">f</span>
134: <span class="kwd">fn</span> <span class="ident">fac</span> <span class="ident">n</span><span class="kwd">:</span><span class="ident">int</span> <span class="kwd">-></span> <span class="ident">int</span> <span class="binop">=</span> <span class="kwd">if</span><span class="delim">(</span><span class="delim">(</span><span class="ident">fff</span><span class="delim">(</span><span class="delim">)</span><span class="delim">(</span><span class="delim">)</span><span class="delim">)</span><span class="delim">;</span> <span class="ident">n</span> <span class="binop"><=</span> <span class="int">1</span><span class="delim">)</span> <span class="kwd">ret</span> <span class="int">1</span> <span class="kwd">fi</span> <span class="kwd">ret</span> <span class="ident">fac2</span> <span class="ident">n</span><span class="binop">-</span><span class="int">1</span> <span class="binop">*</span> <span class="ident">n</span>
135: <span class="kwd">fn</span> <span class="ident">caf</span> <span class="ident">n</span><span class="kwd">:</span><span class="ident">int</span> <span class="kwd">-></span> <span class="ident">int</span> <span class="binop">=</span> <span class="kwd">if</span><span class="delim">(</span><span class="unop">-</span><span class="int">1</span> <span class="binop"><=</span> <span class="ident">n</span><span class="delim">)</span> <span class="kwd">ret</span> <span class="int">1</span> <span class="kwd">fi</span> <span class="kwd">ret</span> <span class="ident">caf</span> <span class="ident">n</span><span class="binop">+</span><span class="int">1</span> <span class="binop">*</span> <span class="ident">n</span>
136: <span class="kwd">fn</span> <span class="ident">get-fac</span> <span class="ident">b</span><span class="kwd">:</span><span class="ident">bool</span> <span class="binop">=</span> <span class="kwd">if</span><span class="delim">(</span><span class="ident">b</span><span class="delim">)</span> <span class="kwd">ret</span> <span class="ident">fac</span> <span class="kwd">fi</span> <span class="kwd">ret</span> <span class="ident">caf</span> <span class="comm">;-> Fn int -> int</span>
137: <span class="comm">; fn main = argc:int argv:str'</span>
138: <span class="kwd">rec</span> <span class="ident">vec</span>
139:     <span class="ident">x</span><span class="kwd">:</span> <span class="ident">float</span>
140:     <span class="ident">y</span><span class="kwd">:</span> <span class="ident">float</span>
141: <span class="kwd">fn</span> <span class="ident">main</span> <span class="ident">argc</span><span class="kwd">:</span><span class="ident">int</span> <span class="ident">argv</span><span class="kwd">:</span><span class="ident">str</span><span class="unop">'</span>
142:     <span class="ident">v</span><span class="kwd">:</span> <span class="ident">vec</span>
143:     <span class="ident">aa</span><span class="kwd">:</span> <span class="ident">char</span><span class="binop">'</span><span class="int">30</span>
144:     <span class="ident">a</span><span class="kwd">:</span> <span class="ident">char</span><span class="unop">'</span>
145:     <span class="ident">a</span> <span class="binop">=</span> <span class="unop">&</span><span class="delim">(</span><span class="ident">aa</span><span class="binop">'</span><span class="delim">(</span><span class="ident">f</span><span class="delim">(</span><span class="delim">)</span><span class="delim">)</span><span class="delim">)</span>
146:     <span class="ident">a</span> <span class="binop">=</span> <span class="ident">aa</span>
147:     <span class="ident">b</span> <span class="kwd">:=</span> <span class="int">5</span>
148:     <span class="ident">bb</span> <span class="kwd">:=</span> <span class="str">"hello"</span>
149:     <span class="ident">c</span> <span class="kwd">:=</span> <span class="ident">a</span><span class="binop">'</span><span class="int">13</span>
150:     <span class="ident">d</span> <span class="kwd">:=</span> <span class="ident">bb</span><span class="unop">'</span>
151:     <span class="ident">e</span> <span class="kwd">:=</span> <span class="str">"f"</span><span class="unop">'</span>
152:     <span class="ident">argc</span> <span class="binop">=</span> <span class="int">6</span>
153:     <span class="ident">aa</span><span class="binop">'</span><span class="int">0</span> <span class="binop">=</span> <span class="str">"h"</span><span class="binop">'</span><span class="int">0</span>
154:     <span class="ident">aa</span><span class="binop">'</span><span class="int">1</span> <span class="binop">=</span> <span class="ident">bb</span><span class="binop">'</span><span class="int">1</span>
155:     <span class="ident">aa</span><span class="binop">'</span><span class="int">2</span> <span class="binop">=</span> <span class="str">"\0"</span><span class="unop">'</span>
156:     <span class="ident">g</span> <span class="kwd">:=</span> <span class="float">3.0e-50</span>
157:     <span class="kwd">if</span><span class="delim">(</span><span class="int">1</span> <span class="binop"><</span> <span class="int">2</span> <span class="binop">and</span> <span class="int">2</span> <span class="binop">></span> <span class="int">3</span><span class="delim">)</span> <span class="ident">puts</span> <span class="ident">aa</span>
158:     <span class="kwd">fi</span> <span class="ident">puts</span> <span class="ident">bb</span>
159:     <span class="ident">itoa</span> <span class="unop">-</span><span class="delim">(</span><span class="delim">(</span><span class="ident">get-fac</span> <span class="kwd">true</span><span class="delim">)</span> <span class="int">14</span><span class="delim">)</span> <span class="ident">a</span> <span class="int">12</span> <span class="int">10</span>
160:     <span class="ident">puts</span> <span class="ident">a</span>
161:     <span class="comm">; puts (itoa 42 a -10)</span>
162:     <span class="ident">puts</span> <span class="ident">argv</span><span class="binop">'</span><span class="int">0</span>
163:     <span class="ident">b</span> <span class="binop">=</span> <span class="int">3</span>
164:     <span class="ident">itoa</span> <span class="ident">b</span> <span class="ident">a</span> <span class="int">30</span> <span class="int">10</span>
165:     <span class="ident">puts</span> <span class="ident">a</span>
166:     <span class="ident">b</span><span class="unop">+</span> <span class="binop">=</span> <span class="int">5</span>
167:     <span class="ident">itoa</span> <span class="ident">b</span> <span class="ident">a</span> <span class="int">30</span> <span class="int">10</span>
168:     <span class="ident">puts</span> <span class="ident">a</span>
169:     <span class="comm">;a2: int = 1</span>
170:     <span class="comm">;p: char'</span>
171:     <span class="ident">p</span> <span class="kwd">:=</span> <span class="ident">malloc</span> <span class="int">1024</span>
172:     <span class="ident">free</span> <span class="ident">p</span>
173: 
174: <span class="kwd">fn</span> <span class="ident">itoa</span> <span class="ident">value</span><span class="kwd">:</span><span class="ident">int</span> <span class="ident">result</span><span class="kwd">:</span><span class="ident">str</span> <span class="ident">size</span><span class="kwd">:</span><span class="ident">int</span> <span class="ident">base</span><span class="kwd">:</span><span class="ident">int</span> <span class="kwd">-></span> <span class="ident">bool</span> <span class="unop">=</span>
175:     <span class="comm">; check that the base if valid</span>
176:     <span class="kwd">if</span> <span class="ident">base</span> <span class="binop"><</span> <span class="int">2</span> <span class="binop">or</span> <span class="ident">base</span> <span class="binop">></span> <span class="int">36</span>
177:         <span class="ident">result</span><span class="unop">'</span> <span class="binop">=</span> <span class="str">"\0"</span><span class="unop">'</span>
178:         <span class="kwd">ret</span> <span class="kwd">false</span>
179:     <span class="ident">ptr</span> <span class="kwd">:=</span> <span class="ident">result</span>
180:     <span class="ident">neg</span> <span class="kwd">:=</span> <span class="ident">value</span> <span class="binop"><</span> <span class="int">0</span>
181:     <span class="kwd">if</span><span class="delim">(</span><span class="ident">neg</span><span class="delim">)</span> <span class="ident">value</span> <span class="binop">=</span> <span class="unop">-</span><span class="ident">value</span>
182:     <span class="kwd">while</span>
183:         <span class="kwd">if</span> <span class="ident">ptr</span> <span class="binop">>=</span> <span class="ident">result</span> <span class="binop">+</span> <span class="ident">size</span> <span class="binop">-</span> <span class="int">1</span>
184:             <span class="ident">result</span><span class="unop">'</span> <span class="binop">=</span> <span class="str">"\0"</span><span class="unop">'</span>
185:             <span class="kwd">ret</span> <span class="kwd">false</span>
186:         <span class="ident">ptr</span><span class="unop">'</span> <span class="binop">=</span> <span class="str">"0123456789abcdefghijklmnopqrstuvwxyz"</span> <span class="binop">'</span> <span class="ident">value</span><span class="binop">%</span><span class="ident">base</span>
187:         <span class="ident">value</span> <span class="binop">=</span> <span class="ident">value</span> <span class="binop">/</span> <span class="ident">base</span>
188:         <span class="ident">ptr</span><span class="unop">+</span>
189:         <span class="ident">value</span> <span class="binop">!=</span> <span class="int">0</span>
190:     <span class="kwd">if</span> <span class="ident">neg</span> <span class="binop">and</span> <span class="ident">base</span> <span class="binop">==</span> <span class="int">10</span>
191:         <span class="kwd">if</span> <span class="ident">ptr</span> <span class="binop">>=</span> <span class="ident">result</span> <span class="binop">+</span> <span class="ident">size</span> <span class="binop">-</span> <span class="int">1</span>
192:             <span class="ident">result</span><span class="unop">'</span> <span class="binop">=</span> <span class="str">"\0"</span><span class="unop">'</span>
193:             <span class="kwd">ret</span> <span class="kwd">false</span>
194:         <span class="ident">ptr</span><span class="unop">'</span> <span class="binop">=</span> <span class="str">"-"</span><span class="unop">'</span>
195:         <span class="ident">ptr</span><span class="unop">+</span>
196:     <span class="ident">ptr</span><span class="unop">'</span> <span class="binop">=</span> <span class="str">"\0"</span><span class="unop">'</span>
197:     <span class="ident">ptr</span><span class="unop">-</span>
198:     <span class="ident">ptr1</span> <span class="kwd">:=</span> <span class="ident">result</span>
199:     <span class="kwd">while</span> <span class="ident">ptr1</span> <span class="binop"><</span> <span class="ident">ptr</span>
200:         <span class="ident">tmp-char</span> <span class="kwd">:=</span> <span class="ident">ptr</span><span class="unop">'</span>
201:         <span class="ident">ptr</span><span class="unop">'</span> <span class="binop">=</span> <span class="ident">ptr1</span><span class="unop">'</span>
202:         <span class="ident">ptr1</span><span class="unop">'</span> <span class="binop">=</span> <span class="ident">tmp-char</span>
203:         <span class="ident">ptr1</span><span class="unop">+</span>
204:         <span class="ident">ptr</span><span class="unop">-</span>
205:     <span class="kwd">true</span>
206: 
207: <span class="comm">; fn fft data:double' nn:uint</span>
208: <span class="comm">;    ; reverse-binary reindexing</span>
209: <span class="comm">;    n := ulong nn<1</span>
210: <span class="comm">;    for (i,j) := (1,1); i < n; i =+ 2</span>
211: <span class="comm">;        if j > i</span>
212: <span class="comm">;            swap data'(j - 1) data'(i - 1)</span>
213: <span class="comm">;            swap data'j data'i</span>
214: <span class="comm">;        m := nn</span>
215: <span class="comm">;        while m >= 2 and j > m</span>
216: <span class="comm">;            j =- m</span>
217: <span class="comm">;            m =>> 1</span>
218: <span class="comm">;        j =+ m</span>
219: <span class="comm">;    ; here begins the Danielson-Lanczos section</span>
220: <span class="comm">;    mx := 2</span>
221: <span class="comm">;    while n > mx</span>
222: <span class="comm">;        istep := mx << 1</span>
223: <span class="comm">;        theta := -2 * PI / mx</span>
224: <span class="comm">;        wtemp := sin 0.5*theta</span>
225: <span class="comm">;        wpr := -2.0 * wtemp^2</span>
226: <span class="comm">;        wpi := sin theta</span>
227: <span class="comm">;        wr := 1.0</span>
228: <span class="comm">;        wi := 0</span>
229: <span class="comm">;        for m := 1; m < mx; m =+ 2</span>
230: <span class="comm">;            for i := m; i <= n; i =+ istep</span>
231: <span class="comm">;                j := i + mx</span>
232: <span class="comm">;                tempr := wr * data'(j-1) - wi * data'j</span>
233: <span class="comm">;                tempi := wr * data'j + wi * data'(j-1)</span>
234: <span class="comm">;                data'(j-1) = data'(i-1) - tempr</span>
235: <span class="comm">;                data'j = data'i - tempi</span>
236: <span class="comm">;                data'(i-1) =+ tempr</span>
237: <span class="comm">;                data'i =+ tempi</span>
238: <span class="comm">;            wtemp = wr</span>
239: <span class="comm">;            wr =+ wr * wpr - wr * wpi</span>
240: <span class="comm">;            wi =+ wi * wpr + wtemp * wpi</span>
241: <span class="comm">;        mx = istep</span>
242: <span class="comm">; [T] fn swap mod a:T mod b:T</span>
243: <span class="comm">;    tmp := a</span>
244: <span class="comm">;    a = b</span>
245: ;   b = tmp</pre></body></html>