[bitc-dev] Code for bitc_vector_string
Sam Mason
sam at samason.me.uk
Mon Jul 3 20:38:37 EDT 2006
On Mon, Jul 03, 2006 at 03:05:47PM -0400, Jonathan S. Shapiro wrote:
> Swaroop fixed a bug in the polyinstantiator last night that wasn't
> exactly a fix. He's working on that now, but it would be very helpful to
> learn where the assertion check is so that we can introduce a proper
> test case.
Not sure if this is the same bug, but I've included the code (not very amazing code, but I think it's correct) it chokes on + stdout+err.
Sam
-------------- next part --------------
bitcc -l c -o test.c test.bitc
FINAL Polyinstantiation (s):
/home/sam/devel/coyotos/host/include/bitc/list.bitc:53:20: Identifier `_16bitc.prelude.nil' used here, Undefined.
FINAL Polyinstantiation (s):
/home/sam/devel/coyotos/host/include/bitc/list.bitc:53:20: _16bitc.prelude.nil Unbound in Gamma
while RandTing (bitc-version "0.10")
(defstruct _17bitc.stdio.stream:ref external bitc_stdioStream)
(defexception _24bitc.prelude.OutOfMemory)
(defexception _29bitc.prelude.IndexBoundsError)
(defexception _19bitc.string.NotUTF8)
(defexception _26bitc.string.NotUnicodeChar)
(defexception _23bitc.stdio.NoPermission)
(defexception _16bitc.stdio.AtEOF)
(defunion _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char:ref
_16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char
(_17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char _3car:char _3cdr:_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char))
(proclaim _16bitc.prelude.__+#FN2_4word_4word_4word : (fn (word word) word) external())
(proclaim _16bitc.prelude.__-#FN2_4word_4word_4word : (fn (word word) word) external())
(proclaim _16bitc.prelude.__/#FN2_4word_4word_4word : (fn (word word) word) external())
(proclaim _16bitc.prelude.__%#FN2_4word_4word_4word : (fn (word word) word) external())
(proclaim _17bitc.prelude.__==#FN2_4word_4word_4bool : (fn (word word) bool) external())
(proclaim _16bitc.prelude.__<#FN2_4word_4word_4bool : (fn (word word) bool) external())
(proclaim _23bitc.prelude.__index_lt : (fn (word word) bool) external bitc_index_lt())
(proclaim _11bitc.main.f : (fn ((vector string)) int32)())
(proclaim _14bitc.main.main : (fn ((vector string)) int32)())
(define _15bitc.list.null?#FN1UR1_20_17bitc.prelude.list_4char_4bool:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) bool) (lambda (_1l:_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char)
(if _1l._16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char
#t
#f)) ())
(define _13bitc.list.map#FN2FN1_4char_4unitUR1_20_17bitc.prelude.list_4char_4bool:(fn ((fn (char) ()) _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) bool) (lambda (_1f _3lst:_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char)
(switch _3lst
(_1x #t _16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char)
(_1x (begin (_1f _1x._3car)
(_13bitc.list.map#FN2FN1_4char_4unitUR1_20_17bitc.prelude.list_4char_4bool _1f _1x._3cdr)) _17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char)
)) ())
(define _13bitc.list.car#FN1UR1_20_17bitc.prelude.list_4char_4char:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) char) (lambda (_3lst)
(switch _3lst
(_1x (throw _29bitc.prelude.IndexBoundsError) _16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char)
(_1x _1x._3car _17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char)
)) ())
(define _13bitc.list.cdr#FN1UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) (lambda (_3lst)
(switch _3lst
(_1x (throw _29bitc.prelude.IndexBoundsError) _16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char)
(_1x _1x._3cdr _17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char)
)) ())
(define _18bitc.list.list-nth#FN2UR1_20_17bitc.prelude.list_4char_4word_4char:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char word) char) (lambda (_3lst _1n:word)
(if (_17bitc.prelude.__==#FN2_4word_4word_4bool _1n (the word 0))
(_13bitc.list.car#FN1UR1_20_17bitc.prelude.list_4char_4char _3lst)
(_18bitc.list.list-nth#FN2UR1_20_17bitc.prelude.list_4char_4word_4char (_13bitc.list.cdr#FN1UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char _3lst) (_16bitc.prelude.__-#FN2_4word_4word_4word _1n (the word 1))))) ())
(define _21bitc.list.list-length#FN1UR1_20_17bitc.prelude.list_4char_4word:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) word) (lambda (_3lst)
(letrec ((_13length-helper#FN2UR1_20_17bitc.prelude.list_4char_4word_4word:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char word) word) (lambda (_3lst _5count)
(if (_15bitc.list.null?#FN1UR1_20_17bitc.prelude.list_4char_4bool _3lst)
_5count
(_13length-helper#FN2UR1_20_17bitc.prelude.list_4char_4word_4word (_13bitc.list.cdr#FN1UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char _3lst) (_16bitc.prelude.__+#FN2_4word_4word_4word (the word 1) _5count))))))
(_13length-helper#FN2UR1_20_17bitc.prelude.list_4char_4word_4word _3lst (the word 0)))) ())
(define _17bitc.list.reverse#FN1UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) (lambda (_3lst)
(letrec ((_10do-reverse#FN2UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) (lambda (_2l1 _2l2)
(if (_15bitc.list.null?#FN1UR1_20_17bitc.prelude.list_4char_4bool _2l1)
_2l2
(_10do-reverse#FN2UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char (_13bitc.list.cdr#FN1UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char _2l1) (_17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char (_13bitc.list.car#FN1UR1_20_17bitc.prelude.list_4char_4char _2l1) _2l2))))))
(_10do-reverse#FN2UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char _3lst _16bitc.prelude.nil))) ())
(define _24bitc.vector.list->vector#FN1UR1_20_17bitc.prelude.list_4charK_4char:(fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) (vector char)) (lambda (_3lst:_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char)
(the (vector _2'a) (make-vectorL (_21bitc.list.list-length#FN1UR1_20_17bitc.prelude.list_4char_4word _3lst) (lambda (_1n)
(_18bitc.list.list-nth#FN2UR1_20_17bitc.prelude.list_4char_4word_4char _3lst _1n))))) ())
(proclaim _25bitc.string.string-length : (fn (string) word) external bitc_string_length())
(proclaim _22bitc.string.string-nth : (fn (string word) char) external bitc_string_nth())
(proclaim _22bitc.string.string-map : (fn (string (fn (char) ())) ()) external bitc_string_map())
(define (_24bitc.string.string->list _1s)
(let ((_3lst:( mutable _17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) _16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char))
(letrec ((_8__do1841 (lambda (_3pos)
(if (_17bitc.prelude.__==#FN2_4word_4word_4bool _3pos (the word 0))
_3lst
(begin (set! _3lst (_17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char (_22bitc.string.string-nth _1s (_16bitc.prelude.__-#FN2_4word_4word_4word _3pos (the word 1))) _3lst))
(_8__do1841 (_16bitc.prelude.__-#FN2_4word_4word_4word _3pos (the word 1))))))))
(_8__do1841 (_25bitc.string.string-length _1s)))))
(proclaim _24bitc.string.list->string : (fn (_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char) string) external bitc_list_string())
(proclaim _26bitc.string.vector->string : (fn ((vector char)) string) external bitc_vector_string())
(define (_24bitc.string.list->string _3lst:_17bitc.prelude.list#UR1_20_17bitc.prelude.list_4char)
(_26bitc.string.vector->string (_24bitc.vector.list->vector#FN1UR1_20_17bitc.prelude.list_4charK_4char _3lst)))
(proclaim _15bitc.stdio.eof? : (fn (_17bitc.stdio.stream) bool) external bitc_stdio_eofp())
(proclaim _15bitc.stdio.open : (fn (string string) _17bitc.stdio.stream) external bitc_stdio_open())
(proclaim _16bitc.stdio.close : (fn (_17bitc.stdio.stream) ()) external bitc_stdio_close())
(proclaim _16bitc.stdio.stdin : _17bitc.stdio.stream external bitc_stdio_stdin())
(proclaim _17bitc.stdio.stdout : _17bitc.stdio.stream external bitc_stdio_stdout())
(proclaim _17bitc.stdio.stderr : _17bitc.stdio.stream external bitc_stdio_stderr())
(proclaim _20bitc.stdio.read-char : (fn (_17bitc.stdio.stream) char) external bitc_stdio_read_char())
(proclaim _21bitc.stdio.write-char : (fn (_17bitc.stdio.stream char) ()) external bitc_stdio_write_char())
(proclaim _20bitc.stdio.read-byte : (fn (_17bitc.stdio.stream) uint8) external bitc_stdio_read_byte())
(proclaim _21bitc.stdio.write-byte : (fn (_17bitc.stdio.stream uint8) ()) external bitc_stdio_write_byte())
(define (_23bitc.stdio.write-string _3ios _1s)
(_13bitc.list.map#FN2FN1_4char_4unitUR1_20_17bitc.prelude.list_4char_4bool (lambda (_1c)
(_21bitc.stdio.write-char _3ios _1c)) (_24bitc.string.string->list _1s)))
(define _13test.numchars (array #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9 #\a #\b #\c #\d #\e #\f #\g #\h #\i #\j #\k #\l #\m #\n #\o #\p #\q #\r #\s #\t #\u #\v #\w #\x #\y #\z) ())
(define (_10test.itolr _1n:word _1b:word)
(_17bitc.prelude.cons#UR1_20_17bitc.prelude.list_4char (array-nth _13test.numchars (_16bitc.prelude.__%#FN2_4word_4word_4word _1n _1b)) (if (_16bitc.prelude.__<#FN2_4word_4word_4bool _1n _1b)
_16bitc.prelude.nil#UR1_20_17bitc.prelude.list_4char
(_10test.itolr (_16bitc.prelude.__/#FN2_4word_4word_4word _1n _1b) _1b))))
(define (_9test.itol _1n _1b)
(_24bitc.string.list->string (_17bitc.list.reverse#FN1UR1_20_17bitc.prelude.list_4charUR1_20_17bitc.prelude.list_4char (_10test.itolr _1n _1b))))
(define (_14bitc.main.main _6argVec:(vector string))
(begin (_23bitc.stdio.write-string _17bitc.stdio.stdout (_9test.itol (the word 337) (the word 2)))
(_21bitc.stdio.write-char _17bitc.stdio.stdout #\linefeed)
(the int32 0)))
bitcc: Polyinst.cxx:1531: bool UocInfo::be_polyinstantiate(std::ostream&, bool, long unsigned int): Assertion `ans' failed.
make: *** [test.c] Aborted
-------------- next part --------------
(bitc-version "0.10")
(provide main bitc.main)
(import stdio bitc.stdio)
(import str bitc.string)
(import lst bitc.list)
(define numchars (array #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9
#\a #\b #\c #\d #\e #\f #\g #\h #\i #\j
#\k #\l #\m #\n #\o #\p #\q #\r #\s #\t
#\u #\v #\w #\x #\y #\z))
(define (itolr n:word b:word)
(cons (array-nth numchars (% n b))
(if (< n b)
nil
(itolr (/ n b) b))))
(define (itol n b)
(str.list->string (lst.reverse (itolr n b))))
(define (main.main argVec:(vector string))
(stdio.write-string stdio.stdout (itol 337 2))
(stdio.write-char stdio.stdout #\linefeed)
(the int32 0))
More information about the bitc-dev
mailing list