From 16ba9fbd8041697a0b3f23ec3bb0117216759ec0 Mon Sep 17 00:00:00 2001 From: Matthew Willis Date: Mon, 15 Jun 2009 17:09:20 +0900 Subject: [PATCH] extra/central implements the "central" pattern --- extra/central/authors.txt | 1 + extra/central/central-docs.factor | 10 ++++++++++ extra/central/central-tests.factor | 7 +++++++ extra/central/central.factor | 16 ++++++++++++++++ extra/central/tags.txt | 1 + 5 files changed, 35 insertions(+) create mode 100644 extra/central/authors.txt create mode 100644 extra/central/central-docs.factor create mode 100644 extra/central/central-tests.factor create mode 100644 extra/central/central.factor create mode 100644 extra/central/tags.txt diff --git a/extra/central/authors.txt b/extra/central/authors.txt new file mode 100644 index 0000000000..5645cd91bd --- /dev/null +++ b/extra/central/authors.txt @@ -0,0 +1 @@ +Matthew Willis diff --git a/extra/central/central-docs.factor b/extra/central/central-docs.factor new file mode 100644 index 0000000000..f6a0ba5957 --- /dev/null +++ b/extra/central/central-docs.factor @@ -0,0 +1,10 @@ +USING: central help.markup help.syntax ; + +HELP: CENTRAL: +{ $description + "This parsing word defines a pair of words useful for " + "implementing the \"central\" pattern: " { $snippet "symbol" } " and " + { $snippet "with-symbol" } ". This is a middle ground between excessive " + "stack manipulation and full-out locals, meant to solve the case where " + "one object is operated on by several related words." +} ; \ No newline at end of file diff --git a/extra/central/central-tests.factor b/extra/central/central-tests.factor new file mode 100644 index 0000000000..576a1fac97 --- /dev/null +++ b/extra/central/central-tests.factor @@ -0,0 +1,7 @@ +USING: central tools.test ; + +IN: scratchpad + +CENTRAL: test-central + +[ 3 ] [ 3 [ test-central ] with-test-central ] unit-test \ No newline at end of file diff --git a/extra/central/central.factor b/extra/central/central.factor new file mode 100644 index 0000000000..df100f2e5b --- /dev/null +++ b/extra/central/central.factor @@ -0,0 +1,16 @@ +USING: kernel lexer namespaces parser sequences words ; + +IN: central + +: define-central-getter ( word -- ) + dup [ get ] curry (( -- obj )) define-declared ; + +: define-central-setter ( word with-word -- ) + [ with-variable ] with (( object quot -- )) define-declared ; + +: define-central ( word-name -- ) + [ create-in dup define-central-getter ] keep + "with-" prepend create-in [ define-central-setter ] keep + make-inline ; + +SYNTAX: CENTRAL: ( -- ) scan define-central ; \ No newline at end of file diff --git a/extra/central/tags.txt b/extra/central/tags.txt new file mode 100644 index 0000000000..f4274299b1 --- /dev/null +++ b/extra/central/tags.txt @@ -0,0 +1 @@ +extensions -- 2.34.1