The testing goes on. Focussing on /with
and in particular the char
case now.
So now we have this code
deline*: func [ check? [logic!] _with [integer!] ;-- with is reserved lines [integer!] /local data [red-string!] buffer [red-string!] val [red-value!] with-arg [red-value!] ;-- with char! or string! value char [red-char!] s [series!] p [byte-ptr!] len [integer!] unit [integer!] cp [integer!] cr [integer!] lf [integer!] p4 [int-ptr!] blk [red-block!] tail [byte-ptr!] ][ #typecheck [deline _with lines] data: as red-string! stack/arguments print lines print _with lf: 10 cr: 13 either positive? lines [ print "lines refinement found" val/header: TYPE_BLOCK ; To do: return a block of lines using some split functionality ][ either positive? _with [ print "with refinement found" val: as red-value! data + 1 either TYPE_OF(val) = TYPE_CHAR [ print "char type" ;print val ;val/header: TYPE_CHAR lf: val/data2 print lf ][ print "string type" ;print val val/header: TYPE_STRING ] ][print "No refinement used" ] ] s: GET_BUFFER(data) unit: GET_UNIT(s) p: string/rs-head data len: string/rs-length? data tail: as byte-ptr! s/tail print val/header print "-" print val/data1 print "-" print val/data2 print "-" print val/data3 buffer: string/rs-make-at stack/push* ( len ) * unit while [p < tail][ cp: switch unit [ Latin1 [as-integer p/value] UCS-2 [(as-integer p/2) << 8 + p/1] UCS-4 [p4: as int-ptr! p p4/value] ] p: p + unit either 13 = cp [ ; CR string/append-char GET_BUFFER(buffer) lf unit p: p + unit cp: switch unit [ Latin1 [as-integer p/value] UCS-2 [(as-integer p/2) << 8 + p/1] UCS-4 [p4: as int-ptr! p p4/value] ] if 10 = cp [ p: p + unit ;-- Next! ] ][ either 10 = cp [ string/append-char GET_BUFFER(buffer) lf unit ][ string/append-char GET_BUFFER(buffer) cp unit ;string/append-char GET_BUFFER(buffer) 97 unit ;-- "a" for testing ] ] ] stack/set-last as red-value! buffer buffer ]
Still using a lot of debugging prints and plenty odd variables. But still compiling and also now returning some results.
red>> deline/with {hello { all} "b" -11with refinement foundstring type7-0-3473324-0== "hello^/all" red>> deline/with {hello { all} #"b" -11with refinement foundchar type9810-15-98-0== "helloball" red>>
Feeling more and more confident, in the next blog some prints can be removed, and experiment with returning a block is still on the list.
To be continued...