Mercurial > repos > rhope
annotate string.rhope @ 99:e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 06 Aug 2010 01:42:37 -0400 |
parents | e73a93fb5de1 |
children | f51c4c17457c |
rev | line source |
---|---|
52
079200bc3e75
String literals almost working. Print moved out of C runtime.
Mike Pavone <pavone@retrodev.com>
parents:
51
diff
changeset
|
1 |
51
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 UTF8 Expect[num,arr,index,count,consumed:out] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 byte <- [arr]Index[index] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 If[[128u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 //Error: ASCII byte when we were expecting part of a mutlibyte sequence |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 //treat each byte as a separate character |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 ncount <- [1i32]+[[count]+[consumed]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 If[[192u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 If[[num]=[1]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 //Sequence is complete count as single character |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 ncount <- [1i32]+[count] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 out <- UTF8 Expect[[num]-[1], arr, [index]+[1], count, [1i32]+[consumed]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 //Error: too high to be a continuation byte |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 ncount <- [1i32]+[[count]+[consumed]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 //Error: string ended in the middle of a multi-byte sequence |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 out <- [count]+[consumed] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 Val[ncount] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 [arr]Next[index] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 out <- Count UTF8[arr, ~, ncount] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 out <- Val[ncount] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 Count UTF8[arr,index,count:out] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 byte <- [arr]Index[index] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 If[[128u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 { ncount <- [1i32]+[count] } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 If[[192u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 //Error: Encoding for 2nd,3rd or 4th byte of sequence |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 //treat as a single character |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 ncount <- [1i32]+[count] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 If[[224u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 out <- UTF8 Expect[1, arr, [index]+[1], count, 1] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 If[[240u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 out <- UTF8 Expect[2, arr, [index]+[1], count, 1] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 If[[245u8]>[byte]] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 out <- UTF8 Expect[3, arr, [index]+[1], count, 1] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 //Error: Out of range of Unicode standard |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 //treat as a single character |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 ncount <- [1i32]+[count] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 [arr]Next[index] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 { |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 out <- Count UTF8[arr, ~, ncount] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 }{ |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 out <- Val[ncount] |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 Blueprint String |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 { |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
83 Buffer |
51
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 Length(Int32,Naked) |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
87 String@Array[in:out(String)] |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
88 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
89 [in]First |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
90 { len <- Count UTF8[in, ~, 0i32] } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
91 { len <- 0i32 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
92 out <- [[Build[String()]]Buffer <<[in]]Length <<[len] |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
93 } |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
94 |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
95 Print@String[string:out] |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
96 { |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
97 //TODO: Sanitize string (remove terminal escapes and replace invalid UTF) |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
98 write[1i32, [string]Buffer >>, Int64[[[string]Buffer >>]Length >>]] |
69
d0ce696786cc
Clean up debug print statements a bit. Fix bug that prevented workers that took no inputs from working. Remove workaround in Array for said bug.
Mike Pavone <pavone@retrodev.com>
parents:
55
diff
changeset
|
99 { out <- write[1i32, [Array[]]Append[10u8], 1i64] } |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
100 } |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
101 |
71
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
102 Get Char[:out] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
103 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
104 read[0, [Array[]]Set[0, 0u8], 1i64] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
105 {} |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
106 { out <- String[~] } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
107 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
108 |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
109 _String to Int32[current,index,array:out] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
110 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
111 char <- [array]Index[index] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
112 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
113 If[[char]<[48u8]] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
114 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
115 out <- Val[current] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
116 }{ |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
117 If[[char]>[57u8]] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
118 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
119 out <- Val[current] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
120 }{ |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
121 out <- _String to Int32[[[current]*[10i32]]+[Int32[[char]-[48u8]]], [index]+[1], array] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
122 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
123 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
124 |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
125 }{ |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
126 out <- Val[current] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
127 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
128 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
129 |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
130 Int32@String[string:out] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
131 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
132 buf <- [string]Buffer >> |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
133 [buf]Index[0] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
134 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
135 If[[~]=[45u8]] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
136 { |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
137 out <- [0i32]-[_String to Int32[0i32, 1, buf]] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
138 }{ |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
139 out <- _String to Int32[0i32, 0, buf] |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
140 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
141 }{ |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
142 out <- 0i32 |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
143 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
144 |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
145 } |
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
69
diff
changeset
|
146 |
92
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
147 Int32@String Slice[string:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
148 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
149 out <- Int32[[string]Flatten] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
150 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
151 |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
152 Int32@String Cat[string:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
153 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
154 out <- Int32[[string]Flatten] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
155 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
156 |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
157 Flatten@String[string:out] |
51
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 { |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
159 out <- string |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
160 } |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
161 |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
162 _CPOff to BOff[buff,cur,boff,cpoff,expected,used:out] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
163 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
164 If[expected] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
165 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
166 byte <- [buff]Index[boff] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
167 err <- If[[byte]>[192u8]] {} |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
168 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
169 err <- If[[byte]<[128u8]] {} |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
170 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
171 out <- _CPOff to BOff[buff, cur, [boff]+[1i32], cpoff, [expected]-[1i32], [used]+[1i32]] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
172 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
173 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
174 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
175 Val[err] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
176 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
177 ncur <- [cur]+[used] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
178 If[[ncur]>[cpoff]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
179 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
180 out <- [boff]-[[cpoff]-[ncur]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
181 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
182 out <- CPOff to BOff[buff,ncur,boff,cpoff] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
183 } |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
184 } |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
185 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
186 out <- CPOff to BOff[buff,[cur]+[1i32],boff,cpoff] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
187 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
188 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
189 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
190 CPOff to BOff[buff,cur,boff,cpoff:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
191 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
192 If[[cur]=[cpoff]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
193 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
194 out <- boff |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
195 }{ |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
196 byte <- [buff]Index[boff] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
197 If[[byte] < [128u8]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
198 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
199 nboff <- [boff]+[1i32] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
200 ncur <- [cur]+[1i32] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
201 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
202 If[[byte]<[192u8]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
203 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
204 //Error: Encoding for 2nd,3rd or 4th byte of sequence |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
205 //treat as a single character |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
206 nboff <- [boff]+[1i32] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
207 ncur <- [cur]+[1i32] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
208 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
209 If[[byte]<[224u8]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
210 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
211 expect <- 1i32 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
212 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
213 If[[byte]<[240u8]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
214 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
215 expect <- 2i32 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
216 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
217 If[[byte]<[245u8]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
218 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
219 expect <- 3i32 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
220 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
221 //Error |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
222 nboff <- [boff]+[1i32] |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
223 ncur <- [cur]+[1i32] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
224 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
225 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
226 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
227 Val[expect] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
228 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
229 out <- _CPOff to BOff[buff, cur, [boff]+[1i32], cpoff, expect, 1i32] {} |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
230 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
231 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
232 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
233 out <- CPOff to BOff[buff, ncur, cpoff, nboff] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
234 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
235 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
236 |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
237 Slice@String[string,slicepoint:left,right] |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
238 { |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
239 //TODO: Handle invalid slicepoints |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
240 sliceoffset <- CPOff to BOff[[string]Buffer >>, 0i32, 0i32, slicepoint] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
241 left <- String Slice[string, 0i32, slicepoint, sliceoffset] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
242 right <- String Slice[string, sliceoffset, [[string]Length >>]-[slicepoint], [[[string]Buffer >>]Length]-[sliceoffset]] |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
243 } |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
244 |
72
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
245 Byte@String[string,index:out,invalid] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
246 { |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
247 out,invalid <- [[string]Buffer >>]Index[index] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
248 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
249 |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
250 Length@String[string:out] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
251 { |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
252 out <- [string]Length >> |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
253 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
254 |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
255 _=String[left,right,index:out] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
256 { |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
257 [left]Byte[index] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
258 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
259 rbyte <- [right]Byte[index] {} |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
260 { |
92
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
261 Print[["Could not fetch byte from right string at offset:"]Append[String[index]]] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
262 { Print[["Right string has type ID: "]Append[ String[ID[Blueprint Of[right]]] ]] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
263 { Print[[right]Byte Length] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
264 { Print[[right]Length] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
265 { Print[["Left string has type ID: "]Append[ String[ID[Blueprint Of[left]]] ]] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
266 { Print[[left]Byte Length] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
267 { Print[[left]Length] }}}}}} |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
268 out <- No |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
269 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
270 ,out <- If[[~]=[rbyte]] |
72
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
271 { |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
272 out <- _=String[left,right,[index]+[1]] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
273 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
274 }{ |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
275 out <- Yes |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
276 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
277 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
278 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
279 Eq String[left,right:out] |
72
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
280 { |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
281 ,out <- If[[[left]Length] = [[right]Length]] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
282 { |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
283 out <- _=String[left,right,0] |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
284 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
285 } |
f7bcf3db1342
Add =@String, fix bool bug
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
286 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
287 =@String[left,right:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
288 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
289 out <- Eq String[left,right] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
290 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
291 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
292 Byte Length@String[string:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
293 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
294 out <- [[string]Buffer >>]Length |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
295 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
296 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
297 Append@String[left,right:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
298 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
299 out <- String Cat[left,right] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
300 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
301 |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
302 Blueprint String Slice |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
303 { |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
304 Source |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
305 Offset(Int32,Naked) |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
306 Length(Int32,Naked) |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
307 ByteLen(Int32,Naked) |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
308 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
309 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
310 String Slice[source,offset,length,bytelen:out(String Slice)] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
311 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
312 out <- [[[[Build[String Slice()]]Source <<[source]]Offset <<[offset]]Length <<[length]]ByteLen <<[bytelen] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
313 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
314 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
315 Byte@String Slice[string,index:out,invalid] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
316 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
317 ,invalid <- If[[index]<[[string]ByteLen >>]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
318 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
319 out,invalid <- [[string]Source >>]Byte[[index]+[[string]Offset >>]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
320 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
321 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
322 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
323 Byte Length@String Slice[string:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
324 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
325 out <- [string]ByteLen >> |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
326 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
327 |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
328 Length@String Slice[string:out] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
329 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
330 out <- [string]Length >> |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
331 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
332 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
333 =@String Slice[left,right:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
334 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
335 out <- Eq String[left,right] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
336 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
337 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
338 _Flatten@String[string,dest,offset,count:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
339 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
340 If[count] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
341 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
342 out <- [string]_Flatten[[dest]Append[ [[string]Buffer >>]Index[offset] ], [offset]+[1i32], [count]-[1i32]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
343 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
344 out <- dest |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
345 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
346 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
347 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
348 Flatten@String[string:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
349 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
350 out <- string |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
351 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
352 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
353 _Flatten@String Slice[string,dest,offset,count:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
354 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
355 out <- [[string]Source >>]_Flatten[dest, [[string]Offset >>]+[offset], count] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
356 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
357 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
358 Flatten@String Slice[string:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
359 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
360 out <- [[Build[String()]]Buffer <<[ [[string]Source >>]_Flatten[Array[], [string]Offset >>, [string]ByteLen >>] ] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
361 ]Length <<[[string]Length >>] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
362 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
363 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
364 Print@String Slice[string:out] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
365 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
366 out <- Print[Flatten[string]] |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
367 } |
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
368 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
369 Append@String Slice[left,right:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
370 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
371 out <- String Cat[left,right] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
372 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
373 |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
374 Slice@String Slice[string,slicepoint:left,right] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
375 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
376 //TODO: Handle invalid slicepoints |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
377 sliceoffset <- CPOff to BOff[[[string]Source >>]Buffer >>, 0i32, [string]Offset >>, slicepoint] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
378 left <- String Slice[[string]Source >>, [string]Offset >>, slicepoint, [sliceoffset]-[[string]Offset >>]] |
92
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
379 right <- String Slice[[string]Source >>, sliceoffset, [[string]Length >>]-[slicepoint], [[string]Byte Length]-[[sliceoffset]-[[string]Offset >>]]] |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
380 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
381 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
382 Blueprint String Cat |
55
048046186d22
Started working on Slice@String
Mike Pavone <pavone@retrodev.com>
parents:
52
diff
changeset
|
383 { |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
384 Left |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
385 Right |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
386 Length |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
387 ByteLen |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
388 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
389 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
390 String Cat[left,right:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
391 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
392 out <- [[[[Build[String Cat()] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
393 ]Left <<[left] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
394 ]Right <<[right] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
395 ]Length <<[ [[left]Length]+[[right]Length] ] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
396 ]ByteLen <<[ [[left]Byte Length]+[[right]Byte Length] ] |
51
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
397 } |
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
398 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
399 Append@String Cat[left,right:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
400 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
401 out <- String Cat[left,right] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
402 } |
51
7d6a6906b648
Added integer type conversions and started on the implementation of String
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
403 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
404 Byte@String Cat[string,index:out,invalid] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
405 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
406 leftlen <- [[string]Left >>]Byte Length |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
407 If[[index]<[leftlen]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
408 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
409 out,invalid <- [[string]Left >>]Byte[index] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
410 }{ |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
411 rindex <- [index]-[leftlen] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
412 ,invalid <- If[[rindex]<[[[string]Right >>]Byte Length]] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
413 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
414 out,invalid <- [[string]Right >>]Byte[rindex] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
415 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
416 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
417 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
418 |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
419 Byte Length@String Cat[string:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
420 { |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
421 out <- [string]ByteLen >> |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
422 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
423 |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
424 Length@String Cat[string:out] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
425 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
426 out <- [string]Length >> |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
427 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
428 |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
429 _Flatten@String Cat[string,dest,offset,count:out] |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
430 { |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
431 left <- [string]Left >> |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
432 If[[offset] < [[left]Byte Length]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
433 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
434 lcount <- Min[[left]Byte Length, count] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
435 ldest <- [left]_Flatten[dest, offset, lcount] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
436 rcount <- [count]-[lcount] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
437 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
438 ldest <- Val[dest] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
439 rcount <- count |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
440 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
441 If[[[offset]+[count]]>[[left]Byte Length]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
442 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
443 right <- [string]Right >> |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
444 roffset <- Max[0, [offset]-[[left]Byte Length]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
445 out <- [right]_Flatten[ldest, roffset, Min[[right]Byte Length, rcount]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
446 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
447 out <- Val[ldest] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
448 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
449 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
450 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
451 Flatten@String Cat[string:out] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
452 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
453 out <- [[Build[String()] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
454 ]Buffer << [ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
455 [[string]Right >>]_Flatten[ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
456 [[string]Left >>]_Flatten[Array[], 0i32, [[string]Left >>]Byte Length], |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
457 0i32, [[string]Right >>]Byte Length]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
458 ]Length << [[string]Length >>] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
459 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
460 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
461 Print@String Cat[string:out] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
462 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
463 out <- Print[Flatten[string]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
464 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
465 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
466 Slice@String Cat[string,slicepoint:left,right] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
467 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
468 llen <- [[string]Left >>]Length |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
469 If[[slicepoint]=[llen]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
470 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
471 left <- [string]Left >> |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
472 right <- [string]Right >> |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
473 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
474 If[[slicepoint]<[llen]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
475 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
476 left,lright <- [[string]Left >>]Slice[slicepoint] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
477 right <- String Cat[lright,[string]Right >>] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
478 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
479 rleft,right <- [[string]Right >>]Slice[ [slicepoint]-[llen] ] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
480 left <- String Cat[[string]Left >>, rleft] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
481 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
482 } |
77
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
483 } |
a748300a4143
Some untested progress on String
Mike Pavone <pavone@retrodev.com>
parents:
72
diff
changeset
|
484 |
78
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
485 =@String Cat[left,right:out] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
486 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
487 out <- Eq String[left,right] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
488 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
489 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
490 =Delim[string,delims,index:outindex,after,nomatch] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
491 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
492 delim <- [delims]Index[index] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
493 If[[[string]Length]<[[delim]Length]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
494 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
495 try next <- Yes |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
496 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
497 check,mafter <- [string]Slice[[delim]Length] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
498 ,try next <- If[[check]=[delim]] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
499 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
500 outindex <- index |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
501 after <- Val[mafter] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
502 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
503 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
504 Val[try next] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
505 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
506 ,nomatch <- [delims]Next[index] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
507 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
508 outindex,after,nomatch <- =Delim[string,delims,~] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
509 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
510 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
511 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
512 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
513 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
514 _Partition[string,delims:matched,after,not found] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
515 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
516 not found <- If[[string]=[""]] {} |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
517 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
518 ,after <- =Delim[string, delims, [delims]First] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
519 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
520 matched <- [delims]Index[~] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
521 } {} { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
522 [string]Slice[1] {} |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
523 { matched,after,not found <- _Partition[~,delims] } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
524 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
525 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
526 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
527 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
528 Partition[string,odelims:before,matched,after,not found] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
529 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
530 dt <- Blueprint Of[odelims] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
531 If[ [[[dt]=[String()]] Or [[dt]=[String Slice()]]] Or [[dt]=[String Cat()]] ] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
532 { |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
533 delims <- [List[]]Append[odelims] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
534 }{ |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
535 delims <- Val[odelims] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
536 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
537 matched,after,not found <- _Partition[string,delims] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
538 { dlen <- Length[~] } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
539 { alen <- Length[~] } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
540 before <- [string]Slice[ [[string]Length]-[[dlen]+[alen]] ] |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
541 } |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
542 |
4d5ea487f810
Working String implementation and some basic (but nowhere near exhaustive) tests
Mike Pavone <pavone@retrodev.com>
parents:
77
diff
changeset
|
543 |
83
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
544 Dict Type ID@String[string:out] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
545 { |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
546 out <- ID[String()] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
547 } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
548 |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
549 Dict Type ID@String Cat[string:out] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
550 { |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
551 out <- ID[String()] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
552 } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
553 |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
554 Dict Type ID@String Slice[string:out] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
555 { |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
556 out <- ID[String()] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
557 } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
558 |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
559 Dict Bits@String[string,index:out,invalid] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
560 { |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
561 ,invalid <- [string]Byte[index] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
562 { out <- UInt32[~] } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
563 } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
564 |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
565 Dict Bits@String Cat[string,index:out,invalid] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
566 { |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
567 ,invalid <- [string]Byte[index] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
568 { out <- UInt32[~] } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
569 } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
570 |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
571 Dict Bits@String Slice[string,index:out,invalid] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
572 { |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
573 ,invalid <- [string]Byte[index] |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
574 { out <- UInt32[~] } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
575 } |
27bb051d631c
Initial implementation of Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
78
diff
changeset
|
576 |
87
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
577 _From Dict String[arr,el:out] |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
578 { |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
579 out <- [arr]Append[Trunc UInt8[el]] |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
580 } |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
581 |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
582 From Dict Key@String[string,data:out] |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
583 { |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
584 out <- String[Fold[_From Dict String[?], Array[], data]] |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
585 } |
3c4325e6298f
Add First@Dictionary (need to find mem man bug)
Mike Pavone <pavone@retrodev.com>
parents:
83
diff
changeset
|
586 |
90
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
587 String@String[string:out] |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
588 { |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
589 out <- string |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
590 } |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
591 |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
592 String@String Cat[string:out] |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
593 { |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
594 out <- string |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
595 } |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
596 |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
597 String@String Slice[string:out] |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
598 { |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
599 out <- string |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
600 } |
c25d75c2440b
Implemented Next@Dictionary and Print@Dictionary
Mike Pavone <pavone@retrodev.com>
parents:
87
diff
changeset
|
601 |
92
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
602 Replace[string,toreplace,with:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
603 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
604 ,delim,after <-[string]Partition[toreplace] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
605 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
606 wt <- Blueprint Of[with] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
607 If[ [[[wt]=[String()]] Or [[wt]=[String Slice()]]] Or [[wt]=[String Cat()]] ] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
608 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
609 replacement <- with |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
610 }{ |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
611 replacement <- [with]Index[[toreplace]Find[=[delim,?]]] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
612 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
613 out <- [[~]Append[replacement]]Append[Replace[after,toreplace,with]] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
614 } {} {} { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
615 out <- string |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
616 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
617 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
618 |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
619 _Join[list,delim,current,index:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
620 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
621 [list]Next[index] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
622 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
623 out <- _Join[list, delim, [[current]Append[delim]]Append[String[[list]Index[~]]], ~] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
624 }{ |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
625 out <- current |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
626 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
627 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
628 |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
629 Join[list,delim:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
630 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
631 [list]First |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
632 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
633 out <- _Join[list, delim, String[[list]Index[~]], ~] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
634 }{ |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
635 out <- "" |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
636 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
637 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
638 |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
639 Starts With[thing,starts with:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
640 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
641 out <- [[thing]Slice[[starts with]Length]] = [starts with] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
642 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
643 |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
644 Ends With[thing,ends with:out] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
645 { |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
646 ,compare <- [thing]Slice[ [[thing]Length] - [[ends with]Length] ] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
647 out <- [compare] = [ends with] |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
648 } |
e73a93fb5de1
Beginning of port of compiler to itself, some bugfixes and a refcount optimization
Mike Pavone <pavone@retrodev.com>
parents:
90
diff
changeset
|
649 |
99
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
650 If@String[str:yes,no] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
651 { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
652 yes,no <- If[[str]Length] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
653 } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
654 |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
655 If@String Cat[str:yes,no] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
656 { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
657 yes,no <- If[[str]Length] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
658 } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
659 |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
660 If@String Slice[str:yes,no] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
661 { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
662 yes,no <- If[[str]Length] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
663 } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
664 |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
665 _Split[list,string,delim:out] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
666 { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
667 ,,rest <- [string]Partition[delim] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
668 { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
669 out <- _Split[[list]Append[~], rest, delim] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
670 } {} {} { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
671 out <- [list]Append[string] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
672 } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
673 } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
674 |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
675 Split[string,delim:out] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
676 { |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
677 If[string] |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
678 { out <- _Split[(),string,delim] } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
679 { out <- () } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
680 } |
e09c2d1d6d5b
Got dataflow graph code working in compiler (nworker_c.rhope)
Mike Pavone <pavone@retrodev.com>
parents:
92
diff
changeset
|
681 |