make true flag automatic
original commit: a88ae6cec82e428a37827b12c0886dfc76569067
This commit is contained in:
parent
2a20927ac2
commit
9c36f8dc3d
|
@ -14,7 +14,7 @@
|
|||
;;; limitations under the License.
|
||||
|
||||
(module priminfo (priminfo-unprefixed priminfo-libraries priminfo-mask priminfo-signatures priminfo-arity primvec
|
||||
get-priminfo priminfo-boolean? priminfo-result-arity)
|
||||
get-priminfo priminfo-boolean? priminfo-true? priminfo-result-arity)
|
||||
(define-record-type priminfo
|
||||
(nongenerative)
|
||||
(sealed #t)
|
||||
|
@ -55,6 +55,28 @@
|
|||
'single]
|
||||
[else 'multiple]))))
|
||||
|
||||
(define priminfo-true?
|
||||
(lambda (info)
|
||||
(let ([signature* (priminfo-signatures info)])
|
||||
(cond
|
||||
[(null? signature*) 'unknown]
|
||||
[(andmap (lambda (sig)
|
||||
(let ([out (cdr sig)])
|
||||
(and (pair? out)
|
||||
(null? (cdr out))
|
||||
(or (pair? (car out))
|
||||
(not (or (eq? (car out) 'ptr)
|
||||
(eq? (car out) 'sub-ptr)
|
||||
(eq? (car out) 'boolean)
|
||||
(eq? (car out) 'bottom)
|
||||
(eq? (car out) 'who)
|
||||
(let ([name (symbol->string (car out))])
|
||||
(and (>= (string-length name) 6)
|
||||
(string=? (substring name 0 6) "maybe-")))))))))
|
||||
signature*)
|
||||
'true]
|
||||
[else #;(newline) #;(display (list info)) 'other]))))
|
||||
|
||||
(define signature->interface
|
||||
(lambda (sig)
|
||||
(define (ellipsis? x) (eq? x '...))
|
||||
|
|
|
@ -18,10 +18,11 @@
|
|||
(include "primref.ss")
|
||||
|
||||
(define record-prim!
|
||||
(lambda (prim unprefixed flags arity boolean-valued? result-arity signatures)
|
||||
(lambda (prim unprefixed flags arity boolean-valued? true-valued? result-arity signatures)
|
||||
(unless (eq? unprefixed prim) ($sputprop prim '*unprefixed* unprefixed))
|
||||
(let* ([flags (if boolean-valued? (fxlogor flags (prim-mask boolean-valued)) flags)]
|
||||
[flags (if (eq? 'single result-arity) (fxlogor flags (prim-mask single-valued)) flags)]
|
||||
[flags (if (eq? 'true true-valued?) (fxlogor flags (prim-mask true)) flags)]
|
||||
[arity (and (not (null? arity)) arity)])
|
||||
(when (and (eq? result-arity 'multiple) (any-set? (prim-mask single-valued) flags))
|
||||
($oops 'prims "inconsistent single-value information for ~s" prim))
|
||||
|
@ -42,6 +43,7 @@
|
|||
'#,(datum->syntax #'* (vector-map priminfo-mask v-info))
|
||||
'#,(datum->syntax #'* (vector-map priminfo-arity v-info))
|
||||
'#,(datum->syntax #'* (vector-map priminfo-boolean? v-info))
|
||||
'#,(datum->syntax #'* (vector-map priminfo-true? v-info))
|
||||
'#,(datum->syntax #'* (vector-map priminfo-result-arity v-info))
|
||||
'#,(datum->syntax #'* (vector-map priminfo-signatures v-info)))))))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user