comparison modules/string.tp @ 150:7dfa4481deb0

Implement find:else on string objects
author Mike Pavone <pavone@retrodev.com>
date Fri, 09 Aug 2013 10:05:20 -0700
parents 4c96a393103e
children 3e9cb69e516d
comparison
equal deleted inserted replaced
149:7f442b3e4448 150:7dfa4481deb0
92 intret num!: (intret num) xor bytes 92 intret num!: (intret num) xor bytes
93 } 93 }
94 intret 94 intret
95 } 95 }
96 96
97 llMessage: find:else withVars: {
98 intret <- obj_int32 ptr
99 oneedle <- object ptr
100 ifNotFound <- object ptr
101 sneedle <- string ptr
102 i <- uint32_t
103 notFound <- uint32_t
104 } andCode: :oneedle :ifNotFound {
105 sneedle <- mcall: string 1 oneedle
106 i <- 0
107 notFound <- 1
108 while: { notFound && i + (sneedle bytes) <= bytes} do: {
109 if: (memcmp: data + i (sneedle data) (sneedle bytes)) = 0 {
110 notFound <- 0
111 } else: {
112 i <- i + 1
113 }
114 }
115 if: notFound {
116 ccall: ifNotFound 0
117 } else: {
118 intret <- make_object: (addr_of: obj_int32_meta) NULL 0
119 intret num!: i
120 intret
121 }
122 }
123
97 isInteger? <- { false } 124 isInteger? <- { false }
98 } 125 }