diff --git a/basis/constructors/constructors.factor b/basis/constructors/constructors.factor index 8cfeb83910..7a98cd5e0a 100644 --- a/basis/constructors/constructors.factor +++ b/basis/constructors/constructors.factor @@ -18,6 +18,6 @@ MACRO: set-slots ( slots -- quot ) SYNTAX: CONSTRUCTOR: scan-word [ name>> "<" ">" surround create-in ] keep - "(" expect ")" parse-effect + complete-effect parse-definition define-constructor ; \ No newline at end of file diff --git a/basis/functors/functors.factor b/basis/functors/functors.factor index d69233b8d1..309154fb49 100644 --- a/basis/functors/functors.factor +++ b/basis/functors/functors.factor @@ -42,7 +42,7 @@ M: object fake-quotations> ; parse-definition >fake-quotations parsed \ fake-quotations> parsed ; : parse-declared* ( accum -- accum ) - "(" expect ")" parse-effect + complete-effect [ parse-definition* ] dip parsed ; @@ -71,7 +71,7 @@ SYNTAX: `M: SYNTAX: `C: scan-param parsed scan-param parsed - "(" expect ")" parse-effect + complete-effect [ [ [ boa ] curry ] over push-all ] dip parsed \ define-declared* parsed ; diff --git a/basis/locals/parser/parser.factor b/basis/locals/parser/parser.factor index 3417d67e09..5e9bdfbed6 100644 --- a/basis/locals/parser/parser.factor +++ b/basis/locals/parser/parser.factor @@ -104,7 +104,7 @@ M: lambda-parser parse-quotation ( -- quotation ) (parse-lambda) ?rewrite-closures ; : parse-locals ( -- effect vars assoc ) - "(" expect ")" parse-effect + complete-effect dup in>> [ dup pair? [ first ] when ] map make-locals ; diff --git a/core/effects/parser/parser.factor b/core/effects/parser/parser.factor index 2cc2e9f0a7..b9cb0ddcc9 100644 --- a/core/effects/parser/parser.factor +++ b/core/effects/parser/parser.factor @@ -27,5 +27,8 @@ ERROR: bad-effect ; parse-effect-tokens { "--" } split1 dup [ ] [ "Stack effect declaration must contain --" throw ] if ; +: complete-effect ( -- effect ) + "(" expect ")" parse-effect ; + : parse-call( ( accum word -- accum ) [ ")" parse-effect ] dip 2array over push-all ; \ No newline at end of file diff --git a/core/parser/parser.factor b/core/parser/parser.factor index 62177ec0c7..871f7c5321 100644 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -134,7 +134,7 @@ M: f parse-quotation \ ] parse-until >quotation ; : (:) ( -- word def effect ) CREATE-WORD - "(" expect ")" parse-effect + complete-effect parse-definition swap ; ERROR: bad-number ;