fix bugs, null-ary stops

This commit is contained in:
Sam Caldwell 2018-07-31 14:03:15 -04:00 committed by Sam Caldwell
parent 35b3811462
commit 938d3c519d
2 changed files with 42 additions and 31 deletions

View File

@ -3,8 +3,10 @@
;; Expected Output: ;; Expected Output:
;; +42 ;; +42
;; +18 ;; +18
;; +9
;; +88 ;; +88
;; -18 ;; -18
;; -9
(define-type-alias ds-type (define-type-alias ds-type
(U (Tuple Int) (U (Tuple Int)
@ -29,4 +31,12 @@
(on (asserted (tuple (bind x Int))) (on (asserted (tuple (bind x Int)))
(printf "+~v\n" x)) (printf "+~v\n" x))
(on (retracted (tuple (bind x Int))) (on (retracted (tuple (bind x Int)))
(printf "-~v\n" x))))) (printf "-~v\n" x))))
;; null-ary stop
(spawn ds-type
(start-facet meep
(fields)
(assert (tuple 9))
(on (asserted (tuple 88))
(stop meep)))))

View File

@ -27,7 +27,7 @@
;; DEBUG and utilities ;; DEBUG and utilities
print-type print-role print-type print-role
;; Extensions ;; Extensions
cond match cond
) )
(require (prefix-in syndicate: syndicate/actor-lang)) (require (prefix-in syndicate: syndicate/actor-lang))
@ -361,8 +361,9 @@
;; RoleType -> (Values Type Type) ;; RoleType -> (Values Type Type)
(define-for-syntax (analyze-role-input/output t) (define-for-syntax (analyze-role-input/output t)
(syntax-parse t (syntax-parse t
[(~Stop name:id τ-r) [(~Stop name:id τ-r ...)
(analyze-role-input/output #'τ-r)] #:with (τi τo) (analyze-roles #'(τ-r ...))
(values #'τi #'τo)]
[(~Role (name:id) [(~Role (name:id)
(~or (~Shares τ-s) (~or (~Shares τ-s)
(~Reacts τ-if τ-then ...)) ... (~Reacts τ-if τ-then ...)) ...
@ -651,10 +652,10 @@
( f ()) ( f ())
( s ())]) ( s ())])
(define-typed-syntax (stop facet-name:id cont) (define-typed-syntax (stop facet-name:id cont ...)
[ facet-name facet-name- ( : FacetName)] [ facet-name facet-name- ( : FacetName)]
[ cont cont- ( a (~effs)) ( r (~effs)) ( s (~effs)) ( f (~effs τ-f ...))] [ (begin #f cont ...) cont- ( a (~effs)) ( r (~effs)) ( s (~effs)) ( f (~effs τ-f ...))]
#:with τ (mk-Stop- #'(facet-name- τ-f ...)) #:with τ (mk-Stop- #`(facet-name- τ-f ...))
--------------------------------------------------------------------------------- ---------------------------------------------------------------------------------
[ (syndicate:stop-facet facet-name- cont-) ( : ★/t) [ (syndicate:stop-facet facet-name- cont-) ( : ★/t)
( s ()) ( s ())
@ -938,10 +939,10 @@
( a (~effs as2 ...)) ( r (~effs rs2 ...)) ( f (~effs fs2 ...)) ( s (~effs ss2 ...))] ( a (~effs as2 ...)) ( r (~effs rs2 ...)) ( f (~effs fs2 ...)) ( s (~effs ss2 ...))]
-------- --------
[ (if- e_tst- e1- e2-) [ (if- e_tst- e1- e2-)
( a (~effs as1 ... as2 ...)) ( a (as1 ... as2 ...))
( r (~effs rs1 ... rs2 ...)) ( r (rs1 ... rs2 ...))
( f (~effs fs1 ... fs2 ...)) ( f (fs1 ... fs2 ...))
( s (~effs ss1 ... ss2 ...))]] ( s (ss1 ... ss2 ...))]]
[(_ e_tst e1 e2) [(_ e_tst e1 e2)
[ e_tst e_tst- _] ; Any non-false value is truthy. [ e_tst e_tst- _] ; Any non-false value is truthy.
#:fail-unless (pure? #'e_tst-) "expression must be pure" #:fail-unless (pure? #'e_tst-) "expression must be pure"
@ -952,10 +953,10 @@
#:with τ (type-eval #'(U τ1 τ2)) #:with τ (type-eval #'(U τ1 τ2))
-------- --------
[ (if- e_tst- e1- e2-) ( : τ) [ (if- e_tst- e1- e2-) ( : τ)
( a (~effs as1 ... as2 ...)) ( a (as1 ... as2 ...))
( r (~effs rs1 ... rs2 ...)) ( r (rs1 ... rs2 ...))
( f (~effs fs1 ... fs2 ...)) ( f (fs1 ... fs2 ...))
( s (~effs ss1 ... ss2 ...))]]) ( s (ss1 ... ss2 ...))]])
;; copied from ext-stlc ;; copied from ext-stlc
(define-typed-syntax begin (define-typed-syntax begin
@ -966,10 +967,10 @@
( a (~effs as2 ...)) ( r (~effs rs2 ...)) ( f (~effs fs2 ...)) ( s (~effs ss2 ...))] ( a (~effs as2 ...)) ( r (~effs rs2 ...)) ( f (~effs fs2 ...)) ( s (~effs ss2 ...))]
-------- --------
[ (begin- e_unit- ... e-) [ (begin- e_unit- ... e-)
( a (~effs as1 ... ... as2 ...)) ( a (as1 ... ... as2 ...))
( r (~effs rs1 ... ... rs2 ...)) ( r (rs1 ... ... rs2 ...))
( f (~effs fs1 ... ... fs2 ...)) ( f (fs1 ... ... fs2 ...))
( s (~effs ss1 ... ... ss2 ...))]] ( s (ss1 ... ... ss2 ...))]]
[(_ e_unit ... e) [(_ e_unit ... e)
[ e_unit e_unit- ( : _) [ e_unit e_unit- ( : _)
( a (~effs as1 ...)) ( r (~effs rs1 ...)) ( f (~effs fs1 ...)) ( s (~effs ss1 ...))] ... ( a (~effs as1 ...)) ( r (~effs rs1 ...)) ( f (~effs fs1 ...)) ( s (~effs ss1 ...))] ...
@ -977,10 +978,10 @@
( a (~effs as2 ...)) ( r (~effs rs2 ...)) ( f (~effs fs2 ...)) ( s (~effs ss2 ...))] ( a (~effs as2 ...)) ( r (~effs rs2 ...)) ( f (~effs fs2 ...)) ( s (~effs ss2 ...))]
-------- --------
[ (begin- e_unit- ... e-) ( : τ_e) [ (begin- e_unit- ... e-) ( : τ_e)
( a (~effs as1 ... ... as2 ...)) ( a (as1 ... ... as2 ...))
( r (~effs rs1 ... ... rs2 ...)) ( r (rs1 ... ... rs2 ...))
( f (~effs fs1 ... ... fs2 ...)) ( f (fs1 ... ... fs2 ...))
( s (~effs ss1 ... ... ss2 ...))]]) ( s (ss1 ... ... ss2 ...))]])
;; copied from ext-stlc ;; copied from ext-stlc
(define-typed-syntax let (define-typed-syntax let
@ -994,10 +995,10 @@
( s (~effs ss ...))] ( s (~effs ss ...))]
---------------------------------------------------------- ----------------------------------------------------------
[ (let- ([x- e-] ...) e_body-) [ (let- ([x- e-] ...) e_body-)
( a (~effs as ...)) ( a (as ...))
( r (~effs rs ...)) ( r (rs ...))
( f (~effs fs ...)) ( f (fs ...))
( s (~effs ss ...))]] ( s (ss ...))]]
[(_ ([x e] ...) e_body ...) [(_ ([x e] ...) e_body ...)
[ e e- : τ_x] ... [ e e- : τ_x] ...
#:fail-unless (stx-andmap pure? #'(e- ...)) "expressions must be pure" #:fail-unless (stx-andmap pure? #'(e- ...)) "expressions must be pure"
@ -1008,10 +1009,10 @@
( s (~effs ss ...))] ( s (~effs ss ...))]
---------------------------------------------------------- ----------------------------------------------------------
[ (let- ([x- e-] ...) e_body-) ( : τ_body) [ (let- ([x- e-] ...) e_body-) ( : τ_body)
( a (~effs as ...)) ( a (as ...))
( r (~effs rs ...)) ( r (rs ...))
( f (~effs fs ...)) ( f (fs ...))
( s (~effs ss ...))]]) ( s (ss ...))]])
;; copied from ext-stlc ;; copied from ext-stlc
(define-typed-syntax let* (define-typed-syntax let*