comparison modules/array.tp @ 144:547153211389

Fix fold:with foldr:with and map in the array module
author Mike Pavone <pavone@retrodev.com>
date Fri, 09 Aug 2013 03:58:42 -0700
parents 9811040704ac
children ca249978ae96
comparison
equal deleted inserted replaced
143:282b8056b702 144:547153211389
9 (self data) get: (index num) 9 (self data) get: (index num)
10 } else: { 10 } else: {
11 false 11 false
12 } 12 }
13 } 13 }
14 14
15 llMessage: set withVars: { 15 llMessage: set withVars: {
16 index <- obj_int32 ptr 16 index <- obj_int32 ptr
17 value <- object ptr 17 value <- object ptr
18 } andCode: :index value { 18 } andCode: :index value {
19 if: (index num) >= 0 && (index num) < size { 19 if: (index num) >= 0 && (index num) < size {
20 data set: (index num) value 20 data set: (index num) value
21 } 21 }
22 self 22 self
23 } 23 }
24 24
25 llMessage: foreach withVars: { 25 llMessage: foreach withVars: {
26 clos <- lambda ptr 26 clos <- lambda ptr
27 i <- uint32_t 27 i <- uint32_t
28 index <- obj_int32 ptr 28 index <- obj_int32 ptr
29 } andCode: :clos { 29 } andCode: :clos {
34 ccall: clos 2 index (data get: i) 34 ccall: clos 2 index (data get: i)
35 i <- i + 1 35 i <- i + 1
36 } 36 }
37 self 37 self
38 } 38 }
39 39
40 llMessage: append withVars: { 40 llMessage: append withVars: {
41 value <- object ptr 41 value <- object ptr
42 tmp <- (object ptr) ptr 42 tmp <- (object ptr) ptr
43 } andCode: :value { 43 } andCode: :value {
44 if: storage = size { 44 if: storage = size {
52 } 52 }
53 data set: size value 53 data set: size value
54 size <- size + 1 54 size <- size + 1
55 self 55 self
56 } 56 }
57 57
58 llMessage: length withVars: { 58 llMessage: length withVars: {
59 intret <- obj_int32 ptr 59 intret <- obj_int32 ptr
60 } andCode: { 60 } andCode: {
61 intret <- make_object: (addr_of: obj_int32_meta) NULL 0 61 intret <- make_object: (addr_of: obj_int32_meta) NULL 0
62 intret num!: size 62 intret num!: size
63 intret 63 intret
64 } 64 }
65 65
66 fold:with <- :acc :fun { 66 fold:with <- :acc :fun {
67 foreach: self :idx el { 67 foreach: self :idx el {
68 fun: acc el 68 acc <- fun: acc el
69 } 69 }
70 acc
70 } 71 }
71 72
72 foldr:with <- :acc :fun { 73 foldr:with <- :acc :fun {
73 idx <- length - 1 74 idx <- length - 1
74 while: {idx >= 0} do: { 75 while: {idx >= 0} do: {
75 fun: acc (get: idx) 76 acc <- fun: acc (get: idx)
76 } 77 }
78 acc
77 } 79 }
78 80
79 map <- :fun { 81 map <- :fun {
80 new <- #[] 82 new <- #[]
81 foreach: self :idx el { 83 foreach: self :idx el {
82 new append: (fun: el) 84 new append: (fun: el)
83 } 85 }
86 new
84 } 87 }
85 88
86 find:withDefault <- :pred :default{ 89 find:withDefault <- :pred :default{
87 idx <- 0 90 idx <- 0
88 l <- length 91 l <- length
89 ret <- default 92 ret <- default
90 while: {idx < l} do: { 93 while: {idx < l} do: {