diff --git a/core/hashtables/hashtables.factor b/core/hashtables/hashtables.factor index d6fa375dd2..ee1fcdefa7 100644 --- a/core/hashtables/hashtables.factor +++ b/core/hashtables/hashtables.factor @@ -181,4 +181,12 @@ M: hashtable assoc-like [ hashcode 0x13c6ef37 + ] dip [ 6 shift ] [ -2 shift ] bi + + ; +ERROR: malformed-hashtable-pair seq pair ; + +: check-hashtable ( seq -- seq ) + dup [ dup length 2 = [ drop ] [ malformed-hashtable-pair ] if ] each ; + +: parse-hashtable ( seq -- hashtable ) + check-hashtable H{ } assoc-clone-like ; + INSTANCE: hashtable assoc diff --git a/core/syntax/syntax.factor b/core/syntax/syntax.factor index e356f8d88e..441a4dfb7d 100644 --- a/core/syntax/syntax.factor +++ b/core/syntax/syntax.factor @@ -97,7 +97,7 @@ IN: bootstrap.syntax "V{" [ \ } [ >vector ] parse-literal ] define-core-syntax "B{" [ \ } [ >byte-array ] parse-literal ] define-core-syntax "BV{" [ \ } [ >byte-vector ] parse-literal ] define-core-syntax - "H{" [ \ } [ >hashtable ] parse-literal ] define-core-syntax + "H{" [ \ } [ parse-hashtable ] parse-literal ] define-core-syntax "T{" [ parse-tuple-literal suffix! ] define-core-syntax "W{" [ \ } [ first ] parse-literal ] define-core-syntax "HS{" [ \ } [ >hash-set ] parse-literal ] define-core-syntax