diff --git a/basis/changer/authors.txt b/basis/changer/authors.txt new file mode 100644 index 0000000000..7c1b2f2279 --- /dev/null +++ b/basis/changer/authors.txt @@ -0,0 +1 @@ +Doug Coleman diff --git a/basis/changer/changer-tests.factor b/basis/changer/changer-tests.factor new file mode 100644 index 0000000000..af716409cd --- /dev/null +++ b/basis/changer/changer-tests.factor @@ -0,0 +1,17 @@ +! Copyright (C) 2015 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: changer math tools.test ; +IN: changer.tests + +TUPLE: changer-tester test-slot ; + +{ + T{ changer-tester f 1 } +} [ T{ changer-tester f 0 } [ 1 + ] change: test-slot ] unit-test + +: change-test-slot ( obj -- obj ) + [ 1 + ] change: test-slot ; + +{ + T{ changer-tester f 1 } +} [ T{ changer-tester f 0 } change-test-slot ] unit-test diff --git a/basis/changer/changer.factor b/basis/changer/changer.factor new file mode 100644 index 0000000000..4f14da1909 --- /dev/null +++ b/basis/changer/changer.factor @@ -0,0 +1,11 @@ +! Copyright (C) 2015 Doug Coleman. +! See http://factorcode.org/license.txt for BSD license. +USING: fry kernel lexer macros quotations sequences words ; +IN: changer + +MACRO: inline-changer ( name -- quot' ) + [ ">>" append ] [ ">>" prepend ] bi + [ "accessors" lookup-word 1quotation ] bi@ + '[ over [ [ @ ] dip call ] dip swap @ ] ; + +SYNTAX: change: scan-token '[ _ inline-changer ] append! ;