Skip to content

Commit f8ee7ba

Browse files
committed
15 minutes of vectors
1 parent bed20c8 commit f8ee7ba

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

src/syntax/syntax-check.rkt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,14 @@
162162
(for ([var (in-list vars)])
163163
(match var
164164
[(? identifier? x) (sow var)]
165+
;; FPCore syntax for 1D arrays
166+
[#`(#,(? identifier? x) 2) (sow x)]
165167
[#`(! #,props ... #,name)
166168
(check-properties* props (immutable-bound-id-set '()) error!)
167169
(cond
168170
[(identifier? name) (sow name)]
169-
[else (error! var "Annotated argument ~a is not a variable name" name)])])))))
171+
[else (error! var "Annotated argument ~a is not a variable name" name)])]
172+
[_ (error! var "Invalid syntax ~a for variable name" var)])))))
170173
(when (check-duplicate-identifier vars*)
171174
(error! stx "Duplicate argument name ~a" (check-duplicate-identifier vars*)))
172175
(check-properties* props (immutable-bound-id-set vars*) error!)

src/syntax/type-check.rkt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
(define prop-dict (props->dict props))
2929
(define arg-prec (dict-ref prop-dict ':precision prec))
3030
(values name arg-prec)]
31-
[(? symbol? name) (values name prec)])))
31+
[(? symbol? name) (values name prec)]
32+
[(list var 2) (values var '(real 2))])))
3233

3334
(define ctx (context var-names (get-representation prec) (map get-representation var-precs)))
3435
(assert-expression-type! body prop-dict ctx))

src/syntax/types.rkt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<bool>
1212
<binary32>
1313
<binary64>
14+
<binary64x2>
1415
(struct-out context)
1516
*context*
1617
context-extend
@@ -113,6 +114,18 @@
113114
#:total-bits 64
114115
#:special-value? nan?))
115116

117+
(define <binary64x2>
118+
(representation 'binary64x2
119+
'(real 2)
120+
(curry vector-map bigfloat->flonum)
121+
(lambda (x)
122+
(parameterize ([bf-precision 53])
123+
(vector-map bf x)))
124+
(curry vector-map ordinal->flonum)
125+
(curry vector-map flonum->ordinal)
126+
'(64 2)
127+
(lambda (v) (ormap identity (vector->list v)))))
128+
116129
;; Contexts
117130

118131
(struct context (vars repr var-reprs) #:transparent)

0 commit comments

Comments
 (0)