From f495fc0d8c77f7f90b3a76ec45bde02573156b54 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Tue, 28 Sep 2010 14:08:23 -0500 Subject: [PATCH] Add set-slots{ and set-slots[ words in slots.syntax and document them. --- extra/slots/syntax/syntax-docs.factor | 28 ++++++++++++++++++++++++--- extra/slots/syntax/syntax.factor | 14 +++++++++++++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/extra/slots/syntax/syntax-docs.factor b/extra/slots/syntax/syntax-docs.factor index 84e6e89dac..6e201eac77 100755 --- a/extra/slots/syntax/syntax-docs.factor +++ b/extra/slots/syntax/syntax-docs.factor @@ -22,11 +22,33 @@ HELP: slots{ "{ 3 5 }" } ; +HELP: set-slots{ +{ $description "Sets slot values in a tuple from an array." } +{ $example "USING: prettyprint slots.syntax kernel ;" + "IN: slots.syntax.example" + "TUPLE: rectangle width height ;" + "rectangle new { 3 5 } set-slots{ width height } ." + "T{ rectangle { width 3 } { height 5 } }" +} ; + +HELP: set-slots[ +{ $description "Sets slot values in a tuple from the stack." } +{ $example "USING: prettyprint slots.syntax kernel ;" + "IN: slots.syntax.example" + "TUPLE: rectangle width height ;" + "rectangle new 3 5 set-slots[ width height ] ." + "T{ rectangle { width 3 } { height 5 } }" +} ; + ARTICLE: "slots.syntax" "Slots syntax sugar" -"The " { $vocab-link "slots.syntax" } " vocabulary provides an alternative syntax for taking a sequence of slots from a tuple." $nl +"The " { $vocab-link "slots.syntax" } " vocabulary provides an alternative syntax for getting and setting multiple values of a tuple." $nl "Syntax sugar for cleaving slots to the stack:" { $subsections POSTPONE: slots[ } -"Syntax sugar for cleaving slots to an array:" -{ $subsections POSTPONE: slots{ } ; +"Cleaving slots to an array:" +{ $subsections POSTPONE: slots{ } +"Setting slots from the stack:" +{ $subsections POSTPONE: set-slots[ } +"Setting slots from an array:" +{ $subsections POSTPONE: set-slots{ } ; ABOUT: "slots.syntax" diff --git a/extra/slots/syntax/syntax.factor b/extra/slots/syntax/syntax.factor index 7bfe238fa8..9b647bc5c6 100755 --- a/extra/slots/syntax/syntax.factor +++ b/extra/slots/syntax/syntax.factor @@ -1,7 +1,7 @@ ! Copyright (C) 2010 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. USING: combinators combinators.smart fry lexer quotations -sequences slots ; +sequences slots words ; IN: slots.syntax SYNTAX: slots[ @@ -11,3 +11,15 @@ SYNTAX: slots[ SYNTAX: slots{ "}" [ reader-word 1quotation ] map-tokens '[ [ _ cleave ] output>array ] append! ; + +: writer-word* ( name -- word ) + ">>" prepend "accessors" lookup ; + +SYNTAX: set-slots[ + "]" [ writer-word* 1quotation ] map-tokens + '[ _ spread ] append! ; + +SYNTAX: set-slots{ + "}" [ writer-word* 1quotation ] map-tokens + [ length ] [ ] bi + '[ _ firstn _ spread ] append! ; -- 2.34.1