prelude: :gerbil/compiler/ssxi
package: gerbil/runtime

(begin
  (declare-type type-descriptor? (@lambda 1 #f))
  (declare-type struct-type? (@lambda 1 #f))
  (declare-type class-type? (@lambda 1 #f))
  (declare-type make-type-descriptor (@lambda 9 #f))
  (declare-type make-struct-type-descriptor (@lambda 6 #f))
  (declare-type make-class-type-descriptor (@lambda 8 #f))
  (declare-type type-descriptor-mixin (@lambda 1 #f))
  (declare-type type-descriptor-fields (@lambda 1 #f))
  (declare-type type-descriptor-plist (@lambda 1 #f))
  (declare-type type-descriptor-ctor (@lambda 1 #f))
  (declare-type type-descriptor-slots (@lambda 1 #f))
  (declare-type type-descriptor-methods (@lambda 1 #f))
  (declare-type type-descriptor-methods-set! (@lambda 2 #f))
  (declare-type type-descriptor-sealed? (@lambda 1 #f))
  (declare-type type-descriptor-seal! (@lambda 1 #f))
  (declare-type make-struct-type__% (@lambda 7 #f))
  (declare-type make-struct-type__0 (@lambda 6 #f))
  (declare-type make-struct-type (@case-lambda (6 #f) (7 #f)))
  (declare-type make-struct-predicate (@lambda 1 #f))
  (declare-type make-struct-field-accessor (@lambda 2 #f))
  (declare-type make-struct-field-mutator (@lambda 2 #f))
  (declare-type make-struct-field-unchecked-accessor (@lambda 2 #f))
  (declare-type make-struct-field-unchecked-mutator (@lambda 2 #f))
  (declare-type struct-field-offset (@lambda 2 #f))
  (declare-type struct-field-ref (@lambda 3 #f))
  (declare-type struct-field-set! (@lambda 4 #f))
  (declare-type struct-subtype? (@lambda 2 #f))
  (declare-type make-class-type (@lambda 6 #f))
  (declare-type class-linearize-mixins (@lambda 1 #f))
  (declare-type __linearize-mixins (@lambda 1 #f))
  (declare-type make-class-predicate (@lambda 1 #f))
  (declare-type make-class-slot-accessor (@lambda 2 #f))
  (declare-type make-class-slot-mutator (@lambda 2 #f))
  (declare-type make-class-slot-unchecked-accessor (@lambda 2 #f))
  (declare-type make-class-slot-unchecked-mutator (@lambda 2 #f))
  (declare-type class-slot-offset (@lambda 2 #f))
  (declare-type class-slot-ref (@lambda 3 #f))
  (declare-type class-slot-set! (@lambda 4 #f))
  (declare-type class-subtype? (@lambda 2 #f))
  (declare-type object? (@lambda 1 #f))
  (declare-type object-type (@lambda 1 #f))
  (declare-type
   direct-instance?
   (ast-rules
    (%#call)
    ((%#call _ klass obj)
     (%#call (%#ref ##structure-direct-instance-of?)
             obj
             (%#call (%#ref ##type-id) klass)))))
  (declare-type struct-instance? (@lambda 2 #f))
  (declare-type direct-struct-instance? (@lambda 2 direct-instance?))
  (declare-type class-instance? (@lambda 2 #f))
  (declare-type direct-class-instance? (@lambda 2 direct-instance?))
  (declare-type make-object (@lambda 2 #f))
  (declare-type make-struct-instance (@lambda (1) #f))
  (declare-type make-class-instance (@lambda (1) #f))
  (declare-type
   struct-instance-init!
   (lambda (ast)
     (ast-case
      ast
      (%#call %#ref)
      ((%#call _ self) #'(%#quote #!void))
      ((%#call _ (%#ref self) arg ...)
       (with-syntax*
        (((values arg-count) (length #'(arg ...)))
         ((off ...) (iota arg-count 1))
         (count arg-count))
        #'(%#if (%#call (%#ref ##fx<)
                        (%#quote count)
                        (%#call (%#ref ##vector-length) (%#ref self)))
                (%#begin (%#call (%#ref ##vector-set!)
                                 (%#ref self)
                                 (%#quote off)
                                 arg)
                         ...)
                (%#call (%#ref error)
                        (%#quote "struct-instance-init!: too many arguments for struct")
                        (%#ref self)))))
      ((%#call recur self arg ...)
       (with-syntax
        (($self (make-symbol (gensym '__self))))
        #'(%#let-values
           ((($self) self))
           (%#call recur (%#ref $self) arg ...)))))))
  (declare-type __struct-instance-init! (@lambda 2 #f))
  (declare-type class-instance-init! (@lambda (1) #f))
  (declare-type __class-instance-init! (@lambda 3 #f))
  (declare-type constructor-init! (@lambda (3) #f))
  (declare-type __constructor-init! (@lambda 4 #f))
  (declare-type struct-copy (@lambda 1 #f))
  (declare-type struct->list (@lambda 1 #f))
  (declare-type class->list (@lambda 1 #f))
  (declare-type unchecked-field-ref (@lambda 2 #f))
  (declare-type unchecked-field-set! (@lambda 3 #f))
  (declare-type unchecked-slot-ref (@lambda 2 #f))
  (declare-type unchecked-slot-set! (@lambda 3 #f))
  (declare-type slot-ref__% (@lambda 3 #f))
  (declare-type slot-ref__0 (@lambda 2 #f))
  (declare-type slot-ref (@case-lambda (2 #f) (3 #f)))
  (declare-type slot-set!__% (@lambda 4 #f))
  (declare-type slot-set!__0 (@lambda 3 #f))
  (declare-type slot-set! (@case-lambda (3 #f) (4 #f)))
  (declare-type __slot-error (@lambda 2 #f))
  (declare-type
   call-method
   (lambda (ast)
     (ast-case
      ast
      (%#call %#ref)
      ((%#call _ (%#ref self) method arg ...)
       (with-syntax
        (($method (make-symbol (gensym '__method))))
        #'(%#let-values
           ((($method) (%#call (%#ref method-ref) (%#ref self) method)))
           (%#if (%#ref $method)
                 (%#call (%#ref $method) (%#ref self) arg ...)
                 (%#call (%#ref error)
                         (%#quote "Missing method")
                         (%#ref self)
                         method)))))
      ((%#call recur self method arg ...)
       (with-syntax
        (($self (make-symbol (gensym '__self))))
        #'(%#let-values
           ((($self) self))
           (%#call recur (%#ref $self) method arg ...)))))))
  (declare-type method-ref (@lambda 2 #f))
  (declare-type checked-method-ref (@lambda 2 #f))
  (declare-type bound-method-ref (@lambda 2 #f))
  (declare-type checked-bound-method-ref (@lambda 2 #f))
  (declare-type find-method (@lambda 2 #f))
  (declare-type __find-method (@lambda 2 #f))
  (declare-type struct-find-method (@lambda 2 #f))
  (declare-type class-find-method (@lambda 2 #f))
  (declare-type mixin-find-method (@lambda 2 #f))
  (declare-type builtin-find-method (@lambda 2 #f))
  (declare-type direct-method-ref (@lambda 2 #f))
  (declare-type mixin-method-ref (@lambda 2 #f))
  (declare-type builtin-method-ref (@lambda 2 #f))
  (declare-type bind-method!__% (@lambda 4 #f))
  (declare-type bind-method!__0 (@lambda 3 #f))
  (declare-type bind-method! (@case-lambda (3 #f) (4 #f)))
  (declare-type bind-specializer! (@lambda 2 #f))
  (declare-type seal-class! (@lambda 1 #f))
  (declare-type next-method (@lambda 3 #f))
  (declare-type call-next-method (@lambda (3) #f))
  (declare-type write-style (@lambda 1 macro-writeenv-style))
  (declare-type write-object (@lambda 2 #f)))
