[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