]> gitweb.factorcode.org Git - factor.git/commitdiff
Mandatory stack effect annotations
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 8 Jun 2008 20:32:55 +0000 (15:32 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sun, 8 Jun 2008 20:32:55 +0000 (15:32 -0500)
128 files changed:
core/alien/c-types/c-types.factor
core/alien/compiler/compiler.factor
core/alien/remote-control/remote-control.factor
core/bootstrap/compiler/compiler.factor
core/bootstrap/image/image.factor
core/bootstrap/syntax.factor
core/classes/algebra/algebra-tests.factor
core/classes/classes-tests.factor
core/classes/classes.factor
core/classes/tuple/tuple-tests.factor
core/command-line/command-line.factor
core/compiler/constants/constants.factor
core/compiler/errors/errors.factor
core/compiler/tests/intrinsics.factor
core/compiler/tests/simple.factor
core/compiler/tests/stack-trace.factor
core/compiler/tests/templates.factor
core/continuations/continuations.factor
core/cpu/architecture/architecture.factor
core/cpu/ppc/bootstrap.factor
core/cpu/x86/32/32.factor
core/cpu/x86/allot/allot.factor
core/cpu/x86/architecture/architecture.factor
core/cpu/x86/assembler/assembler.factor
core/cpu/x86/bootstrap.factor
core/cpu/x86/intrinsics/intrinsics.factor
core/debugger/debugger.factor
core/effects/effects.factor
core/generator/generator.factor
core/generator/registers/registers.factor
core/generic/generic-tests.factor
core/generic/standard/engines/tag/tag.factor
core/generic/standard/engines/tuple/tuple.factor
core/generic/standard/standard-tests.factor
core/inference/backend/backend-docs.factor
core/inference/backend/backend.factor
core/inference/class/class-tests.factor
core/inference/class/class.factor
core/inference/dataflow/dataflow.factor
core/inference/errors/errors.factor
core/inference/inference-docs.factor
core/inference/inference-tests.factor
core/inference/inference.factor
core/inference/known-words/known-words.factor
core/inference/state/state.factor
core/inference/transforms/transforms-tests.factor
core/io/files/files-tests.factor
core/io/files/files.factor
core/io/streams/string/string.factor
core/math/bitfields/bitfields-tests.factor
core/math/integers/integers-tests.factor
core/math/intervals/intervals-tests.factor
core/math/intervals/intervals.factor
core/math/parser/parser.factor
core/optimizer/control/control.factor
core/parser/parser-docs.factor
core/parser/parser.factor
core/prettyprint/backend/backend.factor
core/prettyprint/prettyprint.factor
core/prettyprint/sections/sections.factor
core/slots/slots.factor
core/syntax/syntax-docs.factor
core/syntax/syntax.factor
core/threads/threads.factor
core/vocabs/loader/loader.factor
core/words/words-docs.factor
core/words/words.factor
extra/bootstrap/help/help.factor
extra/calendar/calendar.factor
extra/cocoa/messages/messages.factor
extra/concurrency/mailboxes/mailboxes.factor
extra/concurrency/messaging/messaging.factor
extra/core-foundation/fsevents/fsevents.factor
extra/documents/documents.factor
extra/editors/editors.factor
extra/fry/fry.factor
extra/help/help.factor
extra/help/markup/markup.factor
extra/html/elements/elements.factor
extra/io/encodings/8-bit/8-bit.factor
extra/io/pipes/pipes.factor
extra/io/sockets/sockets.factor
extra/io/unix/launcher/launcher.factor
extra/io/unix/select/select.factor
extra/locals/locals.factor
extra/macros/macros.factor
extra/match/match.factor
extra/math/functions/functions-tests.factor
extra/memoize/memoize.factor
extra/models/models.factor
extra/opengl/opengl.factor
extra/openssl/openssl.factor
extra/optimizer/debugger/debugger.factor
extra/qualified/qualified.factor
extra/sequences/lib/lib.factor
extra/tools/deploy/backend/backend.factor
extra/tools/deploy/config/config.factor
extra/tools/disassembler/disassembler.factor
extra/tools/walker/walker.factor
extra/ui/clipboards/clipboards.factor
extra/ui/commands/commands-docs.factor
extra/ui/gadgets/buttons/buttons.factor
extra/ui/gadgets/editors/editors.factor
extra/ui/gadgets/frames/frames.factor
extra/ui/gadgets/gadgets.factor
extra/ui/gadgets/grids/grids.factor
extra/ui/gadgets/labelled/labelled.factor
extra/ui/gadgets/panes/panes.factor
extra/ui/gadgets/paragraphs/paragraphs.factor
extra/ui/gadgets/scrollers/scrollers.factor
extra/ui/gadgets/sliders/sliders.factor
extra/ui/gadgets/theme/theme.factor
extra/ui/gadgets/viewports/viewports.factor
extra/ui/gadgets/worlds/worlds.factor
extra/ui/render/render.factor
extra/ui/tools/browser/browser.factor
extra/ui/tools/debugger/debugger.factor
extra/ui/tools/deploy/deploy.factor
extra/ui/tools/inspector/inspector.factor
extra/ui/tools/listener/listener.factor
extra/ui/tools/operations/operations.factor
extra/ui/tools/profiler/profiler.factor
extra/ui/tools/search/search.factor
extra/ui/tools/tools.factor
extra/ui/tools/walker/walker.factor
extra/ui/tools/workspace/workspace.factor
extra/unix/stat/macosx/macosx.factor
extra/values/values.factor

index 44c0112c77dbddd211fb342c248a4b71d591278a..87fa553dc37d63e2268bc871c01bc295cb72a313 100755 (executable)
@@ -5,7 +5,7 @@ assocs kernel kernel.private libc math
 namespaces parser sequences strings words assocs splitting
 math.parser cpu.architecture alien alien.accessors quotations
 layouts system compiler.units io.files io.encodings.binary
-accessors combinators ;
+accessors combinators effects ;
 IN: alien.c-types
 
 DEFER: <int>
@@ -214,7 +214,8 @@ M: long-long-type box-return ( type -- )
     >r ">c-" swap "-array" 3append r> create ;
 
 : define-to-array ( type vocab -- )
-    [ to-array-word ] 2keep >c-array-quot define ;
+    [ to-array-word ] 2keep >c-array-quot
+    (( array -- byte-array )) define-declared ;
 
 : c-array>quot ( type vocab -- quot )
     [
@@ -227,7 +228,8 @@ M: long-long-type box-return ( type -- )
     >r "c-" swap "-array>" 3append r> create ;
 
 : define-from-array ( type vocab -- )
-    [ from-array-word ] 2keep c-array>quot define ;
+    [ from-array-word ] 2keep c-array>quot
+    (( c-ptr n -- array )) define-declared ;
 
 : define-primitive-type ( type name -- )
     "alien.c-types"
index 67665b4d7ebc47f474fa923cc1c4d27da24ecc14..ac1895e37e0079f661fb3549985b3ac675c159a8 100755 (executable)
@@ -216,7 +216,8 @@ M: alien-invoke-error summary
     drop
     "Words calling ``alien-invoke'' must be compiled with the optimizing compiler." ;
 
-: pop-parameters pop-literal nip [ expand-constants ] map ;
+: pop-parameters ( -- seq )
+    pop-literal nip [ expand-constants ] map ;
 
 : stdcall-mangle ( symbol node -- symbol )
     "@"
index 1d713f6eddaa59a37aacf96ad7cf369b30b77b39..027663a6458cdbeb72ff3bc552ffd5ac8886eb9e 100755 (executable)
@@ -4,14 +4,14 @@ USING: alien alien.c-types alien.strings parser threads words
 kernel.private kernel io.encodings.utf8 ;
 IN: alien.remote-control
 
-: eval-callback
+: eval-callback ( -- callback )
     "void*" { "char*" } "cdecl"
     [ eval>string utf8 malloc-string ] alien-callback ;
 
-: yield-callback
+: yield-callback ( -- callback )
     "void" { } "cdecl" [ yield ] alien-callback ;
 
-: sleep-callback
+: sleep-callback ( -- callback )
     "void" { "long" } "cdecl" [ sleep ] alien-callback ;
 
 : ?callback ( word -- alien )
index 7ad1c6978b30e916b775ff679137d09e477aea0c..4753d9b1b4acad8700066e225976772257cedddc 100755 (executable)
@@ -18,7 +18,8 @@ IN: bootstrap.compiler
 
 enable-compiler
 
-: compile-uncompiled [ compiled? not ] filter compile ;
+: compile-uncompiled ( words -- )
+    [ compiled? not ] filter compile ;
 
 nl
 "Compiling..." write flush
index aa7377adbf10618ad0d0c6bea5327c81fcf29dc4..183c7d1888d33352f104fb4bc4da0b853522510b 100755 (executable)
@@ -85,13 +85,6 @@ SYMBOL: objects
 : 1-offset              8 ; inline
 : -1-offset             9 ; inline
 
-: array-start 2 bootstrap-cells object tag-number - ;
-: scan@ array-start bootstrap-cell - ;
-: wrapper@ bootstrap-cell object tag-number - ;
-: word-xt@ 8 bootstrap-cells object tag-number - ;
-: quot-array@ bootstrap-cell object tag-number - ;
-: quot-xt@ 3 bootstrap-cells object tag-number - ;
-
 : jit-define ( quot rc rt offset name -- )
     >r { [ { } make ] [ ] [ ] [ ] } spread 4array r> set ;
 
@@ -203,9 +196,9 @@ GENERIC: ' ( obj -- ptr )
 
 ! Bignums
 
-: bignum-bits bootstrap-cell-bits 2 - ;
+: bignum-bits ( -- n ) bootstrap-cell-bits 2 - ;
 
-: bignum-radix bignum-bits 2^ 1- ;
+: bignum-radix ( -- n ) bignum-bits 2^ 1- ;
 
 : bignum>seq ( n -- seq )
     #! n is positive or zero.
@@ -248,15 +241,15 @@ M: float '
 
 ! Padded with fixnums for 8-byte alignment
 
-: t, t t-offset fixup ;
+: t, ( -- ) t t-offset fixup ;
 
 M: f '
     #! f is #define F RETAG(0,F_TYPE)
     drop \ f tag-number ;
 
-:  0,  0 >bignum '  0-offset fixup ;
-:  1,  1 >bignum '  1-offset fixup ;
-: -1, -1 >bignum ' -1-offset fixup ;
+:  0, ( -- )  0 >bignum '  0-offset fixup ;
+:  1, ( -- )  1 >bignum '  1-offset fixup ;
+: -1, ( -- ) -1 >bignum ' -1-offset fixup ;
 
 ! Words
 
index d995cc31762e4678b41fd62324aa8c1095ec301c..f3d7707878b789d60ba09860cb9d0a76fbf22b6d 100755 (executable)
@@ -10,6 +10,7 @@ IN: bootstrap.syntax
     "\""
     "#!"
     "("
+    "(("
     ":"
     ";"
     "<PRIVATE"
index 0b8fb9680be970040909ae2e1164a6d62710aafe..28e899d08ba89c0188b152e3d691d6a1d9b7d2f3 100755 (executable)
@@ -12,11 +12,11 @@ IN: classes.algebra.tests
 \ flatten-class must-infer\r
 \ flatten-builtin-class must-infer\r
 \r
-: class= [ class<= ] [ swap class<= ] 2bi and ;\r
+: class= ( cls1 cls2 -- ? ) [ class<= ] [ swap class<= ] 2bi and ;\r
 \r
-: class-and* >r class-and r> class= ;\r
+: class-and* ( cls1 cls2 cls3 -- ? ) >r class-and r> class= ;\r
 \r
-: class-or* >r class-or r> class= ;\r
+: class-or* ( cls1 cls2 cls3 -- ? ) >r class-or r> class= ;\r
 \r
 [ t ] [ object  object  object class-and* ] unit-test\r
 [ t ] [ fixnum  object  fixnum class-and* ] unit-test\r
@@ -193,9 +193,9 @@ UNION: z1 b1 c1 ;
 [ f ] [ null { number fixnum null } min-class ] unit-test\r
 \r
 ! Test for hangs?\r
-: random-class classes random ;\r
+: random-class ( -- class ) classes random ;\r
 \r
-: random-op\r
+: random-op ( -- word )\r
     {\r
         class-and\r
         class-or\r
@@ -211,13 +211,13 @@ UNION: z1 b1 c1 ;
     ] unit-test\r
 ] times\r
 \r
-: random-boolean\r
+: random-boolean ( -- ? )\r
     { t f } random ;\r
 \r
-: boolean>class\r
+: boolean>class ( ? -- class )\r
     object null ? ;\r
 \r
-: random-boolean-op\r
+: random-boolean-op ( -- word )\r
     {\r
         and\r
         or\r
@@ -225,9 +225,10 @@ UNION: z1 b1 c1 ;
         xor\r
     } random ;\r
 \r
-: class-xor [ class-or ] 2keep class-and class-not class-and ;\r
+: class-xor ( cls1 cls2 -- cls3 )\r
+    [ class-or ] 2keep class-and class-not class-and ;\r
 \r
-: boolean-op>class-op\r
+: boolean-op>class-op ( word -- word' )\r
     {\r
         { and class-and }\r
         { or class-or }\r
index eb55b5fccdba8129c02e3d0678c1cd59bb777b85..a03fed7fcbf3c8503730219504d1bad839037d5d 100755 (executable)
@@ -79,7 +79,7 @@ INSTANCE: integer mx1
 [ \ mx1 forget ] with-compilation-unit
 
 ! Empty unions were causing problems
-GENERIC: empty-union-test
+GENERIC: empty-union-test ( obj -- obj )
 
 UNION: empty-union-1 ;
 
@@ -162,7 +162,7 @@ TUPLE: flat-mx-2-1 ; INSTANCE: flat-mx-2-1 flat-mx-2
 [ t ] [ "hi" \ hi-tag instance? ] unit-test
 
 ! Regression
-GENERIC: method-forget-test
+GENERIC: method-forget-test ( obj -- obj )
 TUPLE: method-forget-class ;
 M: method-forget-class method-forget-test ;
 
index 2c9e1d4787d67235b92474fbc7177cb4fda5deb3..91fc4c60a739583f81e25649296360fa9a5bc5be 100755 (executable)
@@ -38,7 +38,7 @@ PREDICATE: tuple-class < class
 : predicate-word ( word -- predicate )
     [ word-name "?" append ] keep word-vocabulary create ;
 
-: predicate-effect 1 { "?" } <effect> ;
+: predicate-effect T{ effect f 1 { "?" } } ;
 
 PREDICATE: predicate < word "predicating" word-prop >boolean ;
 
index ab6c139f7b00832a9f72ce1ffa11a23a4fa58e94..dc99734ce51b2f529c46810e4a0c527df35c007a 100755 (executable)
@@ -8,7 +8,7 @@ columns math.order classes.private ;
 IN: classes.tuple.tests
 
 TUPLE: rect x y w h ;
-: <rect> rect boa ;
+: <rect> ( x y w h -- rect ) rect boa ;
 
 : move ( x rect -- rect )
     [ + ] change-x ;
@@ -69,7 +69,7 @@ C: <predicate-test> predicate-test
 PREDICATE: silly-pred < tuple
     class \ rect = ;
 
-GENERIC: area
+GENERIC: area ( obj -- n )
 M: silly-pred area dup w>> swap h>> * ;
 
 TUPLE: circle radius ;
@@ -164,7 +164,7 @@ C: <t4> t4
 [ 1 ] [ <t4> 1 m2 ] unit-test
 
 ! another combination issue
-GENERIC: silly
+GENERIC: silly ( obj -- obj obj )
 
 UNION: my-union slice repetition column array vector reversed ;
 
@@ -208,8 +208,8 @@ C: <erg's-reshape-problem> erg's-reshape-problem
 
 ! We want to make sure constructors are recompiled when
 ! tuples are reshaped
-: cons-test-1 \ erg's-reshape-problem new ;
-: cons-test-2 \ erg's-reshape-problem boa ;
+: cons-test-1 ( -- tuple ) \ erg's-reshape-problem new ;
+: cons-test-2 ( a b c d -- tuple ) \ erg's-reshape-problem boa ;
 
 "IN: classes.tuple.tests TUPLE: erg's-reshape-problem a b c d e f ;" eval
 
@@ -242,7 +242,7 @@ C: <laptop> laptop
 [ t ] [ "laptop" get computer? ] unit-test
 [ t ] [ "laptop" get tuple? ] unit-test
 
-: test-laptop-slot-values
+: test-laptop-slot-values ( -- )
     [ laptop ] [ "laptop" get class ] unit-test
     [ "Pentium" ] [ "laptop" get cpu>> ] unit-test
     [ 128 ] [ "laptop" get ram>> ] unit-test
@@ -275,7 +275,7 @@ C: <server> server
 [ t ] [ "server" get computer? ] unit-test
 [ t ] [ "server" get tuple? ] unit-test
 
-: test-server-slot-values
+: test-server-slot-values ( -- )
     [ server ] [ "server" get class ] unit-test
     [ "PowerPC" ] [ "server" get cpu>> ] unit-test
     [ 64 ] [ "server" get ram>> ] unit-test
@@ -375,7 +375,7 @@ C: <test2> test2
 
 "a" "b" <test2> "test" set
 
-: test-a/b
+: test-a/b ( -- )
     [ "a" ] [ "test" get a>> ] unit-test
     [ "b" ] [ "test" get b>> ] unit-test ;
 
@@ -403,7 +403,7 @@ TUPLE: move-up-2 < move-up-1 c ;
 
 T{ move-up-2 f "a" "b" "c" } "move-up" set
 
-: test-move-up
+: test-move-up ( -- )
     [ "a" ] [ "move-up" get a>> ] unit-test
     [ "b" ] [ "move-up" get b>> ] unit-test
     [ "c" ] [ "move-up" get c>> ] unit-test ;
index 84020abca0e5e99ec01ae06395d6438da0af3cd4..fb4fd374a76a3a86449943d349c9b127922e5d59 100644 (file)
@@ -36,7 +36,7 @@ SYMBOL: main-vocab-hook
         main-vocab-hook get [ call ] [ "listener" ] if*
     ] if ;
 
-: default-cli-args
+: default-cli-args ( -- )
     global [
         "quiet" off
         "script" off
index 8610f490eca490000785d909f4b1de8d97edb9e5..622c63d7f0fefe7666a246abbd2fd934ff61efd2 100755 (executable)
@@ -6,18 +6,20 @@ IN: compiler.constants
 ! These constants must match vm/memory.h
 : card-bits 8 ;
 : deck-bits 18 ;
-: card-mark HEX: 40 HEX: 80 bitor ;
+: card-mark ( -- n ) HEX: 40 HEX: 80 bitor ;
 
 ! These constants must match vm/layouts.h
-: header-offset object tag-number neg ;
-: float-offset 8 float tag-number - ;
-: string-offset 4 bootstrap-cells object tag-number - ;
-: profile-count-offset 7 bootstrap-cells object tag-number - ;
-: byte-array-offset 2 bootstrap-cells object tag-number - ;
-: alien-offset 3 bootstrap-cells object tag-number - ;
-: underlying-alien-offset bootstrap-cell object tag-number - ;
-: tuple-class-offset bootstrap-cell tuple tag-number - ;
-: class-hash-offset bootstrap-cell object tag-number - ;
-: word-xt-offset 8 bootstrap-cells object tag-number - ;
-: word-code-offset 9 bootstrap-cells object tag-number - ;
-: compiled-header-size 4 bootstrap-cells ;
+: header-offset ( -- n ) object tag-number neg ;
+: float-offset ( -- n ) 8 float tag-number - ;
+: string-offset ( -- n ) 4 bootstrap-cells object tag-number - ;
+: profile-count-offset ( -- n ) 7 bootstrap-cells object tag-number - ;
+: byte-array-offset ( -- n ) 2 bootstrap-cells object tag-number - ;
+: alien-offset ( -- n ) 3 bootstrap-cells object tag-number - ;
+: underlying-alien-offset ( -- n ) bootstrap-cell object tag-number - ;
+: tuple-class-offset ( -- n ) bootstrap-cell tuple tag-number - ;
+: class-hash-offset ( -- n ) bootstrap-cell object tag-number - ;
+: word-xt-offset ( -- n ) 8 bootstrap-cells object tag-number - ;
+: quot-xt-offset ( -- n ) 3 bootstrap-cells object tag-number - ;
+: word-code-offset ( -- n ) 9 bootstrap-cells object tag-number - ;
+: array-start-offset ( -- n ) 2 bootstrap-cells object tag-number - ;
+: compiled-header-size ( -- n ) 4 bootstrap-cells ;
index e7dc5156e468f5d4c9aa3f68128c9822e1c14eb8..2bea6ad97426f307055eaa32495133d2609a668f 100755 (executable)
@@ -59,11 +59,11 @@ PRIVATE>
         [ set-at ] [ delete-at drop ] if
     ] [ 2drop ] if ;
 
-: :errors +error+ compiler-errors. ;
+: :errors ( -- ) +error+ compiler-errors. ;
 
-: :warnings +warning+ compiler-errors. ;
+: :warnings ( -- ) +warning+ compiler-errors. ;
 
-: :linkage +linkage+ compiler-errors. ;
+: :linkage ( -- ) +linkage+ compiler-errors. ;
 
 : with-compiler-errors ( quot -- )
     with-compiler-errors? get "quiet" get or [ call ] [
index 6fb6afe0c607e17e76a2aa1e675b70bde4a3fa7b..0e5c96eca01fc4ad63e5efc0cf7614799a67b669 100755 (executable)
@@ -252,7 +252,7 @@ cell 8 = [
 ! Some randomized tests
 : compiled-fixnum* fixnum* ;
 
-: test-fixnum*
+: test-fixnum* ( -- )
     32 random-bits >fixnum 32 random-bits >fixnum
     2dup
     [ fixnum* ] 2keep compiled-fixnum* =
@@ -262,7 +262,7 @@ cell 8 = [
 
 : compiled-fixnum>bignum fixnum>bignum ;
 
-: test-fixnum>bignum
+: test-fixnum>bignum ( -- )
     32 random-bits >fixnum
     dup [ fixnum>bignum ] keep compiled-fixnum>bignum =
     [ drop ] [ "Oops" throw ] if ;
@@ -271,7 +271,7 @@ cell 8 = [
 
 : compiled-bignum>fixnum bignum>fixnum ;
 
-: test-bignum>fixnum
+: test-bignum>fixnum ( -- )
     5 random [ drop 32 random-bits ] map product >bignum
     dup [ bignum>fixnum ] keep compiled-bignum>fixnum =
     [ drop ] [ "Oops" throw ] if ;
@@ -377,7 +377,7 @@ cell 8 = [
 [ 252 ] [ B{ 1 2 3 -4 5 } 3 [ { byte-array fixnum } declare alien-unsigned-1 ] compile-call ] unit-test
 [ -4 ] [ B{ 1 2 3 -4 5 } 3 [ { byte-array fixnum } declare alien-signed-1 ] compile-call ] unit-test
 
-: xword-def word-def [ { fixnum } declare ] prepend ;
+: xword-def ( word -- def ) word-def [ { fixnum } declare ] prepend ;
 
 [ -100 ] [ -100 <char> [ { byte-array } declare *char ] compile-call ] unit-test
 [ 156 ] [ -100 <uchar> [ { byte-array } declare *uchar ] compile-call ] unit-test
index bc9c56864c32b722c2319eab00e905ab27ac1452..49f11c0d11ef11351341093f9458e83890753fff 100755 (executable)
@@ -69,31 +69,31 @@ IN: compiler.tests
 
 ! Regression
 
-: empty ;
+: empty ( -- ) ;
 
 [ "b" ] [ 1 [ empty { [ "a" ] [ "b" ] } dispatch ] compile-call ] unit-test
 
-: dummy-if-1 t [ ] [ ] if ;
+: dummy-if-1 ( -- ) t [ ] [ ] if ;
 
 [ ] [ dummy-if-1 ] unit-test
 
-: dummy-if-2 f [ ] [ ] if ;
+: dummy-if-2 ( -- ) f [ ] [ ] if ;
 
 [ ] [ dummy-if-2 ] unit-test
 
-: dummy-if-3 t [ 1 ] [ 2 ] if ;
+: dummy-if-3 ( -- ) t [ 1 ] [ 2 ] if ;
 
 [ 1 ] [ dummy-if-3 ] unit-test
 
-: dummy-if-4 f [ 1 ] [ 2 ] if ;
+: dummy-if-4 ( -- ) f [ 1 ] [ 2 ] if ;
 
 [ 2 ] [ dummy-if-4 ] unit-test
 
-: dummy-if-5 0 dup 1 fixnum<= [ drop 1 ] [ ] if ;
+: dummy-if-5 ( -- n ) 0 dup 1 fixnum<= [ drop 1 ] [ ] if ;
 
 [ 1 ] [ dummy-if-5 ] unit-test
 
-: dummy-if-6
+: dummy-if-6 ( n -- n )
     dup 1 fixnum<= [
         drop 1
     ] [
@@ -102,7 +102,7 @@ IN: compiler.tests
 
 [ 17 ] [ 10 dummy-if-6 ] unit-test
 
-: dead-code-rec
+: dead-code-rec ( -- obj )
     t [
         3.2
     ] [
@@ -111,11 +111,11 @@ IN: compiler.tests
 
 [ 3.2 ] [ dead-code-rec ] unit-test
 
-: one-rec [ f one-rec ] [ "hi" ] if ;
+: one-rec ( ? -- obj ) [ f one-rec ] [ "hi" ] if ;
 
 [ "hi" ] [ t one-rec ] unit-test
 
-: after-if-test
+: after-if-test ( -- n )
     t [ ] [ ] if 5 ;
 
 [ 5 ] [ after-if-test ] unit-test
@@ -127,37 +127,37 @@ DEFER: countdown-b
 
 [ ] [ 10 countdown-b ] unit-test
 
-: dummy-when-1 t [ ] when ;
+: dummy-when-1 ( -- ) t [ ] when ;
 
 [ ] [ dummy-when-1 ] unit-test
 
-: dummy-when-2 f [ ] when ;
+: dummy-when-2 ( -- ) f [ ] when ;
 
 [ ] [ dummy-when-2 ] unit-test
 
-: dummy-when-3 dup [ dup fixnum* ] when ;
+: dummy-when-3 ( a -- b ) dup [ dup fixnum* ] when ;
 
 [ 16 ] [ 4 dummy-when-3 ] unit-test
 [ f ] [ f dummy-when-3 ] unit-test
 
-: dummy-when-4 dup [ dup dup fixnum* fixnum* ] when swap ;
+: dummy-when-4 ( a -- b c ) dup [ dup dup fixnum* fixnum* ] when swap ;
 
 [ 64 f ] [ f 4 dummy-when-4 ] unit-test
 [ f t ] [ t f dummy-when-4 ] unit-test
 
-: dummy-when-5 f [ dup fixnum* ] when ;
+: dummy-when-5 ( -- ) f [ dup fixnum* ] when ;
 
 [ f ] [ f dummy-when-5 ] unit-test
 
-: dummy-unless-1 t [ ] unless ;
+: dummy-unless-1 ( -- ) t [ ] unless ;
 
 [ ] [ dummy-unless-1 ] unit-test
 
-: dummy-unless-2 f [ ] unless ;
+: dummy-unless-2 ( -- ) f [ ] unless ;
 
 [ ] [ dummy-unless-2 ] unit-test
 
-: dummy-unless-3 dup [ drop 3 ] unless ;
+: dummy-unless-3 ( a -- b ) dup [ drop 3 ] unless ;
 
 [ 3 ] [ f dummy-unless-3 ] unit-test
 [ 4 ] [ 4 dummy-unless-3 ] unit-test
@@ -201,7 +201,7 @@ DEFER: countdown-b
     ] compile-call
 ] unit-test
 
-GENERIC: single-combination-test
+GENERIC: single-combination-test ( obj1 obj2 -- obj )
 
 M: object single-combination-test drop ;
 M: f single-combination-test nip ;
@@ -214,13 +214,13 @@ M: integer single-combination-test drop ;
 
 DEFER: single-combination-test-2
 
-: single-combination-test-4
+: single-combination-test-4 ( obj -- obj )
     dup [ single-combination-test-2 ] when ;
 
-: single-combination-test-3
+: single-combination-test-3 ( obj -- obj )
     drop 3 ;
 
-GENERIC: single-combination-test-2
+GENERIC: single-combination-test-2 ( obj -- obj )
 M: object single-combination-test-2 single-combination-test-3 ;
 M: f single-combination-test-2 single-combination-test-4 ;
 
index 9ee774d81d59e59691bb3d52b5d2e0030da828fb..878f4230cddf30bb489e9866b09bf53d97be2d5a 100755 (executable)
@@ -7,9 +7,9 @@ words splitting sorting ;
     error-continuation get continuation-call callstack>array
     2 group flip first ;
 
-: foo 3 throw 7 ;
-: bar foo 4 ;
-: baz bar 5 ;
+: foo ( -- * ) 3 throw 7 ;
+: bar ( -- * ) foo 4 ;
+: baz ( -- * ) bar 5 ;
 [ baz ] [ 3 = ] must-fail-with
 [ t ] [
     symbolic-stack-trace
@@ -17,9 +17,9 @@ words splitting sorting ;
     { baz bar foo throw } tail?
 ] unit-test
 
-: bleh [ 3 + ] map [ 0 > ] filter ;
+: bleh ( seq -- seq' ) [ 3 + ] map [ 0 > ] filter ;
 
-: stack-trace-contains? symbolic-stack-trace memq? ;
+: stack-trace-contains? ( word -- ? ) symbolic-stack-trace memq? ;
 
 [ t ] [
     [ { 1 "hi" } bleh ] ignore-errors \ + stack-trace-contains?
@@ -31,7 +31,7 @@ words splitting sorting ;
     \ > stack-trace-contains?
 ] unit-test
 
-: quux { 1 2 3 } [ "hi" throw ] sort ;
+: quux ( -- seq ) { 1 2 3 } [ "hi" throw ] sort ;
 
 [ t ] [
     [ 10 quux ] ignore-errors
index 14d75cdc03e9b0877c2e45e932bf9a7fb8138d70..65ef68deb8c72966963dc759f03dac79141f946b 100755 (executable)
@@ -31,7 +31,7 @@ unit-test
 
 [ 2 ] [ 1 2 [ swap fixnum/i ] compile-call ] unit-test
 
-: foo ;
+: foo ( -- ) ;
 
 [ 5 5 ]
 [ 1.2 [ tag [ foo ] keep ] compile-call ]
@@ -103,10 +103,10 @@ unit-test
 
 
 ! Test how dispatch handles the end of a basic block
-: try-breaking-dispatch
+: try-breaking-dispatch ( n a b -- a b str )
     float+ swap { [ "hey" ] [ "bye" ] } dispatch ;
 
-: try-breaking-dispatch-2
+: try-breaking-dispatch-2 ( -- ? )
     1 1.0 2.5 try-breaking-dispatch "bye" = >r 3.5 = r> and ;
 
 [ t ] [
@@ -143,7 +143,7 @@ unit-test
 ] unit-test
 
 ! Regression
-: foox
+: foox ( obj -- obj )
     dup not
     [ drop 3 ] [ dup tuple? [ drop 4 ] [ drop 5 ] if ] if ;
 
@@ -189,7 +189,7 @@ TUPLE: my-tuple ;
 ] unit-test
 
 ! Regression
-: a-dummy drop "hi" print ;
+: a-dummy ( -- ) drop "hi" print ;
 
 [ ] [
     1 [
@@ -203,7 +203,7 @@ TUPLE: my-tuple ;
     ] compile-call
 ] unit-test
 
-: float-spill-bug
+: float-spill-bug ( a -- b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b )
     {
         [ dup float+ ]
         [ dup float+ ]
index 76f2cdef7a3e92a3ce1a27f0efdad005ff96beeb..087661dff47587f94e8d5025c51800226e2852bd 100755 (executable)
@@ -26,7 +26,7 @@ SYMBOL: restarts
     #! with a declaration.
     f { object } declare ;
 
-: init-catchstack V{ } clone 1 setenv ;
+: init-catchstack ( -- ) V{ } clone 1 setenv ;
 
 PRIVATE>
 
index 338c5341bc51724f5711854d9212c1b0bf0356f7..42bf37d17f639b5f1b58f1cac5e7c869e5e6c72c 100755 (executable)
@@ -41,12 +41,12 @@ HOOK: stack-frame cpu ( frame-size -- n )
 ! Set up caller stack frame
 HOOK: %prologue cpu ( n -- )
 
-: %prologue-later \ %prologue-later , ;
+: %prologue-later ( -- ) \ %prologue-later , ;
 
 ! Tear down stack frame
 HOOK: %epilogue cpu ( n -- )
 
-: %epilogue-later \ %epilogue-later , ;
+: %epilogue-later ( -- ) \ %epilogue-later , ;
 
 ! Store word XT in stack frame
 HOOK: %save-word-xt cpu ( -- )
@@ -195,7 +195,7 @@ HOOK: %unbox-any-c-ptr cpu ( dst src -- )
 HOOK: %box-alien cpu ( dst src -- )
 
 ! GC check
-HOOK: %gc cpu
+HOOK: %gc cpu ( -- )
 
 : operand ( var -- op ) get v>operand ; inline
 
index 18c7e8b92ee5a2c3624335b046f04698c1d1034c..cf380d69f153ca8d04ad55cef4d4d50eca495173 100755 (executable)
@@ -72,7 +72,7 @@ big-endian on
 ] rc-relative-ppc-3 rt-xt 0 jit-word-jump jit-define\r
 \r
 : jit-call-quot ( -- )\r
-    temp-reg quot-reg quot-xt@ LWZ             ! load quotation-xt\r
+    temp-reg quot-reg quot-xt-offset LWZ       ! load quotation-xt\r
     temp-reg MTCTR                             ! jump to quotation-xt\r
     BCTR ;\r
 \r
@@ -93,7 +93,7 @@ big-endian on
     temp-reg ds-reg 0 LWZ                      ! load index\r
     temp-reg dup 1 SRAWI                       ! turn it into an array offset\r
     quot-reg dup temp-reg ADD                  ! compute quotation location\r
-    quot-reg dup array-start LWZ               ! load quotation\r
+    quot-reg dup array-start-offset LWZ        ! load quotation\r
     ds-reg dup 4 SUBI                          ! pop index\r
     jit-call-quot\r
 ] rc-absolute-ppc-2/2 rt-literal 1 jit-dispatch jit-define\r
index 9ef8177cf3a6f76d74a5925b0037efa8db4e4c4d..3c6e4963e1afe058cd6fc753ba7925ed8ac22cca 100755 (executable)
@@ -31,21 +31,23 @@ M: int-regs return-reg drop EAX ;
 M: int-regs param-regs drop { } ;
 M: int-regs vregs drop { EAX ECX EDX EBP } ;
 M: int-regs push-return-reg return-reg PUSH ;
-: load/store-int-return return-reg stack-reg rot [+] ;
+: load/store-int-return ( n reg-class -- src dst )
+    return-reg stack-reg rot [+] ;
 M: int-regs load-return-reg load/store-int-return MOV ;
 M: int-regs store-return-reg load/store-int-return swap MOV ;
 
 M: float-regs param-regs drop { } ;
 M: float-regs vregs drop { XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7 } ;
 
-: FSTP 4 = [ FSTPS ] [ FSTPL ] if ;
+: FSTP ( operand size -- ) 4 = [ FSTPS ] [ FSTPL ] if ;
 
 M: float-regs push-return-reg
     stack-reg swap reg-size [ SUB  stack-reg [] ] keep FSTP ;
 
-: FLD 4 = [ FLDS ] [ FLDL ] if ;
+: FLD ( operand size -- ) 4 = [ FLDS ] [ FLDL ] if ;
 
-: load/store-float-return reg-size >r stack@ r> ;
+: load/store-float-return ( n reg-class -- op size )
+    [ stack@ ] [ reg-size ] bi* ;
 M: float-regs load-return-reg load/store-float-return FLD ;
 M: float-regs store-return-reg load/store-float-return FSTP ;
 
@@ -151,7 +153,7 @@ M: x86.32 %box ( n reg-class func -- )
         >r (%box) r> f %alien-invoke
     ] with-aligned-stack ;
     
-: (%box-long-long)
+: (%box-long-long) ( n -- )
     #! If n is f, push the return registers onto the stack; we
     #! are boxing a return value of a C function. If n is an
     #! integer, push [ESP+n]:[ESP+n+4] on the stack; we are
@@ -166,7 +168,7 @@ M: x86.32 %box ( n reg-class func -- )
 
 M: x86.32 %box-long-long ( n func -- )
     8 [
-        >r (%box-long-long) r> f %alien-invoke
+        [ (%box-long-long) ] [ f %alien-invoke ] bi*
     ] with-aligned-stack ;
 
 M: x86.32 %box-large-struct ( n size -- )
@@ -260,7 +262,7 @@ os windows? [
     4 "double" c-type set-c-type-align
 ] unless
 
-: sse2? "Intrinsic" throw ;
+: sse2? ( -- ? ) "Intrinsic" throw ;
 
 \ sse2? [
     { EAX EBX ECX EDX } [ PUSH ] each
index 63870f94cddd359dd8c3834910dac989caf12b6e..144a9560d72ed2b1bba4c4910e7ef1ae97b974a5 100755 (executable)
@@ -6,7 +6,7 @@ sequences generic arrays generator generator.fixup
 generator.registers system layouts alien ;
 IN: cpu.x86.allot
 
-: allot-reg
+: allot-reg ( -- reg )
     #! We temporarily use the datastack register, since it won't
     #! be accessed inside the quotation given to %allot in any
     #! case.
index 88881b19a8fa090796e49d83c6d0c6e07120733f..2a3d16694ea4c20842f45f1c0b759c9dd4cc3830 100755 (executable)
@@ -7,12 +7,12 @@ generator generator.registers generator.fixup system layouts
 combinators compiler.constants math.order ;
 IN: cpu.x86.architecture
 
-HOOK: ds-reg cpu
-HOOK: rs-reg cpu
-HOOK: stack-reg cpu
-HOOK: stack-save-reg cpu
+HOOK: ds-reg cpu ( -- reg )
+HOOK: rs-reg cpu ( -- reg )
+HOOK: stack-reg cpu ( -- reg )
+HOOK: stack-save-reg cpu ( -- reg )
 
-: stack@ stack-reg swap [+] ;
+: stack@ ( n -- op ) stack-reg swap [+] ;
 
 : reg-stack ( n reg -- op ) swap cells neg [+] ;
 
@@ -36,14 +36,14 @@ GENERIC: load-return-reg ( stack@ reg-class -- )
 GENERIC: store-return-reg ( stack@ reg-class -- )
 
 ! Only used by inline allocation
-HOOK: temp-reg-1 cpu
-HOOK: temp-reg-2 cpu
+HOOK: temp-reg-1 cpu ( -- reg )
+HOOK: temp-reg-2 cpu ( -- reg )
 
 HOOK: address-operand cpu ( address -- operand )
 
-HOOK: fixnum>slot@ cpu
+HOOK: fixnum>slot@ cpu ( op -- )
 
-HOOK: prepare-division cpu
+HOOK: prepare-division cpu ( -- )
 
 M: immediate load-literal v>operand swap v>operand MOV ;
 
@@ -53,7 +53,7 @@ M: x86 stack-frame ( n -- i )
 M: x86 %save-word-xt ( -- )
     temp-reg v>operand 0 MOV rc-absolute-cell rel-this ;
 
-: factor-area-size 4 cells ;
+: factor-area-size ( -- n ) 4 cells ;
 
 M: x86 %prologue ( n -- )
     dup cell + PUSH
@@ -120,7 +120,7 @@ M: x86 %peek [ v>operand ] bi@ MOV ;
 
 M: x86 %replace swap %peek ;
 
-: (%inc) swap cells dup 0 > [ ADD ] [ neg SUB ] if ;
+: (%inc) ( n reg -- ) swap cells dup 0 > [ ADD ] [ neg SUB ] if ;
 
 M: x86 %inc-d ( n -- ) ds-reg (%inc) ;
 
@@ -139,7 +139,7 @@ M: x86 small-enough? ( n -- ? )
 
 : %tag-fixnum ( reg -- ) tag-bits get SHL ;
 
-: temp@ stack-reg \ stack-frame get rot - [+] ;
+: temp@ ( n -- op ) stack-reg \ stack-frame get rot - [+] ;
 
 : struct-return@ ( size n -- n )
     [
index bc6a12d167a674c6c1dd14de5870406aa5da7bf8..452a102341ad85f418eab302c8458ec958c34c87 100755 (executable)
@@ -22,7 +22,7 @@ IN: cpu.x86.assembler
 : define-registers ( names size -- )
     >r dup length r> [ define-register ] curry 2each ;
 
-: REGISTERS:
+: REGISTERS: ( -- )
     scan-word ";" parse-tokens swap define-registers ; parsing
 
 >>
@@ -76,31 +76,31 @@ TUPLE: indirect base index scale displacement ;
 
 M: indirect extended? base>> extended? ;
 
-: canonicalize-EBP
+: canonicalize-EBP ( indirect -- indirect )
     #! { EBP } ==> { EBP 0 }
     dup base>> { EBP RBP R13 } member? [
         dup displacement>> [ 0 >>displacement ] unless
-    ] when drop ;
+    ] when ;
 
-: canonicalize-ESP
+: canonicalize-ESP ( indirect -- indirect )
     #! { ESP } ==> { ESP ESP }
-    dup base>> { ESP RSP R12 } member? [ ESP >>index ] when drop ;
+    dup base>> { ESP RSP R12 } member? [ ESP >>index ] when ;
 
-: canonicalize ( indirect -- )
+: canonicalize ( indirect -- indirect )
     #! Modify the indirect to work around certain addressing mode
     #! quirks.
-    [ canonicalize-EBP ] [ canonicalize-ESP ] bi ;
+    canonicalize-EBP canonicalize-ESP ;
 
 : <indirect> ( base index scale displacement -- indirect )
-    indirect boa dup canonicalize ;
+    indirect boa canonicalize ;
 
-: reg-code "register" word-prop 7 bitand ;
+: reg-code ( reg -- n ) "register" word-prop 7 bitand ;
 
-: indirect-base* base>> EBP or reg-code ;
+: indirect-base* ( op -- n ) base>> EBP or reg-code ;
 
-: indirect-index* index>> ESP or reg-code ;
+: indirect-index* ( op -- n ) index>> ESP or reg-code ;
 
-: indirect-scale* scale>> 0 or ;
+: indirect-scale* ( op -- n ) scale>> 0 or ;
 
 GENERIC: sib-present? ( op -- ? )
 
@@ -145,10 +145,10 @@ GENERIC# n, 1 ( value n -- )
 
 M: integer n, >le % ;
 M: byte n, >r value>> r> n, ;
-: 1, 1 n, ; inline
-: 4, 4 n, ; inline
-: 2, 2 n, ; inline
-: cell, bootstrap-cell n, ; inline
+: 1, ( n -- ) 1 n, ; inline
+: 4, ( n -- ) 4 n, ; inline
+: 2, ( n -- ) 2 n, ; inline
+: cell, ( n -- ) bootstrap-cell n, ; inline
 
 : mod-r/m, ( reg# indirect -- )
     [ 3 shift ] [ [ modifier 6 shift ] [ r/m ] bi ] bi* bitor bitor , ;
@@ -196,10 +196,10 @@ M: object operand-64? drop f ;
         [ nip operand-64? ]
     } cond and ;
 
-: rex.r
+: rex.r ( m op -- n )
     extended? [ BIN: 00000100 bitor ] when ;
 
-: rex.b
+: rex.b ( m op -- n )
     [ extended? [ BIN: 00000001 bitor ] when ] keep
     dup indirect? [
         index>> extended? [ BIN: 00000010 bitor ] when
@@ -225,7 +225,7 @@ M: object operand-64? drop f ;
     #! the opcode.
     >r dupd prefix-1 reg-code r> + , ;
 
-: opcode, dup array? [ % ] [ , ] if ;
+: opcode, ( opcode -- ) dup array? [ % ] [ , ] if ;
 
 : extended-opcode ( opcode -- opcode' ) OCT: 17 swap 2array ;
 
@@ -240,7 +240,7 @@ M: object operand-64? drop f ;
     #! 'reg' field of the mod-r/m byte.
     first3 >r >r over r> prefix-1 r> opcode, swap addressing ;
 
-: immediate-operand-size-bit
+: immediate-operand-size-bit ( imm dst reg,rex.w,opcode -- imm dst reg,rex.w,opcode )
     pick integer? [ first3 BIN: 1 opcode-or 3array ] when ;
 
 : immediate-1 ( imm dst reg,rex.w,opcode -- )
@@ -249,7 +249,7 @@ M: object operand-64? drop f ;
 : immediate-4 ( imm dst reg,rex.w,opcode -- )
     immediate-operand-size-bit 1-operand 4, ;
 
-: immediate-fits-in-size-bit
+: immediate-fits-in-size-bit ( imm dst reg,rex.w,opcode -- imm dst reg,rex.w,opcode )
     pick integer? [ first3 BIN: 10 opcode-or 3array ] when ;
 
 : immediate-1/4 ( imm dst reg,rex.w,opcode -- )
@@ -320,38 +320,38 @@ M: operand MOV HEX: 88 2-operand ;
 
 ! Control flow
 GENERIC: JMP ( op -- )
-: (JMP) HEX: e9 , 0 4, rc-relative ;
+: (JMP) ( -- rel-class ) HEX: e9 , 0 4, rc-relative ;
 M: callable JMP (JMP) rel-word ;
 M: label JMP (JMP) label-fixup ;
 M: operand JMP { BIN: 100 t HEX: ff } 1-operand ;
 
 GENERIC: CALL ( op -- )
-: (CALL) HEX: e8 , 0 4, rc-relative ;
+: (CALL) ( -- rel-class ) HEX: e8 , 0 4, rc-relative ;
 M: callable CALL (CALL) rel-word ;
 M: label CALL (CALL) label-fixup ;
 M: operand CALL { BIN: 010 t HEX: ff } 1-operand ;
 
 GENERIC# JUMPcc 1 ( addr opcode -- )
-: (JUMPcc) extended-opcode, 0 4, rc-relative ;
+: (JUMPcc) ( n -- rel-class ) extended-opcode, 0 4, rc-relative ;
 M: callable JUMPcc (JUMPcc) rel-word ;
 M: label JUMPcc (JUMPcc) label-fixup ;
 
-: JO  HEX: 80 JUMPcc ;
-: JNO HEX: 81 JUMPcc ;
-: JB  HEX: 82 JUMPcc ;
-: JAE HEX: 83 JUMPcc ;
-: JE  HEX: 84 JUMPcc ; ! aka JZ
-: JNE HEX: 85 JUMPcc ;
-: JBE HEX: 86 JUMPcc ;
-: JA  HEX: 87 JUMPcc ;
-: JS  HEX: 88 JUMPcc ;
-: JNS HEX: 89 JUMPcc ;
-: JP  HEX: 8a JUMPcc ;
-: JNP HEX: 8b JUMPcc ;
-: JL  HEX: 8c JUMPcc ;
-: JGE HEX: 8d JUMPcc ;
-: JLE HEX: 8e JUMPcc ;
-: JG  HEX: 8f JUMPcc ;
+: JO  ( dst -- ) HEX: 80 JUMPcc ;
+: JNO ( dst -- ) HEX: 81 JUMPcc ;
+: JB  ( dst -- ) HEX: 82 JUMPcc ;
+: JAE ( dst -- ) HEX: 83 JUMPcc ;
+: JE  ( dst -- ) HEX: 84 JUMPcc ; ! aka JZ
+: JNE ( dst -- ) HEX: 85 JUMPcc ;
+: JBE ( dst -- ) HEX: 86 JUMPcc ;
+: JA  ( dst -- ) HEX: 87 JUMPcc ;
+: JS  ( dst -- ) HEX: 88 JUMPcc ;
+: JNS ( dst -- ) HEX: 89 JUMPcc ;
+: JP  ( dst -- ) HEX: 8a JUMPcc ;
+: JNP ( dst -- ) HEX: 8b JUMPcc ;
+: JL  ( dst -- ) HEX: 8c JUMPcc ;
+: JGE ( dst -- ) HEX: 8d JUMPcc ;
+: JLE ( dst -- ) HEX: 8e JUMPcc ;
+: JG  ( dst -- ) HEX: 8f JUMPcc ;
 
 : LEAVE ( -- ) HEX: c9 , ;
 
@@ -399,8 +399,8 @@ M: operand CMP OCT: 070 2-operand ;
 : DIV  ( dst -- ) { BIN: 110 t HEX: f7 } 1-operand ;
 : IDIV ( src -- ) { BIN: 111 t HEX: f7 } 1-operand ;
 
-: CDQ HEX: 99 , ;
-: CQO HEX: 48 , CDQ ;
+: CDQ ( -- ) HEX: 99 , ;
+: CQO ( -- ) HEX: 48 , CDQ ;
 
 : ROL ( dst n -- ) swap { BIN: 000 t HEX: c0 } immediate-1 ;
 : ROR ( dst n -- ) swap { BIN: 001 t HEX: c0 } immediate-1 ;
@@ -423,26 +423,26 @@ M: operand IMUL2 OCT: 257 extended-opcode (2-operand) ;
 ! Conditional move
 : MOVcc ( dst src cc -- ) extended-opcode swapd (2-operand) ;
 
-: CMOVO  HEX: 40 MOVcc ;
-: CMOVNO HEX: 41 MOVcc ;
-: CMOVB  HEX: 42 MOVcc ;
-: CMOVAE HEX: 43 MOVcc ;
-: CMOVE  HEX: 44 MOVcc ; ! aka CMOVZ
-: CMOVNE HEX: 45 MOVcc ;
-: CMOVBE HEX: 46 MOVcc ;
-: CMOVA  HEX: 47 MOVcc ;
-: CMOVS  HEX: 48 MOVcc ;
-: CMOVNS HEX: 49 MOVcc ;
-: CMOVP  HEX: 4a MOVcc ;
-: CMOVNP HEX: 4b MOVcc ;
-: CMOVL  HEX: 4c MOVcc ;
-: CMOVGE HEX: 4d MOVcc ;
-: CMOVLE HEX: 4e MOVcc ;
-: CMOVG  HEX: 4f MOVcc ;
+: CMOVO  ( dst src -- ) HEX: 40 MOVcc ;
+: CMOVNO ( dst src -- ) HEX: 41 MOVcc ;
+: CMOVB  ( dst src -- ) HEX: 42 MOVcc ;
+: CMOVAE ( dst src -- ) HEX: 43 MOVcc ;
+: CMOVE  ( dst src -- ) HEX: 44 MOVcc ; ! aka CMOVZ
+: CMOVNE ( dst src -- ) HEX: 45 MOVcc ;
+: CMOVBE ( dst src -- ) HEX: 46 MOVcc ;
+: CMOVA  ( dst src -- ) HEX: 47 MOVcc ;
+: CMOVS  ( dst src -- ) HEX: 48 MOVcc ;
+: CMOVNS ( dst src -- ) HEX: 49 MOVcc ;
+: CMOVP  ( dst src -- ) HEX: 4a MOVcc ;
+: CMOVNP ( dst src -- ) HEX: 4b MOVcc ;
+: CMOVL  ( dst src -- ) HEX: 4c MOVcc ;
+: CMOVGE ( dst src -- ) HEX: 4d MOVcc ;
+: CMOVLE ( dst src -- ) HEX: 4e MOVcc ;
+: CMOVG  ( dst src -- ) HEX: 4f MOVcc ;
 
 ! CPU Identification
 
-: CPUID HEX: a2 extended-opcode, ;
+: CPUID ( -- ) HEX: a2 extended-opcode, ;
 
 ! x87 Floating Point Unit
 
index ea4cadd51bfe5d39afc00b8165d1113884337a17..bd1b0f2871e2fbb604d9e48042c9c4a77ba7410e 100755 (executable)
@@ -60,7 +60,7 @@ big-endian off
     arg0 \ f tag-number CMP                    ! compare it with f
     arg0 arg1 [] CMOVNE                        ! load true branch if not equal
     arg0 arg1 bootstrap-cell [+] CMOVE         ! load false branch if equal
-    arg0 quot-xt@ [+] JMP                      ! jump to quotation-xt
+    arg0 quot-xt-offset [+] JMP                ! jump to quotation-xt
 ] rc-absolute-cell rt-literal 1 rex-length + jit-if-jump jit-define
 
 [
@@ -70,8 +70,8 @@ big-endian off
     fixnum>slot@                               ! turn it into an array offset
     ds-reg bootstrap-cell SUB                  ! pop index
     arg0 arg1 ADD                              ! compute quotation location
-    arg0 arg0 array-start [+] MOV              ! load quotation
-    arg0 quot-xt@ [+] JMP                      ! execute branch
+    arg0 arg0 array-start-offset [+] MOV       ! load quotation
+    arg0 quot-xt-offset [+] JMP                ! execute branch
 ] rc-absolute-cell rt-literal 1 rex-length + jit-dispatch jit-define
 
 [
index 667f08c053a3291b2dec77df0de7e980d16098d3..0ee8a0a1d980985e26a54ef40dc02c73d56043bf 100755 (executable)
@@ -20,16 +20,16 @@ IN: cpu.x86.intrinsics
 } define-intrinsic
 
 ! Slots
-: %slot-literal-known-tag
+: %slot-literal-known-tag ( -- op )
     "obj" operand
     "n" get cells
     "obj" get operand-tag - [+] ;
 
-: %slot-literal-any-tag
+: %slot-literal-any-tag ( -- op )
     "obj" operand %untag
     "obj" operand "n" get cells [+] ;
 
-: %slot-any
+: %slot-any ( -- op )
     "obj" operand %untag
     "n" operand fixnum>slot@
     "obj" operand "n" operand [+] ;
@@ -399,15 +399,15 @@ IN: cpu.x86.intrinsics
         { +clobber+ { "offset" } }
     } ;
 
-: define-getter
+: define-getter ( word quot reg -- )
     [ %alien-integer-get ] 2curry
     alien-integer-get-template
     define-intrinsic ;
 
-: define-unsigned-getter
+: define-unsigned-getter ( word reg -- )
     [ small-reg dup XOR MOV ] swap define-getter ;
 
-: define-signed-getter
+: define-signed-getter ( word reg -- )
     [ [ >r MOV small-reg r> MOVSX ] curry ] keep define-getter ;
 
 : %alien-integer-set ( quot reg -- )
@@ -429,7 +429,7 @@ IN: cpu.x86.intrinsics
         { +clobber+ { "value" "offset" } }
     } ;
 
-: define-setter
+: define-setter ( word reg -- )
     [ swap MOV ] swap
     [ %alien-integer-set ] 2curry
     alien-integer-set-template
index 17219ba92b08375f3ddb7398afacf0ce66e91f15..cfad1447377f1dd064bbe2ac4f3f7bfc443ee14b 100755 (executable)
@@ -36,12 +36,12 @@ M: string error. print ;
 : :vars ( -- )
     error-continuation get continuation-name namestack. ;
 
-: :res ( n -- )
+: :res ( n -- )
     1- restarts get-global nth f restarts set-global restart ;
 
-: :1 1 :res ;
-: :2 2 :res ;
-: :3 3 :res ;
+: :1 ( -- * ) 1 :res ;
+: :2 ( -- * ) 2 :res ;
+: :3 ( -- * ) 3 :res ;
 
 : restart. ( restart n -- )
     [
@@ -143,15 +143,15 @@ M: relative-overflow summary
 : stack-overflow. ( obj name -- )
     write " stack overflow" print drop ;
 
-: datastack-underflow. "Data" stack-underflow. ;
-: datastack-overflow. "Data" stack-overflow. ;
-: retainstack-underflow. "Retain" stack-underflow. ;
-: retainstack-overflow. "Retain" stack-overflow. ;
+: datastack-underflow. ( obj -- ) "Data" stack-underflow. ;
+: datastack-overflow. ( obj -- ) "Data" stack-overflow. ;
+: retainstack-underflow. ( obj -- ) "Retain" stack-underflow. ;
+: retainstack-overflow. ( obj -- ) "Retain" stack-overflow. ;
 
-: memory-error.
+: memory-error. ( error -- )
     "Memory protection fault at address " write third .h ;
 
-: primitive-error.
+: primitive-error. ( error -- ) 
     "Unimplemented primitive" print drop ;
 
 PREDICATE: kernel-error < array
@@ -161,7 +161,7 @@ PREDICATE: kernel-error < array
         [ second 0 15 between? ]
     } cond ;
 
-: kernel-errors
+: kernel-errors ( error -- n errors )
     second {
         { 0  [ expired-error.          ] }
         { 1  [ io-error.               ] }
index 80a4f679c012b99b7aa22779edbe20405035f3de..099260f11148fc2be72933bb937f3da4c357b441 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2006, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel math namespaces sequences strings words assocs
-combinators ;
+combinators accessors ;
 IN: effects
 
 TUPLE: effect in out terminated? ;
@@ -11,14 +11,13 @@ TUPLE: effect in out terminated? ;
     effect boa ;
 
 : effect-height ( effect -- n )
-    dup effect-out length swap effect-in length - ;
+    [ out>> length ] [ in>> length ] bi - ;
 
 : effect<= ( eff1 eff2 -- ? )
     {
-        { [ dup not ] [ t ] }
-        { [ over effect-terminated? ] [ t ] }
-        { [ dup effect-terminated? ] [ f ] }
-        { [ 2dup [ effect-in length ] bi@ > ] [ f ] }
+        { [ over terminated?>> ] [ t ] }
+        { [ dup terminated?>> ] [ f ] }
+        { [ 2dup [ in>> length ] bi@ > ] [ f ] }
         { [ 2dup [ effect-height ] bi@ = not ] [ f ] }
         [ t ]
     } cond 2nip ;
@@ -34,10 +33,10 @@ M: integer (stack-picture) drop "object" ;
 : effect>string ( effect -- string )
     [
         "( " %
-        dup effect-in stack-picture %
-        "-- " %
-        dup effect-out stack-picture %
-        effect-terminated? [ "* " % ] when
+        [ in>> stack-picture % "-- " % ]
+        [ out>> stack-picture % ]
+        [ terminated?>> [ "* " % ] when ]
+        tri
         ")" %
     ] "" make ;
 
@@ -50,16 +49,16 @@ M: word stack-effect
     swap word-props [ at ] curry map [ ] find nip ;
 
 M: effect clone
-    [ effect-in clone ] keep effect-out clone <effect> ;
+    [ in>> clone ] keep effect-out clone <effect> ;
 
 : split-shuffle ( stack shuffle -- stack1 stack2 )
-    effect-in length cut* ;
+    in>> length cut* ;
 
 : load-shuffle ( stack shuffle -- )
-    effect-in [ set ] 2each ;
+    in>> [ set ] 2each ;
 
 : shuffled-values ( shuffle -- values )
-    effect-out [ get ] map ;
+    out>> [ get ] map ;
 
 : shuffle* ( stack shuffle -- newstack )
     [ [ load-shuffle ] keep shuffled-values ] with-scope ;
index b8de9c35176bb631b3ba2cdaa9e6fb37668c5e37..684c058913d3a3f6351d6909d6d884fde1d98649 100755 (executable)
@@ -72,8 +72,8 @@ GENERIC: generate-node ( node -- next )
 
 : word-dataflow ( word -- effect dataflow )
     [
-        dup "no-effect" word-prop [ no-effect ] when
-        dup "no-compile" word-prop [ no-effect ] when
+        dup "cannot-infer" word-prop [ cannot-infer-effect ] when
+        dup "no-compile" word-prop [ cannot-infer-effect ] when
         dup specialized-def over dup 2array 1array infer-quot
         finish-word
     ] with-infer ;
index c5e1ea54a63f562095cde24d5aa881d37b865d35..ded1c82ee43b1e2e7bff7c8b3cfcae36970c3abe 100755 (executable)
@@ -67,7 +67,7 @@ INSTANCE: temp-reg value
 ! A data stack location.
 TUPLE: ds-loc n class ;
 
-: <ds-loc> f ds-loc boa ;
+: <ds-loc> ( n -- loc ) f ds-loc boa ;
 
 M: ds-loc minimal-ds-loc* ds-loc-n min ;
 M: ds-loc operand-class* ds-loc-class ;
@@ -78,7 +78,7 @@ M: ds-loc live-loc?
 ! A retain stack location.
 TUPLE: rs-loc n class ;
 
-: <rs-loc> f rs-loc boa ;
+: <rs-loc> ( n -- loc ) f rs-loc boa ;
 M: rs-loc operand-class* rs-loc-class ;
 M: rs-loc set-operand-class set-rs-loc-class ;
 M: rs-loc live-loc?
@@ -177,7 +177,7 @@ INSTANCE: constant value
 <PRIVATE
 
 ! Moving values between locations and registers
-: %move-bug "Bug in generator.registers" throw ;
+: %move-bug ( -- * ) "Bug in generator.registers" throw ;
 
 : %unbox-c-ptr ( dst src -- )
     dup operand-class {
@@ -231,7 +231,7 @@ GENERIC: finalize-height ( stack -- )
 : new-phantom-stack ( class -- stack )
     >r 0 V{ } clone r> boa ; inline
 
-: (loc)
+: (loc) ( m stack -- n )
     #! Utility for methods on <loc>
     height>> - ;
 
index 600f422274ed19a67549f9c40bb941c862781854..9d968a3a98427febe689ddb3f37d6f3804c5420a 100755 (executable)
@@ -156,7 +156,7 @@ M: integer generic-forget-test-1 / ;
     [ word-name "generic-forget-test-1/integer" = ] contains?
 ] unit-test
 
-GENERIC: generic-forget-test-2
+GENERIC: generic-forget-test-2 ( a b -- c )
 
 M: sequence generic-forget-test-2 = ;
 
@@ -174,7 +174,7 @@ M: sequence generic-forget-test-2 = ;
     [ word-name "generic-forget-test-2/sequence" = ] contains?
 ] unit-test
 
-GENERIC: generic-forget-test-3
+GENERIC: generic-forget-test-3 ( a -- b )
 
 M: f generic-forget-test-3 ;
 
index 6344bec5360f96a11b6ba5e46d8c45e6ecc452ca..c1e72a65deaf0c080cfa64676ad551594cda20ee 100644 (file)
@@ -38,7 +38,7 @@ C: <hi-tag-dispatch-engine> hi-tag-dispatch-engine
     \ hi-tag bootstrap-word
     \ <hi-tag-dispatch-engine> convert-methods ;
 
-: num-hi-tags num-types get num-tags get - ;
+: num-hi-tags ( -- n ) num-types get num-tags get - ;
 
 : hi-tag-number ( class -- n )
     "type" word-prop num-tags get - ;
index 24fb8ba4f4f464430dad6a7e8c4bafa262569c03..9a780383b5c2d3278cc13c5d90b0dd6d52e88674 100644 (file)
@@ -44,7 +44,7 @@ M: trivial-tuple-dispatch-engine engine>quot
     >alist V{ } clone [ hashcode 1array ] distribute-buckets
     [ <trivial-tuple-dispatch-engine> ] map ;
 
-: word-hashcode% [ 1 slot ] % ;
+: word-hashcode% ( -- ) [ 1 slot ] % ;
 
 : class-hash-dispatch-quot ( methods -- quot )
     [
@@ -78,7 +78,7 @@ M: engine-word irrelevant? drop t ;
 : define-engine-word ( quot -- word )
     >r <engine-word> dup r> define ;
 
-: array-nth% 2 + , [ slot { word } declare ] % ;
+: array-nth% ( n -- ) 2 + , [ slot { word } declare ] % ;
 
 : tuple-layout-superclasses ( obj -- array )
     { tuple } declare
index 66f191a93f05e4a4c2e5664284f3585a238f35ec..93956fec00bf234a0b472c0e0500c1a1a5e57ae0 100644 (file)
@@ -6,7 +6,7 @@ quotations inference vectors growable hashtables sbufs
 prettyprint byte-vectors bit-vectors float-vectors definitions
 generic sets graphs assocs ;
 
-GENERIC: lo-tag-test
+GENERIC: lo-tag-test ( obj -- obj' )
 
 M: integer lo-tag-test 3 + ;
 
@@ -21,7 +21,7 @@ M: complex lo-tag-test sq ;
 [ -1/2 ] [ 1+1/2 lo-tag-test ] unit-test
 [ -16 ] [ C{ 0 4 } lo-tag-test ] unit-test
 
-GENERIC: hi-tag-test
+GENERIC: hi-tag-test ( obj -- obj' )
 
 M: string hi-tag-test ", in bed" append ;
 
@@ -53,7 +53,7 @@ TUPLE: circle < shape radius ;
 
 C: <circle> circle
 
-GENERIC: area
+GENERIC: area ( shape -- n )
 
 M: abstract-rectangle area [ width>> ] [ height>> ] bi * ;
 
@@ -63,15 +63,15 @@ M: circle area radius>> sq pi * ;
 [ 12 ] [ 4 3 2 <parallelogram> area ] unit-test
 [ t ] [ 2 <circle> area 4 pi * = ] unit-test
 
-GENERIC: perimiter
+GENERIC: perimiter ( shape -- n )
 
-: rectangle-perimiter + 2 * ;
+: rectangle-perimiter ( n -- n ) + 2 * ;
 
 M: rectangle perimiter
     [ width>> ] [ height>> ] bi
     rectangle-perimiter ;
 
-: hypotenuse [ sq ] bi@ + sqrt ;
+: hypotenuse ( a b -- c ) [ sq ] bi@ + sqrt ;
 
 M: parallelogram perimiter
     [ width>> ]
@@ -83,7 +83,7 @@ M: circle perimiter 2 * pi * ;
 [ 14 ] [ 4 3 <rectangle> perimiter ] unit-test
 [ 30 ] [ 10 4 3 <parallelogram> perimiter ] unit-test
 
-GENERIC: big-mix-test
+GENERIC: big-mix-test ( obj -- obj' )
 
 M: object big-mix-test drop "object" ;
 
@@ -125,7 +125,7 @@ M: circle big-mix-test drop "circle" ;
 [ "tuple" ] [ H{ } big-mix-test ] unit-test
 [ "object" ] [ \ + big-mix-test ] unit-test
 
-GENERIC: small-lo-tag
+GENERIC: small-lo-tag ( obj -- obj )
 
 M: fixnum small-lo-tag drop "fixnum" ;
 
@@ -226,7 +226,7 @@ M: b funky* "b" , call-next-method ;
 
 M: c funky* "c" , call-next-method ;
 
-: funky [ funky* ] { } make ;
+: funky ( obj -- seq ) [ funky* ] { } make ;
 
 [ { "b" "x" "z" } ] [ T{ b } funky ] unit-test
 
@@ -293,7 +293,7 @@ M: sbuf no-stack-effect-decl ;
 TUPLE: xref-tuple-1 ;
 TUPLE: xref-tuple-2 < xref-tuple-1 ;
 
-: (xref-test) drop ;
+: (xref-test) ( obj -- ) drop ;
 
 GENERIC: xref-test ( obj -- )
 
index ccfa490318a956732478c14ca7fb5e8a6318a10d..24f64eaab12b5ae47e35fadf38191418eb18de30 100755 (executable)
@@ -43,9 +43,9 @@ HELP: consume/produce
 { $values { "node" "a dataflow node" } { "effect" "an instance of " { $link effect } } }
 { $description "Adds a node to the dataflow graph that calls " { $snippet "word" } " with a stack effect of " { $snippet "effect" } "." } ;
 
-HELP: no-effect
+HELP: cannot-infer-effect
 { $values { "word" word } }
-{ $description "Throws a " { $link no-effect } " error." }
+{ $description "Throws a " { $link cannot-infer-effect } " error." }
 { $error-description "Thrown when inference encounters a call to a word which is already known not to have a static stack effect, due to a prior inference attempt failing." } ;
 
 HELP: inline-word
@@ -61,8 +61,8 @@ HELP: effect-error
 { $description "Throws an " { $link effect-error } "." }
 { $error-description "Thrown when a word's inferred stack effect does not match its declared stack effect." } ;
 
-HELP: no-recursive-declaration
-{ $error-description "Thrown when inference encounters a recursive call to a word lacking a stack effect declaration. Recursive words must declare a stack effect in order to compile. Due to implementation detail, generic words are recursive, and thus the same restriction applies." } ;
+HELP: missing-effect
+{ $error-description "Thrown when inference encounters a word lacking a stack effect declaration. Words not declared " { $link POSTPONE: inline } " must declare a stack effect in order to compile." } ;
 
 HELP: recursive-quotation-error
 { $error-description "Thrown when a quotation calls itself, directly or indirectly, within the same word. Stack effect inference becomes equivalent to the halting problem if quotation recursion has to be taken into account, hence it is not permitted." }
index 42a1c1dd19a3e9b2cf4aef310e7902c2b6e9c095..080e77af02a30432467c2df278492a098d838f0a 100755 (executable)
@@ -23,7 +23,7 @@ M: word inline?
 
 SYMBOL: visited
 
-: reset-on-redefine { "inferred-effect" "no-effect" } ; inline
+: reset-on-redefine { "inferred-effect" "cannot-infer" } ; inline
 
 : (redefined) ( word -- )
     dup visited get key? [ drop ] [
@@ -382,18 +382,36 @@ TUPLE: unbalanced-branches-error quots in out ;
         #call consume/produce
     ] if ;
 
-TUPLE: no-effect word ;
+TUPLE: cannot-infer-effect word ;
 
-: no-effect ( word -- * ) \ no-effect inference-warning ;
+: cannot-infer-effect ( word -- * )
+    \ cannot-infer-effect inference-warning ;
 
-TUPLE: effect-error word effect ;
+TUPLE: effect-error word inferred declared ;
 
-: effect-error ( word effect -- * )
+: effect-error ( word inferred declared -- * )
     \ effect-error inference-error ;
 
+TUPLE: missing-effect word ;
+
+: effect-required? ( word -- ? )
+    {
+        { [ dup inline? ] [ drop f ] }
+        { [ dup deferred? ] [ drop f ] }
+        { [ dup crossref? not ] [ drop f ] }
+        [ word-def [ [ word? ] [ primitive? not ] bi and ] contains? ]
+    } cond ;
+
+: ?missing-effect ( word -- )
+    dup effect-required?
+    [ missing-effect inference-error ] [ drop ] if ;
+
 : check-effect ( word effect -- )
-    dup pick stack-effect effect<=
-    [ 2drop ] [ effect-error ] if ;
+    over stack-effect {
+        { [ dup not ] [ 2drop ?missing-effect ] }
+        { [ 2dup effect<= ] [ 3drop ] }
+        [ effect-error ]
+    } cond ;
 
 : finish-word ( word -- )
     current-effect
@@ -412,7 +430,7 @@ TUPLE: effect-error word effect ;
             finish-word
             current-effect
         ] with-scope
-    ] [ ] [ t "no-effect" set-word-prop ] cleanup ;
+    ] [ ] [ t "cannot-infer" set-word-prop ] cleanup ;
 
 : custom-infer ( word -- )
     #! Customized inference behavior
@@ -424,18 +442,16 @@ TUPLE: effect-error word effect ;
 : apply-word ( word -- )
     {
         { [ dup "infer" word-prop ] [ custom-infer ] }
-        { [ dup "no-effect" word-prop ] [ no-effect ] }
+        { [ dup "cannot-infer" word-prop ] [ cannot-infer-effect ] }
         { [ dup "inferred-effect" word-prop ] [ cached-infer ] }
         [ dup infer-word make-call-node ]
     } cond ;
 
-TUPLE: no-recursive-declaration word ;
-
-: declared-infer ( word -- )
+: declared-infer ( word -- )                       
     dup stack-effect [
         make-call-node
     ] [
-        \ no-recursive-declaration inference-error
+        \ missing-effect inference-error
     ] if* ;
 
 GENERIC: collect-label-info* ( label node -- )
@@ -463,9 +479,11 @@ M: #return collect-label-info*
     dup node-param #return node,
     dataflow-graph get 1array over set-node-children ;
 
-: inlined-block? "inlined-block" word-prop ;
+: inlined-block? ( word -- ? )
+    "inlined-block" word-prop ;
 
-: <inlined-block> gensym dup t "inlined-block" set-word-prop ;
+: <inlined-block> ( -- word )
+    gensym dup t "inlined-block" set-word-prop ;
 
 : inline-block ( word -- #label data )
     [
@@ -493,13 +511,15 @@ M: #return collect-label-info*
     namespace swap update ;
 
 : current-stack-height ( -- n )
-    meta-d get length d-in get - ;
+    d-in get meta-d get length - ;
 
 : word-stack-height ( word -- n )
-    stack-effect [ in>> length ] [ out>> length ] bi - ;
+    stack-effect effect-height ;
 
 : bad-recursive-declaration ( word inferred -- )
-    dup 0 < [ 0 ] [ 0 swap ] if <effect> effect-error ;
+    dup 0 < [ 0 swap ] [ 0 ] if <effect>
+    over stack-effect
+    effect-error ;
 
 : check-stack-height ( word height -- )
     over word-stack-height over =
index e6ce2cfa0b8406f3ed3db8bdb60848487353fb7d..770763bfb6b78dd88f6128dff9ace5bcf71f3fdc 100755 (executable)
@@ -142,7 +142,7 @@ M: object xyz ;
 [ f ] [ [ <reversed> length ] \ slot inlined? ] unit-test
 
 ! We don't want to use = to compare literals
-: foo reverse ;
+: foo ( seq -- seq' ) reverse ;
 
 \ foo [
     [
index dc632425fe4335e7e78ffc4af54d7579ef5ce13d..2f7058ba9650294a436eef7c8b7b0ed8a81e0403 100755 (executable)
@@ -41,11 +41,11 @@ C: <interval-constraint> interval-constraint
 GENERIC: apply-constraint ( constraint -- )
 GENERIC: constraint-satisfied? ( constraint -- ? )
 
-: `input node get in-d>> nth ;
-: `output node get out-d>> nth ;
-: class, <class-constraint> , ;
-: literal, <literal-constraint> , ;
-: interval, <interval-constraint> , ;
+: `input ( n -- value ) node get in-d>> nth ;
+: `output ( n -- value ) node get out-d>> nth ;
+: class, ( class value -- ) <class-constraint> , ;
+: literal, ( literal value -- ) <literal-constraint> , ;
+: interval, ( interval value -- ) <interval-constraint> , ;
 
 M: f apply-constraint drop ;
 
index d7e3e78308fec3445760880b4cc0c0d8ce35e380..734c1c551cc171155f061574fa0eadac04b858a8 100755 (executable)
@@ -6,7 +6,7 @@ inference.state accessors combinators ;
 IN: inference.dataflow
 
 ! Computed value
-: <computed> \ <computed> counter ;
+: <computed> ( -- value ) \ <computed> counter ;
 
 ! Literal value
 TUPLE: value < identity-tuple literal uid recursion ;
@@ -88,7 +88,7 @@ M: object flatten-curry , ;
 : r-tail ( n -- seq )
     dup zero? [ drop f ] [ meta-r get swap tail* ] if ;
 
-: node-child node-children first ;
+: node-child ( node -- child ) node-children first ;
 
 TUPLE: #label < node word loop? returns calls ;
 
@@ -217,9 +217,9 @@ M: #call-label calls-label* param>> eq? ;
 
 SYMBOL: node-stack
 
-: >node node-stack get push ;
-: node> node-stack get pop ;
-: node@ node-stack get peek ;
+: >node ( node -- ) node-stack get push ;
+: node> ( -- node ) node-stack get pop ;
+: node@ ( -- node ) node-stack get peek ;
 
 : iterate-next ( -- node ) node@ successor>> ;
 
index 3c6680bcde34fd925951a18a06ff0fcf6e98bda5..9c28d49dd8f7728ef845caba02056389733afc0b 100644 (file)
@@ -29,21 +29,19 @@ M: too-many-r> summary
     drop
     "Quotation pops retain stack elements which it did not push" ;
 
-M: no-effect error.
+M: cannot-infer-effect error.
     "Unable to infer stack effect of " write word>> . ;
 
-M: no-recursive-declaration error.
-    "The recursive word " write
+M: missing-effect error.
+    "The word " write
     word>> pprint
     " must declare a stack effect" print ;
 
 M: effect-error error.
     "Stack effects of the word " write
-    dup word>> pprint
-    " do not match." print
-    "Declared: " write
-    dup word>> stack-effect effect>string .
-    "Inferred: " write effect>> effect>string . ;
+    [ word>> pprint " do not match." print ]
+    [ "Inferred: " write inferred>> effect>string . ]
+    [ "Declared: " write declared>> effect>string . ] tri ;
 
 M: recursive-quotation-error error.
     "The quotation " write
index acc9329670de0754fbcdef168576718e6ed42bdd..7858077bef6c8bbc103279427bf01b9835187add 100755 (executable)
@@ -83,13 +83,13 @@ ARTICLE: "inference-errors" "Inference errors"
 "Main wrapper for all inference errors:"
 { $subsection inference-error }
 "Specific inference errors:"
-{ $subsection no-effect }
+{ $subsection cannot-infer-effect }
 { $subsection literal-expected }
 { $subsection too-many->r }
 { $subsection too-many-r> }
 { $subsection unbalanced-branches-error }
 { $subsection effect-error }
-{ $subsection no-recursive-declaration } ;
+{ $subsection missing-effect } ;
 
 ARTICLE: "inference" "Stack effect inference"
 "The stack effect inference tool is used to check correctness of code before it is run. It is also used by the compiler to build a dataflow graph on which optimizations can be performed. Only words for which a stack effect can be inferred will compile."
index 4ce354bdcc9a8d5c5d1f991be43e9771c3227d58..7f073bfad966861eb52e322bff1bb5916032f339 100755 (executable)
@@ -48,20 +48,12 @@ IN: inference.tests
 ] must-fail
 
 ! Test inference of termination of control flow
-: termination-test-1
-    "foo" throw ;
+: termination-test-1 ( -- * ) "foo" throw ;
 
-: termination-test-2 [ termination-test-1 ] [ 3 ] if ;
+: termination-test-2 ( ? -- x ) [ termination-test-1 ] [ 3 ] if ;
 
 { 1 1 } [ termination-test-2 ] must-infer-as
 
-: infinite-loop infinite-loop ;
-
-[ [ infinite-loop ] infer ] must-fail
-
-: no-base-case-1 dup [ no-base-case-1 ] [ no-base-case-1 ] if ;
-[ [ no-base-case-1 ] infer ] must-fail
-
 : simple-recursion-1 ( obj -- obj )
     dup [ simple-recursion-1 ] [ ] if ;
 
@@ -131,7 +123,7 @@ SYMBOL: sym-test
 
 { 0 1 } [ sym-test ] must-infer-as
 
-: terminator-branch
+: terminator-branch ( a -- b )
     dup [
         length
     ] [
@@ -198,11 +190,10 @@ DEFER: blah4
 [ [ [ 1 ] [ ] bad-combinator ] infer ] must-fail
 
 ! Regression
-: bad-input#
+{ 2 2 } [
     dup string? [ 2array throw ] unless
-    over string? [ 2array throw ] unless ;
-
-{ 2 2 } [ bad-input# ] must-infer-as
+    over string? [ 2array throw ] unless
+] must-infer-as
 
 ! Regression
 
@@ -224,7 +215,7 @@ DEFER: do-crap*
 { 2 1 } [ too-deep ] must-infer-as
 
 ! Error reporting is wrong
-MATH: xyz
+MATH: xyz ( a b -- c )
 M: fixnum xyz 2array ;
 M: float xyz
     [ 3 ] bi@ swapd >r 2array swap r> 2array swap ;
@@ -448,7 +439,7 @@ DEFER: bar
 ! Incorrect stack declarations on inline recursive words should
 ! be caught
 : fooxxx ( a b -- c ) over [ foo ] when ; inline
-: barxxx fooxxx ;
+: barxxx ( a b -- c ) fooxxx ;
 
 [ [ barxxx ] infer ] must-fail
 
@@ -472,9 +463,7 @@ M: string my-hook "a string" ;
 
 DEFER: deferred-word
 
-: calls-deferred-word [ deferred-word ] [ 3 ] if ;
-
-{ 1 1 } [ calls-deferred-word ] must-infer-as
+{ 1 1 } [ [ deferred-word ] [ 3 ] if ] must-infer-as
 
 USE: inference.dataflow
 
@@ -557,26 +546,26 @@ ERROR: custom-error ;
 
 [ [ erg's-inference-bug ] infer ] must-fail
 
-: inference-invalidation-a ;
-: inference-invalidation-b [ inference-invalidation-a ] dip call ; inline
-: inference-invalidation-c [ + ] inference-invalidation-b ;
-
-[ 7 ] [ 4 3 inference-invalidation-c ] unit-test
-
-{ 2 1 } [ inference-invalidation-c ] must-infer-as
-
-[ ] [ "IN: inference.tests : inference-invalidation-a 1 2 ;" eval ] unit-test
-
-[ 3 ] [ inference-invalidation-c ] unit-test
-
-{ 0 1 } [ inference-invalidation-c ] must-infer-as
-
-GENERIC: inference-invalidation-d ( obj -- )
-
-M: object inference-invalidation-d inference-invalidation-c 2drop ;
-
-\ inference-invalidation-d must-infer
-
-[ ] [ "IN: inference.tests : inference-invalidation-a ;" eval ] unit-test
-
-[ [ inference-invalidation-d ] infer ] must-fail
+! : inference-invalidation-a ( -- );
+! : inference-invalidation-b ( quot -- ) [ inference-invalidation-a ] dip call ; inline
+! : inference-invalidation-c ( a b -- c ) [ + ] inference-invalidation-b ;
+! 
+[ 7 ] [ 4 3 inference-invalidation-c ] unit-test
+! 
+! { 2 1 } [ [ + ] inference-invalidation-b ] must-infer-as
+! 
+[ ] [ "IN: inference.tests : inference-invalidation-a 1 2 ;" eval ] unit-test
+! 
+[ 3 ] [ inference-invalidation-c ] unit-test
+! 
+{ 0 1 } [ inference-invalidation-c ] must-infer-as
+! 
+GENERIC: inference-invalidation-d ( obj -- )
+! 
+M: object inference-invalidation-d inference-invalidation-c 2drop ;
+! 
+\ inference-invalidation-d must-infer
+! 
+[ ] [ "IN: inference.tests : inference-invalidation-a ;" eval ] unit-test
+! 
+[ [ inference-invalidation-d ] infer ] must-fail
index 3f52eaadf4691f66aa5f9b0565420a9098a6f2d1..d73e43cdfc1199cb2b8d1cfea2ddc3ecc9e48f6f 100755 (executable)
@@ -29,6 +29,6 @@ M: callable dataflow-with
 
 : forget-errors ( -- )
     all-words [
-        dup subwords [ f "no-effect" set-word-prop ] each
-        f "no-effect" set-word-prop
+        dup subwords [ f "cannot-infer" set-word-prop ] each
+        f "cannot-infer" set-word-prop
     ] each ;
index 2d45ce0d0caf81fb4ef2508bed59c814636d6186..3282cbb5e22ac6ea1a324d7a8b1d332d355e465c 100755 (executable)
@@ -583,7 +583,7 @@ set-primitive-effect
 
 \ (set-os-envs) { array } { } <effect> set-primitive-effect
 
-\ do-primitive [ \ do-primitive no-effect ] "infer" set-word-prop
+\ do-primitive [ \ do-primitive cannot-infer-effect ] "infer" set-word-prop
 
 \ dll-valid? { object } { object } <effect> set-primitive-effect
 
index 6f0eecf2d9617419863fdfb55c6e3ebdec4ae454..9cc1b80f9adfd609f068f3b9d8ec8c6605c999ff 100755 (executable)
@@ -12,16 +12,16 @@ SYMBOL: d-in
 ! Compile-time data stack
 SYMBOL: meta-d
 
-: push-d meta-d get push ;
-: pop-d meta-d get pop ;
-: peek-d meta-d get peek ;
+: push-d ( obj -- ) meta-d get push ;
+: pop-d  ( -- obj ) meta-d get pop ;
+: peek-d ( -- obj ) meta-d get peek ;
 
 ! Compile-time retain stack
 SYMBOL: meta-r
 
-: push-r meta-r get push ;
-: pop-r meta-r get pop ;
-: peek-r meta-r get peek ;
+: push-r ( obj -- ) meta-r get push ;
+: pop-r  ( -- obj ) meta-r get pop ;
+: peek-r ( -- obj ) meta-r get peek ;
 
 ! Head of dataflow IR
 SYMBOL: dataflow-graph
index a5b898315a625fa2c01671a40013c4c43bf0de80..0e79ed2632d1dfb454fe1523e7b6285a0a301dcd 100755 (executable)
@@ -3,10 +3,10 @@ USING: sequences inference.transforms tools.test math kernel
 quotations inference accessors combinators words arrays
 classes ;
 
-: compose-n-quot <repetition> >quotation ;
-: compose-n compose-n-quot call ;
+: compose-n-quot ( word -- quot' ) <repetition> >quotation ;
+: compose-n ( quot -- ) compose-n-quot call ;
 \ compose-n [ compose-n-quot ] 2 define-transform
-: compose-n-test 2 \ + compose-n ;
+: compose-n-test ( -- x ) 2 \ + compose-n ;
 
 [ 6 ] [ 1 2 3 compose-n-test ] unit-test
 
@@ -20,25 +20,12 @@ classes ;
 
 [ 512 ] [ 1 { { 1+ 8 } } bitfield-quot call ] unit-test
 
-\ new must-infer
-
-TUPLE: a-tuple x y z ;
-
-: set-slots-test ( x y z -- )
-    { set-a-tuple-x set-a-tuple-y } set-slots ;
-
-\ set-slots-test must-infer
-
-: set-slots-test-2
-    { set-a-tuple-x set-a-tuple-x } set-slots ;
-
-[ [ set-slots-test-2 ] infer ] must-fail
-
 TUPLE: color r g b ;
 
 C: <color> color
 
-: cleave-test { [ r>> ] [ g>> ] [ b>> ] } cleave ;
+: cleave-test ( color -- r g b )
+    { [ r>> ] [ g>> ] [ b>> ] } cleave ;
 
 { 1 3 } [ cleave-test ] must-infer-as
 
@@ -46,13 +33,13 @@ C: <color> color
 
 [ 1 2 3 ] [ 1 2 3 <color> \ cleave-test word-def call ] unit-test
 
-: 2cleave-test { [ 2array ] [ + ] [ - ] } 2cleave ;
+: 2cleave-test ( a b -- c d e ) { [ 2array ] [ + ] [ - ] } 2cleave ;
 
 [ { 1 2 } 3 -1 ] [ 1 2 2cleave-test ] unit-test
 
 [ { 1 2 } 3 -1 ] [ 1 2 \ 2cleave-test word-def call ] unit-test
 
-: spread-test { [ sq ] [ neg ] [ recip ] } spread ;
+: spread-test ( a b c -- d e f ) { [ sq ] [ neg ] [ recip ] } spread ;
 
 [ 16 -3 1/6 ] [ 4 3 6 spread-test ] unit-test
 
index f10bcef8a92ea5b76d68cb61e5102944c32515c9..e201d663a613efdf316f0e08917b80e1ee49ff9b 100755 (executable)
@@ -5,6 +5,8 @@ strings accessors io.encodings.utf8 math destructors ;
 
 \ exists? must-infer
 \ (exists?) must-infer
+\ file-info must-infer
+\ link-info must-infer
 
 [ ] [ "blahblah" temp-file dup exists? [ delete-directory ] [ drop ] if ] unit-test
 [ ] [ "blahblah" temp-file make-directory ] unit-test
index ff265e43b16df39cb6c93c8f9f8a4e5742c8df44..56a9a461cfdab322cfc05e0955ab3f841cecdcf5 100755 (executable)
@@ -260,7 +260,8 @@ HOOK: delete-directory io-backend ( path -- )
         delete-file
     ] if ;
 
-: to-directory over file-name append-path ;
+: to-directory ( from to -- from to' )
+    over file-name append-path ;
 
 ! Moving and renaming files
 HOOK: move-file io-backend ( from to -- )
index 355e913b14c912bf6a4f8edbfc02de5eca6057ae..d2b092abe8d3c0fbe7aff5de42a5dadf4b228096 100755 (executable)
@@ -26,7 +26,8 @@ M: growable stream-read1 dup empty? [ drop f ] [ pop ] if ;
 : growable-read-until ( growable n -- str )
     >fixnum dupd tail-slice swap harden-as dup reverse-here ;
 
-: find-last-sep swap [ memq? ] curry find-last drop ;
+: find-last-sep ( seq seps -- n )
+    swap [ memq? ] curry find-last drop ;
 
 M: growable stream-read-until
     [ find-last-sep ] keep over [
index 6dfc51f4409c4afcf6961a67161535051346fc42..70533ac33f3cd22b679926bd95697a236fc38064 100755 (executable)
@@ -10,7 +10,7 @@ IN: math.bitfields.tests
 : a 1 ; inline
 : b 2 ; inline
 
-: foo { a b } flags ;
+: foo ( -- flags ) { a b } flags ;
 
 [ 3 ] [ foo ] unit-test
 [ 3 ] [ { a b } flags ] unit-test
index db50d262ad66d222e98c0466245a2d4ac02f5f93..f428df33ae7bc56ecb7dd968de00663ab21f0fe6 100755 (executable)
@@ -192,7 +192,7 @@ unit-test
 [ f ] [ 0 power-of-2? ] unit-test
 [ t ] [ 1 power-of-2? ] unit-test
 
-: ratio>float [ >bignum ] bi@ /f ;
+: ratio>float ( a b -- f ) [ >bignum ] bi@ /f ;
 
 [ 5. ] [ 5 1 ratio>float ] unit-test
 [ 4. ] [ 4 1 ratio>float ] unit-test
@@ -206,7 +206,7 @@ unit-test
 [ HEX: 3fe553522d230931 ]
 [ 61967020039 92984792073 ratio>float double>bits ] unit-test
 
-: random-integer
+: random-integer ( -- n )
     32 random-bits
     1 random zero? [ neg ] when
     1 random zero? [ >bignum ] when ;
index ba728e67c0dcd7c42530b74962072cfd504f355a..82ec51b3f158e6114d202fb8fc3d040e6c6ff604 100755 (executable)
@@ -177,7 +177,7 @@ IN: math.intervals.tests
         { 3 [ (a,b] ] }
     } case ;
 
-: random-op
+: random-op ( -- pair )
     {
         { + interval+ }
         { - interval- }
@@ -192,7 +192,7 @@ IN: math.intervals.tests
     ] when
     random ;
 
-: interval-test
+: interval-test ( -- ? )
     random-interval random-interval random-op ! 3dup . . .
     0 pick interval-contains? over first { / /i } member? and [
         3drop t
@@ -204,7 +204,7 @@ IN: math.intervals.tests
 
 [ t ] [ 40000 [ drop interval-test ] all? ] unit-test
 
-: random-comparison
+: random-comparison ( -- pair )
     {
         { < interval< }
         { <= interval<= }
@@ -212,7 +212,7 @@ IN: math.intervals.tests
         { >= interval>= }
     } random ;
 
-: comparison-test
+: comparison-test ( -- ? )
     random-interval random-interval random-comparison
     [ >r [ random-element ] bi@ r> first execute ] 3keep
     second execute dup incomparable eq? [
index 324d628fd1c9e217a798e8c8d85cf484170cdaf7..7d0519600743b5ecedd65c3fdbc97820969a2c3f 100755 (executable)
@@ -8,9 +8,9 @@ TUPLE: interval from to ;
 
 C: <interval> interval
 
-: open-point f 2array ;
+: open-point ( n -- endpoint ) f 2array ;
 
-: closed-point t 2array ;
+: closed-point ( n -- endpoint ) t 2array ;
 
 : [a,b] ( a b -- interval )
     >r closed-point r> closed-point <interval> ;
@@ -197,7 +197,8 @@ SYMBOL: incomparable
     [ interval-to ] bi@ =
     and and ;
 
-: (interval<) over interval-from over interval-from endpoint< ;
+: (interval<) ( i1 i2 -- i1 i2 ? )
+    over interval-from over interval-from endpoint< ;
 
 : interval< ( i1 i2 -- ? )
     {
index d1b8e6fd37dafc30fbdc6fa09a3a0d1d7dcf0e6e..5d048f0b8e2125959642fefed7726b1a78e0a7e7 100755 (executable)
@@ -43,7 +43,7 @@ DEFER: base>
 SYMBOL: radix
 SYMBOL: negative?
 
-: sign negative? get "-" "+" ? ;
+: sign ( -- str ) negative? get "-" "+" ? ;
 
 : with-radix ( radix quot -- )
     radix swap with-variable ; inline
index 7ab0ffc8067e117ff3dc2e6ec550abf3fbfc948f..f3f9f519911c96d24e215df289c5c28c1534eee5 100755 (executable)
@@ -161,7 +161,8 @@ SYMBOL: potential-loops
         } cond
     ] if ;
 
-: fold-if-branch? dup node-in-d first known-boolean-value? ;
+: fold-if-branch? ( node -- value ? )
+    dup node-in-d first known-boolean-value? ;
 
 : fold-if-branch ( node value -- node' )
     over drop-inputs >r
@@ -214,7 +215,7 @@ SYMBOL: potential-loops
 : clone-node ( node -- newnode )
     clone dup [ clone ] modify-values ;
 
-: lift-branch
+: lift-branch ( node tail -- )
     over
     last-node clone-node
     dup node-in-d \ #merge out-node
index 418278baeedea73385999404db1b0d97126311af..1dc47432d355ecbd6c76430674df74d0fbe77cd4 100755 (executable)
@@ -188,7 +188,7 @@ $nl
 
 ABOUT: "parser"
 
-: $parsing-note
+: $parsing-note ( children -- )
     drop
     "This word should only be called from parsing words."
     $notes ;
@@ -431,9 +431,9 @@ HELP: lexer-factory
 { $var-description "A variable holding a quotation with stack effect " { $snippet "( lines -- lexer )" } ". This quotation is called by the parser to create " { $link lexer } " instances. This variable can be rebound to a quotation which outputs a custom tuple delegating to " { $link lexer } " to customize syntax." } ;
 
 HELP: parse-effect
-{ $values { "effect" "an instance of " { $link effect } } }
+{ $values { "end" string } { "effect" "an instance of " { $link effect } } }
 { $description "Parses a stack effect from the current input line." }
-{ $examples "This word is used by " { $link POSTPONE: ( } " to parse stack effect declarations." }
+{ $examples "This word is used by " { $link POSTPONE: ( } " and " { $link POSTPONE: (( } " to parse stack effect declarations." }
 $parsing-note ;
 
 HELP: parse-base
index 46e93753b547905769f8d124f1461f275f7709c8..4484c2ae54ade6e1be4631a45f39424c267028f9 100755 (executable)
@@ -221,6 +221,8 @@ ERROR: unexpected want got ;
 PREDICATE: unexpected-eof < unexpected
     unexpected-got not ;
 
+M: parsing-word stack-effect drop (( parsed -- parsed )) ;
+
 : unexpected-eof ( word -- * ) f unexpected ;
 
 : (parse-tokens) ( accum end -- accum )
@@ -366,7 +368,7 @@ M: staging-violation summary
         { [ 2dup eq? ] [ 2drop f ] }
         { [ dup not ] [ drop unexpected-eof t ] }
         { [ dup delimiter? ] [ unexpected t ] }
-        { [ dup parsing? ] [ nip execute-parsing t ] }
+        { [ dup parsing-word? ] [ nip execute-parsing t ] }
         [ pick push drop t ]
     } cond ;
 
@@ -393,15 +395,15 @@ SYMBOL: lexer-factory
     lexer-factory get call (parse-lines) ;
 
 ! Parsing word utilities
-: parse-effect ( -- effect )
-    ")" parse-tokens "(" over member? [
-        "Stack effect declaration must not contain (" throw
-    ] [
+: parse-effect ( end -- effect )
+    parse-tokens dup { "(" "((" } intersect empty? [
         { "--" } split1 dup [
             <effect>
         ] [
             "Stack effect declaration must contain --" throw
         ] if
+    ] [
+        "Stack effect declaration must not contain ( or ((" throw
     ] if ;
 
 ERROR: bad-number ;
@@ -415,7 +417,7 @@ ERROR: bad-number ;
 : parse-definition ( -- quot )
     \ ; parse-until >quotation ;
 
-: (:) CREATE-WORD parse-definition ;
+: (:) ( -- word def ) CREATE-WORD parse-definition ;
 
 SYMBOL: current-class
 SYMBOL: current-generic
@@ -429,11 +431,11 @@ SYMBOL: current-generic
         r> call
     ] with-scope ; inline
 
-: (M:)
+: (M:) ( method def -- )
     CREATE-METHOD [ parse-definition ] with-method-definition ;
 
 : scan-object ( -- object )
-    scan-word dup parsing?
+    scan-word dup parsing-word?
     [ V{ } clone swap execute first ] when ;
 
 GENERIC: expected>string ( obj -- str )
index f992b9ca01cfa0290df21f50f46651d3ea9a8857..3df408cb1064c8200ffa9a6797d82d9b0f17599a 100755 (executable)
@@ -5,11 +5,13 @@ hashtables io assocs kernel math namespaces sequences strings
 sbufs io.styles vectors words prettyprint.config
 prettyprint.sections quotations io io.files math.parser effects
 classes.tuple math.order classes.tuple.private classes
-float-arrays ;
+float-arrays combinators ;
 IN: prettyprint.backend
 
 GENERIC: pprint* ( obj -- )
 
+M: effect pprint* effect>string "(" swap ")" 3append text ;
+
 : ?effect-height ( word -- n )
     stack-effect [ effect-height ] [ 0 ] if* ;
 
@@ -26,9 +28,11 @@ GENERIC: pprint* ( obj -- )
 : word-style ( word -- style )
     dup "word-style" word-prop >hashtable [
         [
-            dup presented set
-            dup parsing? over delimiter? rot t eq? or or
-            [ bold font-style set ] when
+            [ presented set ]
+            [
+                [ parsing-word? ] [ delimiter? ] [ t eq? ] tri or or
+                [ bold font-style set ] when
+            ] bi
         ] bind
     ] keep ;
 
@@ -43,13 +47,16 @@ GENERIC: pprint* ( obj -- )
     <block swap pprint-word call block> ; inline
 
 M: word pprint*
-    dup parsing? [
+    dup parsing-word? [
         \ POSTPONE: [ pprint-word ] pprint-prefix
     ] [
-        dup "break-before" word-prop line-break
-        dup pprint-word
-        dup ?start-group dup ?end-group
-        "break-after" word-prop line-break
+        {
+            [ "break-before" word-prop line-break ]
+            [ pprint-word ]
+            [ ?start-group ]
+            [ ?end-group ]
+            [ "break-after" word-prop line-break ]
+        } cleave
     ] if ;
 
 M: real pprint* number>string text ;
index a3c3f4926bb2eb7ee9adbbf881f9a7b8a19fc89f..1da7247a466c41a2af6155652586eab8ab466fdf 100755 (executable)
@@ -8,7 +8,7 @@ prettyprint.config sorting splitting math.parser vocabs
 definitions effects classes.builtin classes.tuple io.files
 classes continuations hashtables classes.mixin classes.union
 classes.intersection classes.predicate classes.singleton
-combinators quotations sets ;
+combinators quotations sets accessors ;
 
 : make-pprint ( obj quot -- block in use )
     [
@@ -145,46 +145,51 @@ GENERIC: see ( defspec -- )
     definer drop pprint-word ;
 
 : stack-effect. ( word -- )
-    dup parsing? over symbol? or not swap stack-effect and
+    [ [ parsing-word? ] [ symbol? ] bi or not ] [ stack-effect ] bi and
     [ effect>string comment. ] when* ;
 
 : word-synopsis ( word -- )
-    dup seeing-word
-    dup definer.
-    dup pprint-word
-    stack-effect. ;
+    {
+        [ seeing-word ]
+        [ definer. ]
+        [ pprint-word ]
+        [ stack-effect. ] 
+    } cleave ;
 
 M: word synopsis* word-synopsis ;
 
 M: simple-generic synopsis* word-synopsis ;
 
 M: standard-generic synopsis*
-    dup definer.
-    dup seeing-word
-    dup pprint-word
-    dup dispatch# pprint*
-    stack-effect. ;
+    {
+        [ definer. ]
+        [ seeing-word ]
+        [ pprint-word ]
+        [ dispatch# pprint* ]
+        [ stack-effect. ]
+    } cleave ;
 
 M: hook-generic synopsis*
-    dup definer.
-    dup seeing-word
-    dup pprint-word
-    dup "combination" word-prop hook-combination-var pprint*
-    stack-effect. ;
+    {
+        [ definer. ]
+        [ seeing-word ]
+        [ pprint-word ]
+        [ "combination" word-prop hook-combination-var pprint* ]
+        [ stack-effect. ]
+    } cleave ;
 
 M: method-spec synopsis*
     first2 method synopsis* ;
 
 M: method-body synopsis*
-    dup dup
-    definer.
-    "method-class" word-prop pprint-word
-    "method-generic" word-prop pprint-word ;
+    [ definer. ]
+    [ "method-class" word-prop pprint-word ]
+    [ "method-generic" word-prop pprint-word ] tri ;
 
 M: mixin-instance synopsis*
-    dup definer.
-    dup mixin-instance-class pprint-word
-    mixin-instance-mixin pprint-word ;
+    [ definer. ]
+    [ class>> pprint-word ]
+    [ mixin>> pprint-word ] tri ;
 
 M: pathname synopsis* pprint* ;
 
@@ -220,7 +225,7 @@ M: word declarations.
         POSTPONE: flushable
     } [ declaration. ] with each ;
 
-: pprint-; \ ; pprint-word ;
+: pprint-; ( -- ) \ ; pprint-word ;
 
 : (see) ( spec -- )
     <colon dup synopsis*
index 73d362010717a0907dea62b9ac6338711096d882..bc88e1e8107e3df2044c69bcc144d9b2c5d6c150 100644 (file)
@@ -190,9 +190,9 @@ M: block short-section ( block -- )
 : if-nonempty ( block quot -- )
     >r dup empty-block? [ drop ] r> if ; inline
 
-: (<block) pprinter-stack get push ;
+: (<block) ( block -- ) pprinter-stack get push ;
 
-: <block f <block> (<block) ;
+: <block ( -- ) f <block> (<block) ;
 
 : <object ( obj -- ) presented associate <block> (<block) ;
 
@@ -288,7 +288,7 @@ M: colon unindent-first-line? drop t ;
 SYMBOL: prev
 SYMBOL: next
 
-: split-groups [ t , ] when ;
+: split-groups ( ? -- ) [ t , ] when ;
 
 M: f section-start-group? drop t ;
 
index e46e507b9dcdee35239566ec9712da47b44ca1e1..cf77fb14e4f6b3a0516531a892ce44e264e04161 100755 (executable)
@@ -27,36 +27,28 @@ C: <slot-spec> slot-spec
     >r "accessors" create dup r>
     "declared-effect" set-word-prop ;
 
-: reader-effect T{ effect f { "object" } { "value" } } ; inline
-
 : reader-word ( name -- word )
-    ">>" append reader-effect create-accessor ;
+    ">>" append (( object -- value )) create-accessor ;
 
 : define-reader ( class slot name -- )
     reader-word object reader-quot define-slot-word ;
 
-: writer-effect T{ effect f { "value" "object" } { } } ; inline
-
 : writer-word ( name -- word )
-    "(>>" swap ")" 3append writer-effect create-accessor ;
+    "(>>" swap ")" 3append (( value object -- )) create-accessor ;
 
 : define-writer ( class slot name -- )
     writer-word [ set-slot ] define-slot-word ;
 
-: setter-effect T{ effect f { "object" "value" } { "object" } } ; inline
-
 : setter-word ( name -- word )
-    ">>" prepend setter-effect create-accessor ;
+    ">>" prepend (( object value -- object )) create-accessor ;
 
 : define-setter ( name -- )
     dup setter-word dup deferred? [
         [ \ over , swap writer-word , ] [ ] make define-inline
     ] [ 2drop ] if ;
 
-: changer-effect T{ effect f { "object" "quot" } { "object" } } ; inline
-
 : changer-word ( name -- word )
-    "change-" prepend changer-effect create-accessor ;
+    "change-" prepend (( object quot -- object )) create-accessor ;
 
 : define-changer ( name -- )
     dup changer-word dup deferred? [
index 314d9697e70b2f443de07d9d81e64d6bda8614e9..d3db24157574c7667095e7edbb3e84c120194ad3 100755 (executable)
@@ -413,7 +413,13 @@ HELP: (
 { $syntax "( inputs -- outputs )" }
 { $values { "inputs" "a list of tokens" } { "outputs" "a list of tokens" } }
 { $description "Declares the stack effect of the most recently defined word, storing a new " { $link effect } " instance in the " { $snippet "\"declared-effect\"" } " word property." }
-{ $notes "Recursive words must have a declared stack effect to compile. See " { $link "effect-declaration" } " for details." } ;
+{ $notes "Words must have a declared stack effect to compile. See " { $link "effect-declaration" } " for details." } ;
+
+HELP: ((
+{ $syntax "(( inputs -- outputs ))" }
+{ $values { "inputs" "a list of tokens" } { "outputs" "a list of tokens" } }
+{ $description "Literal stack effect syntax." }
+{ $notes "Useful for meta-programming with " { $link define-declared } "." } ;
 
 HELP: !
 { $syntax "! comment..." }
index 27c8609a99bd105dcd3ab81699c0efca3dac2691..a0d601e2ad76718d82d6ab876a775971ab401189 100755 (executable)
@@ -182,10 +182,14 @@ IN: bootstrap.syntax
     ] define-syntax
 
     "(" [
-        parse-effect word
+        ")" parse-effect word
         [ swap "declared-effect" set-word-prop ] [ drop ] if*
     ] define-syntax
 
+    "((" [
+        "))" parse-effect parsed
+    ] define-syntax
+
     "MAIN:" [ scan-word in get vocab set-vocab-main ] define-syntax
 
     "<<" [
index a1c7e208dc15021682ed287dd43a9ec6c62eb53c..c23ced42b9be999344bae00b3b5caf69a55e5744 100755 (executable)
@@ -37,11 +37,11 @@ mailbox variables sleep-entry ;
 : thread-registered? ( thread -- ? )
     id>> threads key? ;
 
-: check-unregistered
+: check-unregistered ( thread -- thread )
     dup thread-registered?
     [ "Thread already stopped" throw ] when ;
 
-: check-registered
+: check-registered ( thread -- thread )
     dup thread-registered?
     [ "Thread is not running" throw ] unless ;
 
index 1489750154be7d5b35b765850b456de802144cb4..04cf9a2ac1b712ce54d2e592b7ab928a8defa4b1 100755 (executable)
@@ -50,18 +50,18 @@ H{ } clone root-cache set-global
 
 SYMBOL: load-help?
 
-: source-was-loaded t swap set-vocab-source-loaded? ;
+: source-was-loaded ( vocab -- ) t swap set-vocab-source-loaded? ;
 
-: source-wasn't-loaded f swap set-vocab-source-loaded? ;
+: source-wasn't-loaded ( vocab -- ) f swap set-vocab-source-loaded? ;
 
 : load-source ( vocab -- )
     [ source-wasn't-loaded ] keep
     [ vocab-source-path [ bootstrap-file ] when* ] keep
     source-was-loaded ;
 
-: docs-were-loaded t swap set-vocab-docs-loaded? ;
+: docs-were-loaded ( vocab -- ) t swap set-vocab-docs-loaded? ;
 
-: docs-weren't-loaded f swap set-vocab-docs-loaded? ;
+: docs-weren't-loaded ( vocab -- ) f swap set-vocab-docs-loaded? ;
 
 : load-docs ( vocab -- )
     load-help? get [
index 14e6197683c1411220af1872cdd7228734b8fbe9..96998441924cd0ac9704e3aa91364414d7fd2c41 100755 (executable)
@@ -334,7 +334,7 @@ HELP: bootstrap-word
 { $values { "word" word } { "target" word } }
 { $description "Looks up a word with the same name and vocabulary as the given word, performing a transformation to handle parsing words in the target dictionary. Used during bootstrap to transfer host words to the target dictionary." } ;
 
-HELP: parsing?
+HELP: parsing-word?
 { $values { "obj" object } { "?" "a boolean" } }
 { $description "Tests if an object is a parsing word declared by " { $link POSTPONE: parsing } "." }
 { $notes "Outputs " { $link f } " if the object is not a word." } ;
index bc4b2ede72051f9629e6f30e9da13b3e22f0708c..7111c2789b9d0e7a84f4439a8baa682b8e23c04f 100755 (executable)
@@ -201,8 +201,7 @@ ERROR: bad-create name vocab ;
 : constructor-word ( name vocab -- word )
     >r "<" swap ">" 3append r> create ;
 
-: parsing? ( obj -- ? )
-    dup word? [ "parsing" word-prop ] [ drop f ] if ;
+PREDICATE: parsing-word < word "parsing" word-prop ;
 
 : delimiter? ( obj -- ? )
     dup word? [ "delimiter" word-prop ] [ drop f ] if ;
@@ -225,6 +224,6 @@ M: word hashcode*
 
 M: word literalize <wrapper> ;
 
-: ?word-name dup word? [ word-name ] when ;
+: ?word-name ( word -- name ) dup word? [ word-name ] when ;
 
 : xref-words ( -- ) all-words [ xref ] each ;
index 9dd4fd04b25ffd3fa8806556e676479b9b28108a..e2a2288988f6f79ac161b4a118dbd0a7e0f68579 100755 (executable)
@@ -3,7 +3,7 @@ help.definitions io io.files kernel namespaces vocabs sequences
 parser vocabs.loader ;
 IN: bootstrap.help
 
-: load-help
+: load-help ( -- )
     "alien.syntax" require
     "compiler" require
 
index 0e21876fe92bd7de8d54b198ca2f496e47f144a3..f33e975c9a1de1d1cb6f8a7b54ffe1899d79cca1 100755 (executable)
@@ -3,7 +3,8 @@
 
 USING: arrays kernel math math.functions namespaces sequences
 strings system vocabs.loader calendar.backend threads
-accessors combinators locals classes.tuple math.order ;
+accessors combinators locals classes.tuple math.order
+memoize ;
 IN: calendar
 
 TUPLE: timestamp year month day hour minute second gmt-offset ;
@@ -89,7 +90,7 @@ PRIVATE>
 : >time< ( timestamp -- hour minute second )
     [ hour>> ] [ minute>> ] [ second>> ] tri ;
 
-: instant ( -- dt ) 0 0 0 0 0 0 <duration> ;
+MEMO: instant ( -- dt ) 0 0 0 0 0 0 <duration> ;
 : years ( n -- dt ) instant swap >>year ;
 : months ( n -- dt ) instant swap >>month ;
 : days ( n -- dt ) instant swap >>day ;
@@ -273,7 +274,7 @@ M: timestamp time-
 M: duration time-
     before time+ ;
 
-: <zero> 0 0 0 0 0 0 instant <timestamp> ;
+MEMO: <zero> ( -- timestamp ) 0 0 0 0 0 0 instant <timestamp> ;
 
 : valid-timestamp? ( timestamp -- ? )
     clone instant >>gmt-offset
index f917e20bc4d36dc462707c01b29708a4d4a33367..624a6d802ba749d6f6194510d8061b7abdcea2cf 100755 (executable)
@@ -4,7 +4,7 @@ USING: alien alien.c-types alien.strings alien.compiler
 arrays assocs combinators compiler inference.transforms kernel
 math namespaces parser prettyprint prettyprint.sections
 quotations sequences strings words cocoa.runtime io macros
-memoize debugger io.encodings.ascii ;
+memoize debugger io.encodings.ascii effects ;
 IN: cocoa.messages
 
 : make-sender ( method function -- quot )
@@ -196,7 +196,8 @@ H{
 : define-objc-class-word ( name quot -- )
     [
         over , , \ unless-defined , dup , \ objc-class ,
-    ] [ ] make >r "cocoa.classes" create r> define ;
+    ] [ ] make >r "cocoa.classes" create r>
+    (( -- class )) define-declared ;
 
 : import-objc-class ( name quot -- )
     2dup unless-defined
index 1f94e018c9d6829058f2f7d9e2c9695869eaa884..aa03d3d8ee0382326925f9fecd91868d56aa39da 100755 (executable)
@@ -84,7 +84,8 @@ M: linked-error error.
 \r
 C: <linked-error> linked-error\r
 \r
-: ?linked dup linked-error? [ rethrow ] when ;\r
+: ?linked ( message -- message )\r
+    dup linked-error? [ rethrow ] when ;\r
 \r
 TUPLE: linked-thread < thread supervisor ;\r
 \r
index 66c5e421fab01cf54ba2b85c6ce9ebcf077fa3be..e77760408c1f090bd5a18661001cd6627925f304 100755 (executable)
@@ -17,7 +17,7 @@ GENERIC: send ( message thread -- )
 M: thread send ( message thread -- )\r
     check-registered mailbox-of mailbox-put ;\r
 \r
-: my-mailbox self mailbox-of ;\r
+: my-mailbox ( -- mailbox ) self mailbox-of ;\r
 \r
 : receive ( -- message )\r
     my-mailbox mailbox-get ?linked ;\r
index 261e1d045a801824c6d033689753b297979d4101..f14dba643377d94250b5cd7a93591ed4f8961ae5 100644 (file)
@@ -149,7 +149,8 @@ FUNCTION: CFStringRef FSEventStreamCopyDescription ( FSEventStreamRef streamRef
 
 SYMBOL: event-stream-callbacks
 
-: event-stream-counter \ event-stream-counter counter ;
+: event-stream-counter ( -- n )
+    \ event-stream-counter counter ;
 
 [
     event-stream-callbacks global
index 435a0aca55a16b330563c93ebe67ed2ab592c8f5..c13f08c2937fb2114d793bfde1424428a78a320c 100755 (executable)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2006, 2007 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays io kernel math models namespaces sequences strings
-splitting combinators unicode.categories math.order ;
+splitting combinators unicode.categories math.order accessors ;
 IN: documents
 
 : +col ( loc n -- newloc ) >r first2 r> + 2array ;
@@ -20,9 +20,9 @@ TUPLE: document locs ;
     V{ "" } clone <model> V{ } clone
     { set-delegate set-document-locs } document construct ;
 
-: add-loc document-locs push ;
+: add-loc ( loc document -- ) locs>> push ;
 
-: remove-loc document-locs delete ;
+: remove-loc ( loc document -- ) locs>> delete ;
 
 : update-locs ( loc document -- )
     document-locs [ set-model ] with each ;
@@ -178,7 +178,7 @@ M: one-char-elt next-elt 2drop ;
     >r >r first2 swap r> doc-line r> call
     r> =col ; inline
 
-: ((word-elt)) [ ?nth blank? ] 2keep ;
+: ((word-elt)) ( n seq -- ? n seq ) [ ?nth blank? ] 2keep ;
 
 : break-detector ( ? -- quot )
     [ >r blank? r> xor ] curry ; inline
index 25bd560d429b1b71c63816f3895b9d5c322b0f57..ec8313363e0e1d97c20fc329bf857f96aa1d1d90 100755 (executable)
@@ -51,9 +51,7 @@ M: object find-parse-error
         [ file>> path>> ] [ line>> ] bi edit-location
     ] when* ;
 
-: fix ( word -- )
-    [ "Fixing " write pprint " and all usages..." print nl ]
-    [ [ smart-usage ] keep prefix ] bi
+: edit-each ( seq -- )
     [
         [ "Editing " write . ]
         [
@@ -63,3 +61,8 @@ M: object find-parse-error
             readln
         ] bi
     ] all? drop ;
+
+: fix ( word -- )
+    [ "Fixing " write pprint " and all usages..." print nl ]
+    [ [ smart-usage ] keep prefix ] bi
+    edit-each ;
index 4581c048fdef3cc8390101fac80d8a90600ae7dd..f15a6b24c2e6c3f4b576f1d19cc1cf912649a3e1 100755 (executable)
@@ -5,9 +5,9 @@ quotations arrays namespaces qualified ;
 QUALIFIED: namespaces
 IN: fry
 
-: , "Only valid inside a fry" throw ;
-: @ "Only valid inside a fry" throw ;
-: _ "Only valid inside a fry" throw ;
+: , ( -- * ) "Only valid inside a fry" throw ;
+: @ ( -- * ) "Only valid inside a fry" throw ;
+: _ ( -- * ) "Only valid inside a fry" throw ;
 
 DEFER: (shallow-fry)
 
index 75a14e645bcd9940c80531b1096efad13f537e39..e7ad29a74192a2b9468f29279bf1471f4087ec34 100755 (executable)
@@ -46,12 +46,12 @@ M: predicate word-help* drop \ $predicate ;
 M: word article-name word-name ;
 
 M: word article-title
-    dup parsing? over symbol? or [
+    dup [ parsing-word? ] [ symbol? ] bi or [
         word-name
     ] [
-        dup word-name
-        swap stack-effect
-        [ effect>string " " swap 3append ] when*
+        [ word-name ]
+        [ stack-effect [ effect>string " " prepend ] [ "" if ] if* ] bi
+        append
     ] if ;
 
 M: word article-content
@@ -114,15 +114,7 @@ M: word set-article-parent swap "help-parent" set-word-prop ;
 : $about ( element -- )
     first vocab-help [ 1array $subsection ] when* ;
 
-: (:help-multi)
-    "This error has multiple delegates:" print
-    ($index) nl
-    "Use \\ ... help to get help about a specific delegate." print ;
-
-: (:help-none)
-    drop "No help for this error. " print ;
-
-: (:help-debugger)
+: :help-debugger ( -- )
     nl
     "Debugger commands:" print
     nl
@@ -135,12 +127,8 @@ M: word set-article-parent swap "help-parent" set-word-prop ;
     ":vars - list all variables at error time" print ;
 
 : :help ( -- )
-    error get delegates [ error-help ] map sift
-    {
-        { [ dup empty? ] [ (:help-none) ] }
-        { [ dup length 1 = ] [ first help ] }
-        [ (:help-multi) ]
-    } cond (:help-debugger) ;
+    error get error-help [ help ] [ "No help for this error. " print ] if
+    :help-debugger ;
 
 : remove-article ( name -- )
     dup articles get key? [
index 378dd1e2feb7d834c9f510acf3a6059e8f6b4a09..32e40841501051dda23a36595c105dda413adcb2 100755 (executable)
@@ -22,8 +22,8 @@ SYMBOL: span
 SYMBOL: block
 SYMBOL: table
 
-: last-span? last-element get span eq? ;
-: last-block? last-element get block eq? ;
+: last-span? ( -- ? ) last-element get span eq? ;
+: last-block? ( -- ? ) last-element get block eq? ;
 
 : ($span) ( quot -- )
     last-block? [ nl ] when
@@ -58,18 +58,23 @@ M: f print-element drop ;
 
 ! Some spans
 
-: $snippet [ snippet-style get print-element* ] ($span) ;
+: $snippet ( children -- )
+    [ snippet-style get print-element* ] ($span) ;
 
-: $emphasis [ emphasis-style get print-element* ] ($span) ;
+: $emphasis ( children -- )
+    [ emphasis-style get print-element* ] ($span) ;
 
-: $strong [ strong-style get print-element* ] ($span) ;
+: $strong ( children -- )
+    [ strong-style get print-element* ] ($span) ;
 
-: $url [ url-style get print-element* ] ($span) ;
+: $url ( children -- )
+    [ url-style get print-element* ] ($span) ;
 
-: $nl nl nl drop ;
+: $nl ( children -- )
+    nl nl drop ;
 
 ! Some blocks
-: ($heading)
+: ($heading) ( children quot -- )
     last-element get [ nl ] when ($block) ; inline
 
 : $heading ( element -- )
@@ -230,7 +235,7 @@ M: word ($instance)
 M: string ($instance)
     dup a/an write bl $snippet ;
 
-: $instance first ($instance) ;
+: $instance ( children -- ) first ($instance) ;
 
 : values-row ( seq -- seq )
     unclip \ $snippet swap ?word-name 2array
@@ -278,18 +283,18 @@ M: string ($instance)
     drop
     "Shuffle word. Re-arranges the stack according to the stack effect pattern." $description ;
 
-: $low-level-note
+: $low-level-note ( children -- )
     drop
     "Calling this word directly is not necessary in most cases. Higher-level words call it automatically." $notes ;
 
-: $values-x/y
+: $values-x/y ( children -- )
     drop { { "x" number } { "y" number } } $values ;
 
-: $io-error
+: $io-error ( children -- )
     drop
     "Throws an error if the I/O operation fails." $errors ;
 
-: $prettyprinting-note
+: $prettyprinting-note ( children -- )
     drop {
         "This word should only be called from inside the "
         { $link with-pprint } " combinator."
index 1c56ee8031b85ea22c9afc1ea598d2c3276ff9cb..5fe26c284310789afdaa394c9bd54b11e71b4b4e 100644 (file)
@@ -67,13 +67,11 @@ SYMBOL: html
 
 : <foo> "<" swap ">" 3append ;
 
-: empty-effect T{ effect f 0 0 } ;
-
 : def-for-html-word-<foo> ( name -- )
     #! Return the name and code for the <foo> patterned
     #! word.
     dup <foo> swap [ <foo> write-html ] curry
-    empty-effect html-word ;
+    (( -- )) html-word ;
 
 : <foo "<" prepend ;
 
@@ -81,21 +79,21 @@ SYMBOL: html
     #! Return the name and code for the <foo patterned
     #! word.
     <foo dup [ write-html ] curry
-    empty-effect html-word ;
+    (( -- )) html-word ;
 
 : foo> ">" append ;
 
 : def-for-html-word-foo> ( name -- )
     #! Return the name and code for the foo> patterned
     #! word.
-    foo> [ ">" write-html ] empty-effect html-word ;
+    foo> [ ">" write-html ] (( -- )) html-word ;
 
 : </foo> "</" swap ">" 3append ;
 
 : def-for-html-word-</foo> ( name -- )
     #! Return the name and code for the </foo> patterned
     #! word.
-    </foo> dup [ write-html ] curry empty-effect html-word ;
+    </foo> dup [ write-html ] curry (( -- )) html-word ;
 
 : <foo/> "<" swap "/>" 3append ;
 
@@ -103,14 +101,14 @@ SYMBOL: html
     #! Return the name and code for the <foo/> patterned
     #! word.
     dup <foo/> swap [ <foo/> write-html ] curry
-    empty-effect html-word ;
+    (( -- )) html-word ;
 
 : foo/> "/>" append ;
 
 : def-for-html-word-foo/> ( name -- )
     #! Return the name and code for the foo/> patterned
     #! word.
-    foo/> [ "/>" write-html ] empty-effect html-word ;
+    foo/> [ "/>" write-html ] (( -- )) html-word ;
 
 : define-closed-html-word ( name -- )
     #! Given an HTML tag name, define the words for
@@ -134,11 +132,9 @@ SYMBOL: html
     present escape-quoted-string write-html
     "'" write-html ;
 
-: attribute-effect T{ effect f { "string" } 0 } ;
-
 : define-attribute-word ( name -- )
     dup "=" prepend swap
-    [ write-attr ] curry attribute-effect html-word ;
+    [ write-attr ] curry (( string -- )) html-word ;
 
 ! Define some closed HTML tags
 [
index a8cd1fea91df259f3848451ebf0867f270bf1565..d4e61223215ce131965bb05ec10859aa9bfb6f45 100755 (executable)
@@ -68,7 +68,7 @@ M: 8-bit decode-char
     decode>> decode-8-bit ;
 
 : make-8-bit ( word byte>ch ch>byte -- )
-    [ 8-bit boa ] 2curry dupd curry define ;
+    [ 2drop ] [ 8-bit boa ] 3bi [ ] curry define ;
 
 : define-8-bit-encoding ( name stream -- )
     >r in get create r> parse-file make-8-bit ;
index f98fa4b0d4574975c34541b318293f1aca4b9780..efdf999152398dfddb8d720be1a196053ff77402 100644 (file)
@@ -22,8 +22,11 @@ HOOK: (pipe) io-backend ( -- pipe )
 
 <PRIVATE
 
-: ?reader [ <input-port> &dispose ] [ input-stream get ] if* ;
-: ?writer [ <output-port> &dispose ] [ output-stream get ] if* ;
+: ?reader ( handle/f -- stream )
+    [ <input-port> &dispose ] [ input-stream get ] if* ;
+
+: ?writer ( handle/f -- stream )
+    [ <output-port> &dispose ] [ output-stream get ] if* ;
 
 GENERIC: run-pipeline-element ( input-fd output-fd obj -- quot )
 
index c5dbded093422702cb129cef44b1714d322e1215..e94ca22660e560a9673dbc99c0df04676c24a0b4 100755 (executable)
@@ -80,7 +80,7 @@ M: inet4 make-sockaddr ( inet -- sockaddr )
 
 SYMBOL: port-override
 
-: (port) port-override get swap or ;
+: (port) ( port -- port' ) port-override get swap or ;
 
 PRIVATE>
 
index 3b9c8fc7af8ecefc7c29c57cf559082118b461dc..7f6b3396a1e5b2252bb822295b2a07fa1b254a16 100755 (executable)
@@ -62,7 +62,8 @@ USE: unix
         [ >r >r underlying-handle r> r> redirect ]
     } cond ;
 
-: ?closed dup +closed+ eq? [ drop "/dev/null" ] when ;
+: ?closed ( obj -- obj' )
+    dup +closed+ eq? [ drop "/dev/null" ] when ;
 
 : setup-redirection ( process -- process )
     dup stdin>> ?closed read-flags 0 redirect
index fea5f4e9ae8b8008fef282d975088725b66822b7..5f127995c57576f2083df5515d8c99ccbefa85f4 100755 (executable)
@@ -30,10 +30,10 @@ TUPLE: select-mx < mx read-fdset write-fdset ;
 : init-fdset ( fds fdset -- )
     [ >r t swap munge r> set-nth ] curry each ;
 
-: read-fdset/tasks
+: read-fdset/tasks ( mx -- seq fdset )
     [ reads>> keys ] [ read-fdset>> ] bi ;
 
-: write-fdset/tasks
+: write-fdset/tasks ( mx -- seq fdset )
     [ writes>> keys ] [ write-fdset>> ] bi ;
 
 : max-fd ( assoc -- n )
index e74d0b60784cf410ffcb29ae057f779b72642343..028502560f6691e4bc68610e5000c26d977fe149 100755 (executable)
@@ -146,7 +146,7 @@ GENERIC: lambda-rewrite* ( obj -- )
 
 GENERIC: local-rewrite* ( obj -- )
 
-: lambda-rewrite
+: lambda-rewrite ( quot -- quot' )
     [ local-rewrite* ] [ ] make
     [ [ lambda-rewrite* ] each ] [ ] make ;
 
@@ -273,7 +273,7 @@ M: wlet local-rewrite*
     let-rewrite ;
 
 : parse-locals ( -- vars assoc )
-    parse-effect
+    ")" parse-effect
     word [ over "declared-effect" set-word-prop ] when*
     effect-in make-locals dup push-locals ;
 
@@ -282,9 +282,9 @@ M: wlet local-rewrite*
     2dup "lambda" set-word-prop
     lambda-rewrite first ;
 
-: (::) CREATE-WORD parse-locals-definition ;
+: (::) ( -- word def ) CREATE-WORD parse-locals-definition ;
 
-: (M::)
+: (M::) ( -- word def )
     CREATE-METHOD
     [ parse-locals-definition ] with-method-definition ;
 
index 88bfd01fbec29b244243476f0cc8ea5f2cd50465..ccfc93240614b72a134c2bbbd40a51c03bd8afcb 100755 (executable)
@@ -30,6 +30,6 @@ M: macro reset-word
 
 : n*quot ( n seq -- seq' ) <repetition> concat >quotation ;
 
-: saver \ >r <repetition> >quotation ;
+: saver ( n -- quot ) \ >r <repetition> >quotation ;
 
-: restorer \ r> <repetition> >quotation ;
+: restorer ( n -- quot ) \ r> <repetition> >quotation ;
index c5a063ab983e36b0df0c3ec03bc07cc44146914e..8a174034baa0bdd6b4dda21574e709c8bc3c06ac 100755 (executable)
@@ -3,7 +3,7 @@
 !
 ! Based on pattern matching code from Paul Graham's book 'On Lisp'.
 USING: parser kernel words namespaces sequences classes.tuple
-combinators macros assocs math ;
+combinators macros assocs math effects ;
 IN: match
 
 SYMBOL: _
@@ -11,7 +11,7 @@ SYMBOL: _
 : define-match-var ( name -- )
     create-in
     dup t "match-var" set-word-prop
-    dup [ get ] curry define ;
+    dup [ get ] curry (( -- value )) define-declared ;
 
 : define-match-vars ( seq -- )
     [ define-match-var ] each ;
index 232fdb25b31089a5ef2a2d6e001e0b8e96e09e07..f2d26e330db5eca836ceea5f12da4ca569c9c8a1 100755 (executable)
@@ -73,7 +73,7 @@ IN: math.functions.tests
     gcd nip
 ] unit-test
 
-: verify-gcd
+: verify-gcd ( a b -- ? )
     2dup gcd
     >r rot * swap rem r> = ; 
 
index 1c0491a7ab0e62ada99e9f0bc223a913dfecb472..aa6ebb532c9e4b9f56677febf790d8a426ed46bd 100755 (executable)
@@ -59,5 +59,5 @@ M: memoized reset-word
 : reset-memoized ( word -- )
     "memoize" word-prop clear-assoc ;
 
-: invalidate-memoized ! ( inputs... word )
+: invalidate-memoized ( inputs... word -- )
     [ #in packer call ] [ "memoize" word-prop delete-at ] bi ;
index 7a0b4b532aa414bb595e2792f8ca33400489da44..2caf6e9940c2db0158518e058bf8eb42169a77d7 100755 (executable)
@@ -156,7 +156,7 @@ TUPLE: history back forward ;
 : <history> ( value -- history )
     history construct-model dup reset-history ;
 
-: (add-history)
+: (add-history) ( history to -- )
     swap model-value dup [ swap push ] [ 2drop ] if ;
 
 : go-back/forward ( history to from -- )
index 79470131f3f4514842c0e4c71e3c9cb30fd08769..5fed70925349b75da2a11516ff98aabbec83abde 100755 (executable)
@@ -8,9 +8,11 @@ math.parser opengl.gl opengl.glu combinators arrays sequences
 splitting words byte-arrays assocs combinators.lib ;
 IN: opengl
 
-: coordinates [ first2 ] bi@ ;
+: coordinates ( point1 point2 -- x1 y2 x2 y2 )
+    [ first2 ] bi@ ;
 
-: fix-coordinates [ first2 [ >fixnum ] bi@ ] bi@ ;
+: fix-coordinates ( point1 point2 -- x1 y2 x2 y2 )
+    [ first2 [ >fixnum ] bi@ ] bi@ ;
 
 : gl-color ( color -- ) first4 glColor4d ; inline
 
@@ -73,7 +75,8 @@ MACRO: all-enabled-client-state ( seq quot -- )
     >r { 0.5 0.5 } v+ r> { 0.5 0.5 } v- gl-fill-rect
     GL_FRONT_AND_BACK GL_FILL glPolygonMode ;
 
-: (gl-poly) [ [ gl-vertex ] each ] do-state ;
+: (gl-poly) ( points state -- )
+    [ [ gl-vertex ] each ] do-state ;
 
 : gl-fill-poly ( points -- )
     dup length 2 > GL_POLYGON GL_LINES ? (gl-poly) ;
@@ -81,13 +84,17 @@ MACRO: all-enabled-client-state ( seq quot -- )
 : gl-poly ( points -- )
     GL_LINE_LOOP (gl-poly) ;
 
-: circle-steps dup length v/n 2 pi * v*n ;
+: circle-steps ( steps -- angles )
+    dup length v/n 2 pi * v*n ;
 
-: unit-circle dup [ sin ] map swap [ cos ] map ;
+: unit-circle ( angles -- points1 points2 )
+    [ [ sin ] map ] [ [ cos ] map ] bi ;
 
-: adjust-points [ [ 1 + 0.5 * ] map ] bi@ ;
+: adjust-points ( points1 points2 -- points1' points2' )
+    [ [ 1 + 0.5 * ] map ] bi@ ;
 
-: scale-points zip [ v* ] with map [ v+ ] with map ;
+: scale-points ( loc dim points1 points2 -- points )
+    zip [ v* ] with map [ v+ ] with map ;
 
 : circle-points ( loc dim steps -- points )
     circle-steps unit-circle adjust-points scale-points ;
@@ -161,9 +168,9 @@ TUPLE: sprite loc dim dim2 dlist texture ;
 : <sprite> ( loc dim dim2 -- sprite )
     f f sprite boa ;
 
-: sprite-size2 sprite-dim2 first2 ;
+: sprite-size2 ( sprite -- w h ) sprite-dim2 first2 ;
 
-: sprite-width sprite-dim first ;
+: sprite-width ( sprite -- w ) sprite-dim first ;
 
 : gray-texture ( sprite pixmap -- id )
     gen-texture [
index 28fa49dfce5cf55e9a592fed1c9e79d3a70b4f15..b2dbda7d2e48ece3126a7630fe50f8713321b7a0 100755 (executable)
@@ -105,7 +105,7 @@ TUPLE: openssl-context < secure-context aliens ;
 
 TUPLE: bio handle disposed ;
 
-: <bio> f bio boa ;
+: <bio> ( handle -- bio ) f bio boa ;
 
 M: bio dispose* handle>> BIO_free ssl-error ;
 
@@ -121,7 +121,7 @@ M: bio dispose* handle>> BIO_free ssl-error ;
 
 TUPLE: rsa handle disposed ;
 
-: <rsa> f rsa boa ;
+: <rsa> ( handle -- rsa ) f rsa boa ;
 
 M: rsa dispose* handle>> RSA_free ;
 
index fa35534439c0d3f67bd93c4d700cc87fe0645dfc..ac7080d4517d60f8b9a1e51e44864fe7d2480e25 100755 (executable)
@@ -4,7 +4,7 @@ USING: classes inference inference.dataflow io kernel
 kernel.private math.parser namespaces optimizer prettyprint
 prettyprint.backend sequences words arrays match macros
 assocs sequences.private optimizer.specializers generic
-combinators sorting math quotations ;
+combinators sorting math quotations accessors ;
 IN: optimizer.debugger
 
 ! A simple tool for turning dataflow IR into quotations, for
@@ -33,11 +33,11 @@ M: comment pprint*
 
 : effect-str ( node -- str )
     [
-        " " over node-in-d values%
-        " r: " over node-in-r values%
+        " " over in-d>> values%
+        " r: " over in-r>> values%
         " --" %
-        " " over node-out-d values%
-        " r: " swap node-out-r values%
+        " " over out-d>> values%
+        " r: " swap out-r>> values%
     ] "" make rest ;
 
 MACRO: match-choose ( alist -- )
@@ -63,18 +63,19 @@ MATCH-VARS: ?a ?b ?c ;
     } match-choose ;
 
 M: #shuffle node>quot
-    dup node-in-d over node-out-d pretty-shuffle
+    dup [ in-d>> ] [ out-d>> ] bi pretty-shuffle
     [ , ] [ >r drop t r> ] if*
     dup effect-str "#shuffle: " prepend comment, ;
 
-: pushed-literals node-out-d [ value-literal literalize ] map ;
+: pushed-literals ( node -- seq )
+    out-d>> [ value-literal literalize ] map ;
 
 M: #push node>quot nip pushed-literals % ;
 
 DEFER: dataflow>quot
 
 : #call>quot ( ? node -- )
-    dup node-param dup ,
+    dup param>> dup ,
     [ dup effect-str ] [ "empty call" ] if comment, ;
 
 M: #call node>quot #call>quot ;
@@ -83,38 +84,38 @@ M: #call-label node>quot #call>quot ;
 
 M: #label node>quot
     [
-        dup node-param literalize ,
+        dup param>> literalize ,
         dup #label-loop? "#loop: " "#label: " ?
-        over node-param word-name append comment,
+        over param>> word-name append comment,
     ] 2keep
     node-child swap dataflow>quot , \ call ,  ;
 
 M: #if node>quot
     [ "#if" comment, ] 2keep
-    node-children swap [ dataflow>quot ] curry map %
+    children>> swap [ dataflow>quot ] curry map %
     \ if , ;
 
 M: #dispatch node>quot
     [ "#dispatch" comment, ] 2keep
-    node-children swap [ dataflow>quot ] curry map ,
+    children>> swap [ dataflow>quot ] curry map ,
     \ dispatch , ;
 
-M: #>r node>quot nip node-in-d length \ >r <array> % ;
+M: #>r node>quot nip in-d>> length \ >r <array> % ;
 
-M: #r> node>quot nip node-out-d length \ r> <array> % ;
+M: #r> node>quot nip out-d>> length \ r> <array> % ;
 
 M: object node>quot
     [
         dup class word-name %
         " " %
-        dup node-param unparse %
+        dup param>> unparse %
         " " %
         dup effect-str %
     ] "" make comment, ;
 
 : (dataflow>quot) ( ? node -- )
     dup [
-        2dup node>quot node-successor (dataflow>quot)
+        2dup node>quot successor>> (dataflow>quot)
     ] [
         2drop
     ] if ;
@@ -145,7 +146,7 @@ SYMBOL: node-count
         0 swap [
             >r 1+ r>
             dup #call? [
-                node-param {
+                param>> {
                     { [ dup "intrinsics" word-prop over "if-intrinsics" word-prop or ] [ intrinsics-called ] }
                     { [ dup generic? ] [ generics-called ] }
                     { [ dup method-body? ] [ methods-called ] }
index 3ce6d3081951ac17b893aa10a2003a93f4c198aa..5810a03f80f6be65438e703f6e39857080389b52 100644 (file)
@@ -15,7 +15,7 @@ IN: qualified
     #! Syntax: QUALIFIED-WITH: vocab prefix
     scan scan define-qualified ; parsing
 
-: expect=> scan "=>" assert= ;
+: expect=> ( -- ) scan "=>" assert= ;
 
 : partial-vocab ( words name -- assoc )
     dupd [
index 5c34b7315b10b64d620451e1689fa82e3727e58a..265cd5b59220b170023ca6298f13200a5f52dfeb 100755 (executable)
@@ -102,9 +102,9 @@ MACRO: firstn ( n -- )
 
 ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
-: ,, building get peek push ;
-: v, V{ } clone , ;
-: ,v building get dup peek empty? [ dup pop* ] when drop ;
+: ,, ( obj -- ) building get peek push ;
+: v, ( -- ) V{ } clone , ;
+: ,v ( -- ) building get dup peek empty? [ dup pop* ] when drop ;
 
 : monotonic-split ( seq quot -- newseq )
     [
index 6c5f7e7775f2a12d23bfcbd16e98b8dc20b87bbf..8973b2ea2a3547fbbfc1aa9e01c240b54ce48747 100755 (executable)
@@ -40,16 +40,14 @@ IN: tools.deploy.backend
     my-boot-image-name resource-path exists?
     [ my-arch make-image ] unless ;
 
-: ?, [ , ] [ drop ] if ;
-
 : bootstrap-profile ( -- profile )
-    [
-        "math" deploy-math? get ?,
-        "compiler" deploy-compiler? get ?,
-        "ui" deploy-ui? get ?,
-        "io" native-io? ?,
-        "random" deploy-random? get ?,
-    ] { } make ;
+    {
+        { "math"     deploy-math?     }
+        { "compiler" deploy-compiler? }
+        { "ui"       deploy-ui?       }
+        { "random"   deploy-random?   }
+    } [ nip get ] assoc-filter keys
+    native-io? [ "io" suffix ] when ;
 
 : staging-image-name ( profile -- name )
     "staging."
index 589d6c613b54218f33396ef0552c1805569031c2..065db4d8c1250f900353e8417e19c0c4d29f6c0a 100755 (executable)
@@ -22,9 +22,9 @@ SYMBOL: deploy-io
         { 3 "Level 3 - Non-blocking streams and networking" }
     } ;
 
-: strip-io? deploy-io get 1 = ;
+: strip-io? ( -- ? ) deploy-io get 1 = ;
 
-: native-io? deploy-io get 3 = ;
+: native-io? ( -- ? ) deploy-io get 3 = ;
 
 SYMBOL: deploy-reflection
 
@@ -38,11 +38,11 @@ SYMBOL: deploy-reflection
         { 6 "Level 6 - Full environment" }
     } ;
 
-: strip-word-names? deploy-reflection get 2 < ;
-: strip-prettyprint? deploy-reflection get 3 < ;
-: strip-debugger? deploy-reflection get 4 < ;
-: strip-dictionary? deploy-reflection get 5 < ;
-: strip-globals? deploy-reflection get 6 < ;
+: strip-word-names? ( -- ? ) deploy-reflection get 2 < ;
+: strip-prettyprint? ( -- ? ) deploy-reflection get 3 < ;
+: strip-debugger? ( -- ? ) deploy-reflection get 4 < ;
+: strip-dictionary? ( -- ? ) deploy-reflection get 5 < ;
+: strip-globals? ( -- ? ) deploy-reflection get 6 < ;
 
 SYMBOL: deploy-word-props?
 SYMBOL: deploy-word-defs?
index 39ee85b07a343eb4871191a9fe59d50b2d719935..a7d9da4840823ec769da209c95fc4ddf5a8e558b 100755 (executable)
@@ -6,9 +6,9 @@ system math generator.fixup io.encodings.ascii accessors
 generic ;
 IN: tools.disassembler
 
-: in-file "gdb-in.txt" temp-file ;
+: in-file ( -- path ) "gdb-in.txt" temp-file ;
 
-: out-file "gdb-out.txt" temp-file ;
+: out-file ( -- path ) "gdb-out.txt" temp-file ;
 
 GENERIC: make-disassemble-cmd ( obj -- )
 
index 2417e7ac3930ab33af266a7a4025f1839bbdbf42..41f9f8066db33352877db9884cb2c59ec9389607 100755 (executable)
@@ -64,9 +64,9 @@ M: object add-breakpoint ;
 
 : (step-into-quot) ( quot -- ) add-breakpoint call ;
 
-: (step-into-if) ? (step-into-quot) ;
+: (step-into-if) ( true false ? -- ) ? (step-into-quot) ;
 
-: (step-into-dispatch) nth (step-into-quot) ;
+: (step-into-dispatch) ( array n -- ) nth (step-into-quot) ;
 
 : (step-into-execute) ( word -- )
     {
@@ -80,7 +80,7 @@ M: object add-breakpoint ;
 
 \ (step-into-execute) t "step-into?" set-word-prop
 
-: (step-into-continuation)
+: (step-into-continuation) ( -- )
     continuation callstack >>call break ;
 
 ! Messages sent to walker thread
@@ -260,4 +260,4 @@ SYMBOL: +stopped+
 ! For convenience
 IN: syntax
 
-: B break ;
+: B ( -- ) break ;
index ab6cc35d8ca1d97f31d184c164ecde164f42cc7d..4ee54cd833617cb09f63b8391e1e2fff9eb724bd 100644 (file)
@@ -5,7 +5,7 @@ IN: ui.clipboards
 
 ! Two text transfer buffers
 TUPLE: clipboard contents ;
-: <clipboard> "" clipboard boa ;
+: <clipboard> ( -- clipboard ) "" clipboard boa ;
 
 GENERIC: paste-clipboard ( gadget clipboard -- )
 
@@ -26,6 +26,6 @@ SYMBOL: selection
         2drop
     ] if ;
 
-: com-copy clipboard get gadget-copy ;
+: com-copy ( gadget -- ) clipboard get gadget-copy ;
 
-: com-copy-selection selection get gadget-copy ;
+: com-copy-selection ( gadget -- ) selection get gadget-copy ;
index 5ff0752c19ca6c91a27cdc1a7f5ab202d318c8a6..83628cc17140e5ccc74dfc6804eb43dbcbb18385 100644 (file)
@@ -3,13 +3,17 @@ hashtables quotations words classes sequences namespaces
 arrays assocs ;
 IN: ui.commands
 
-: command-map-row
+: command-map-row ( children -- seq )
     [
-        dup first gesture>string ,
-        second dup command-name ,
-        dup command-word \ $link swap 2array ,
-        command-description ,
-    ] [ ] make ;
+        [ first gesture>string , ]
+        [
+            second
+            [ command-name , ]
+            [ command-word \ $link swap 2array , ]
+            [ command-description , ]
+            tri
+        ] bi
+    ] { } make ;
 
 : command-map. ( command-map -- )
     [ command-map-row ] map
@@ -18,10 +22,11 @@ IN: ui.commands
     $table ;
 
 : $command-map ( element -- )
-    first2
-    dup (command-name) " commands" append $heading
-    swap command-map
-    dup command-map-blurb print-element command-map. ;
+    [ second (command-name) " commands" append $heading ]
+    [
+        first2 swap command-map
+        [ command-map-blurb print-element ] [ command-map. ] bi
+    ] bi ;
 
 : $command ( element -- )
     reverse first3 command-map value-at gesture>string $snippet ;
index 9910082ebfd89ca57690b5d46690621f0dab70a8..e452e6c4559c8f649d52115e4c508d43ce2c3f6e 100755 (executable)
@@ -1,6 +1,6 @@
 ! Copyright (C) 2005, 2008 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: arrays ui.commands ui.gadgets ui.gadgets.borders
+USING: accessors arrays ui.commands ui.gadgets ui.gadgets.borders
 ui.gadgets.labels ui.gadgets.theme
 ui.gadgets.tracks ui.gadgets.packs ui.gadgets.worlds ui.gestures
 ui.render kernel math models namespaces sequences strings
@@ -48,7 +48,8 @@ TUPLE: button-paint plain rollover pressed selected ;
 
 C: <button-paint> button-paint
 
-: find-button [ [ button? ] is? ] find-parent ;
+: find-button ( gadget -- button )
+    [ [ button? ] is? ] find-parent ;
 
 : button-paint ( button paint -- button paint )
     over find-button {
@@ -126,10 +127,11 @@ M: checkmark-paint draw-interior
 : toggle-model ( model -- )
     [ not ] change-model ;
 
-: checkbox-theme
-    f over set-gadget-interior
-    { 5 5 } over set-pack-gap
-    1/2 swap set-pack-align ;
+: checkbox-theme ( gadget -- )
+    f >>interior
+    { 5 5 } >>gap
+    1/2 >>align
+    drop ;
 
 TUPLE: checkbox ;
 
@@ -187,16 +189,18 @@ M: radio-control model-changed
     #! quot has stack effect ( value model label -- )
     swapd [ swapd call gadget, ] 2curry assoc-each ; inline
 
-: radio-button-theme
-    { 5 5 } over set-pack-gap 1/2 swap set-pack-align ;
+: radio-button-theme ( gadget -- )
+    { 5 5 } >>gap
+    1/2 >>align
+    drop ;
 
 : <radio-button> ( value model label -- gadget )
     <radio-knob> label-on-right
     [ <button> ] <radio-control>
     dup radio-button-theme ;
 
-: radio-buttons-theme
-    { 5 5 } swap set-pack-gap ;
+: radio-buttons-theme ( gadget -- )
+    { 5 5 } >>gap drop ;
 
 : <radio-buttons> ( model assoc -- gadget )
     [ [ <radio-button> ] <radio-controls> ] make-filled-pile
index c4a808bb2df3b99c8a6ce1d2995c90a955aaac92..3b8db0228ae0cba53fad422d026b83ce7a947660 100755 (executable)
@@ -211,13 +211,13 @@ M: editor draw-gadget*
 M: editor pref-dim*
     dup editor-font* swap control-value text-dim ;
 
-: contents-changed
+: contents-changed ( model editor -- )
     editor-self swap
     over editor-caret [ over validate-loc ] (change-model)
     over editor-mark [ over validate-loc ] (change-model)
     drop relayout ;
 
-: caret/mark-changed
+: caret/mark-changed ( model editor -- )
     nip editor-self dup relayout-1 scroll>caret ;
 
 M: editor model-changed
@@ -325,19 +325,25 @@ M: editor gadget-text* editor-string % ;
     [ drop dup extend-selection dup editor-mark click-loc ]
     [ select-elt ] if ;
 
-: insert-newline "\n" swap user-input ;
+: insert-newline ( editor -- ) "\n" swap user-input ;
 
-: delete-next-character T{ char-elt } editor-delete ;
+: delete-next-character ( editor -- ) 
+    T{ char-elt } editor-delete ;
 
-: delete-previous-character T{ char-elt } editor-backspace ;
+: delete-previous-character ( editor -- ) 
+    T{ char-elt } editor-backspace ;
 
-: delete-previous-word T{ word-elt } editor-delete ;
+: delete-previous-word ( editor -- ) 
+    T{ word-elt } editor-delete ;
 
-: delete-next-word T{ word-elt } editor-backspace ;
+: delete-next-word ( editor -- ) 
+    T{ word-elt } editor-backspace ;
 
-: delete-to-start-of-line T{ one-line-elt } editor-delete ;
+: delete-to-start-of-line ( editor -- ) 
+    T{ one-line-elt } editor-delete ;
 
-: delete-to-end-of-line T{ one-line-elt } editor-backspace ;
+: delete-to-end-of-line ( editor -- ) 
+    T{ one-line-elt } editor-backspace ;
 
 editor "general" f {
     { T{ key-down f f "DELETE" } delete-next-character }
@@ -350,11 +356,11 @@ editor "general" f {
     { T{ key-down f { A+ } "BACKSPACE" } delete-to-end-of-line }
 } define-command-map
 
-: paste clipboard get paste-clipboard ;
+: paste ( editor -- ) clipboard get paste-clipboard ;
 
-: paste-selection selection get paste-clipboard ;
+: paste-selection ( editor -- ) selection get paste-clipboard ;
 
-: cut clipboard get editor-cut ;
+: cut ( editor -- ) clipboard get editor-cut ;
 
 editor "clipboard" f {
     { T{ paste-action } paste }
@@ -380,17 +386,17 @@ editor "clipboard" f {
         T{ char-elt } editor-next
     ] if ;
 
-: previous-line T{ line-elt } editor-prev ;
+: previous-line ( editor -- ) T{ line-elt } editor-prev ;
 
-: next-line T{ line-elt } editor-next ;
+: next-line ( editor -- ) T{ line-elt } editor-next ;
 
-: previous-word T{ word-elt } editor-prev ;
+: previous-word ( editor -- ) T{ word-elt } editor-prev ;
 
-: next-word T{ word-elt } editor-next ;
+: next-word ( editor -- ) T{ word-elt } editor-next ;
 
-: start-of-line T{ one-line-elt } editor-prev ;
+: start-of-line ( editor -- ) T{ one-line-elt } editor-prev ;
 
-: end-of-line T{ one-line-elt } editor-next ;
+: end-of-line ( editor -- ) T{ one-line-elt } editor-next ;
 
 editor "caret-motion" f {
     { T{ button-down } position-caret }
@@ -406,36 +412,46 @@ editor "caret-motion" f {
     { T{ key-down f { C+ } "END" } end-of-document }
 } define-command-map
 
-: select-all T{ doc-elt } select-elt ;
+: select-all ( editor -- ) T{ doc-elt } select-elt ;
 
-: select-line T{ one-line-elt } select-elt ;
+: select-line ( editor -- ) T{ one-line-elt } select-elt ;
 
-: select-word T{ one-word-elt } select-elt ;
+: select-word ( editor -- ) T{ one-word-elt } select-elt ;
 
 : selected-word ( editor -- string )
     dup gadget-selection?
     [ dup select-word ] unless
     gadget-selection ;
 
-: select-previous-character T{ char-elt } editor-select-prev ;
+: select-previous-character ( editor -- ) 
+    T{ char-elt } editor-select-prev ;
 
-: select-next-character T{ char-elt } editor-select-next ;
+: select-next-character ( editor -- ) 
+    T{ char-elt } editor-select-next ;
 
-: select-previous-line T{ line-elt } editor-select-prev ;
+: select-previous-line ( editor -- ) 
+    T{ line-elt } editor-select-prev ;
 
-: select-next-line T{ line-elt } editor-select-next ;
+: select-next-line ( editor -- ) 
+    T{ line-elt } editor-select-next ;
 
-: select-previous-word T{ word-elt } editor-select-prev ;
+: select-previous-word ( editor -- ) 
+    T{ word-elt } editor-select-prev ;
 
-: select-next-word T{ word-elt } editor-select-next ;
+: select-next-word ( editor -- ) 
+    T{ word-elt } editor-select-next ;
 
-: select-start-of-line T{ one-line-elt } editor-select-prev ;
+: select-start-of-line ( editor -- ) 
+    T{ one-line-elt } editor-select-prev ;
 
-: select-end-of-line T{ one-line-elt } editor-select-next ;
+: select-end-of-line ( editor -- ) 
+    T{ one-line-elt } editor-select-next ;
 
-: select-start-of-document T{ doc-elt } editor-select-prev ;
+: select-start-of-document ( editor -- ) 
+    T{ doc-elt } editor-select-prev ;
 
-: select-end-of-document T{ doc-elt } editor-select-next ;
+: select-end-of-document ( editor -- ) 
+    T{ doc-elt } editor-select-next ;
 
 editor "selection" f {
     { T{ button-down f { S+ } } extend-selection }
index 28fefbe1ae77c9ec5ebdb9477042c3e672e1a401..daa7df6d8cc99c4e6641e38e7c9307860e1462c8 100644 (file)
@@ -8,7 +8,7 @@ IN: ui.gadgets.frames
 ! gadgets gets left-over space.
 TUPLE: frame ;
 
-: <frame-grid> 9 [ drop <gadget> ] map 3 group ;
+: <frame-grid> ( -- grid ) 9 [ drop <gadget> ] map 3 group ;
 
 : @center 1 1 ;
 : @left 0 1 ;
index 411552cc32080463177e9d1f1161b00729a84c93..db750d924d6f5921b6718055207cde2ecea09da6 100755 (executable)
@@ -204,9 +204,9 @@ DEFER: relayout
     dup gadget-layout-state
     [ drop ] [ dup invalidate layout-later ] if ;
 
-: show-gadget t swap set-gadget-visible? ;
+: show-gadget ( gadget -- ) t swap set-gadget-visible? ;
 
-: hide-gadget f swap set-gadget-visible? ;
+: hide-gadget ( gadget -- ) f swap set-gadget-visible? ;
 
 : (set-rect-dim) ( dim gadget quot -- )
     >r 2dup rect-dim =
@@ -249,7 +249,7 @@ M: gadget layout* drop ;
         dup [ layout ] each-child
     ] when drop ;
 
-: graft-queue \ graft-queue get ;
+: graft-queue ( -- dlist ) \ graft-queue get ;
 
 : unqueue-graft ( gadget -- )
     graft-queue over gadget-graft-node delete-node
@@ -308,7 +308,7 @@ M: gadget ungraft* drop ;
 
 SYMBOL: in-layout?
 
-: not-in-layout
+: not-in-layout ( -- )
     in-layout? get
     [ "Cannot add/remove gadgets in layout*" throw ] when ;
 
index 99512562495faf382cdbb1af5a0df45ee9dd5fa8..90b6a54def28cbf45727948a029fe7030abf911d 100644 (file)
@@ -27,7 +27,7 @@ TUPLE: grid children gap fill? ;
 : pref-dim-grid ( grid -- dims )
     grid-children [ [ pref-dim ] map ] map ;
 
-: (compute-grid) [ max-dim ] map ;
+: (compute-grid) ( grid -- seq ) [ max-dim ] map ;
 
 : compute-grid ( grid -- horiz vert )
     pref-dim-grid dup flip (compute-grid) swap (compute-grid) ;
index 111a78b215c6a49931fcfc2a71f2207c1b7f901b..63ab2f1d6f3df955b0b2a1730efd1394e2ffbaf0 100755 (executable)
@@ -36,7 +36,7 @@ M: labelled-gadget focusable-child* labelled-gadget-content ;
         { 0.65 0.45 1.0 1.0 }
     } } swap set-gadget-interior ;
 
-: <title-label> <label> dup title-theme ;
+: <title-label> ( text -- label ) <label> dup title-theme ;
 
 : <title-bar> ( title quot -- gadget )
     [
index 2b83e7db717062951bc662e6ebc524660a0b6508..880fb4450eae0aa37cedc7c287b877dfe93b860a 100755 (executable)
@@ -16,19 +16,22 @@ TUPLE: pane output current prototype scrolls?
 selection-color caret mark selecting? ;
 
 : clear-selection ( pane -- )
-    f over set-pane-caret
-    f swap set-pane-mark ;
+    f >>caret
+    f >>mark
+    drop ;
 
-: add-output 2dup set-pane-output add-gadget ;
+: add-output ( current pane -- )
+    [ set-pane-output ] [ add-gadget ] 2bi ;
 
-: add-current 2dup set-pane-current add-gadget ;
+: add-current ( current pane -- )
+    [ set-pane-current ] [ add-gadget ] 2bi ;
 
 : prepare-line ( pane -- )
-    dup clear-selection
-    dup pane-prototype clone swap add-current ;
+    [ clear-selection ]
+    [ [ pane-prototype clone ] keep add-current ] bi ;
 
 : pane-caret&mark ( pane -- caret mark )
-    dup pane-caret swap pane-mark ;
+    [ caret>> ] [ mark>> ] bi ;
 
 : selected-children ( pane -- seq )
     [ pane-caret&mark sort-pair ] keep gadget-subtree ;
@@ -39,17 +42,18 @@ M: pane gadget-selection
     selected-children gadget-text ;
 
 : pane-clear ( pane -- )
-    dup clear-selection
-    dup pane-output clear-incremental
-    pane-current clear-gadget ;
+    [ clear-selection ]
+    [ pane-output clear-incremental ]
+    [ pane-current clear-gadget ]
+    tri ;
 
-: pane-theme ( editor -- )
-    selection-color swap set-pane-selection-color ;
+: pane-theme ( pane -- )
+    selection-color >>selection-color drop ;
 
 : <pane> ( -- pane )
     pane new
     <pile> over set-delegate
-    <shelf> over set-pane-prototype
+    <shelf> >>prototype
     <pile> <incremental> over add-output
     dup prepare-line
     dup pane-theme ;
index 9f375d01269cd95dafd148f47d619a64393cebad..2ef261b61383fb6763479672192ad6e2a317a72f 100644 (file)
@@ -30,7 +30,7 @@ SYMBOL: margin
 
 : overrun? ( width -- ? ) x get + margin get > ;
 
-: zero-vars [ 0 swap set ] each ;
+: zero-vars ( seq -- ) [ 0 swap set ] each ;
 
 : wrap-line ( -- )
     line-height get y +@
index ce2bf40db8ee2d0f3766a3a76f03a3eb428f80d9..e513853d276de43f4a42bd65988ccfe9ad259535 100755 (executable)
@@ -11,13 +11,13 @@ TUPLE: scroller viewport x y follows ;
 : find-scroller ( gadget -- scroller/f )
     [ [ scroller? ] is? ] find-parent ;
 
-: scroll-up-page scroller-y -1 swap slide-by-page ;
+: scroll-up-page ( scroller -- ) y>> -1 swap slide-by-page ;
 
-: scroll-down-page scroller-y 1 swap slide-by-page ;
+: scroll-down-page ( scroller -- ) y>> 1 swap slide-by-page ;
 
-: scroll-up-line scroller-y -1 swap slide-by-line ;
+: scroll-up-line ( scroller -- ) y>> -1 swap slide-by-line ;
 
-: scroll-down-line scroller-y 1 swap slide-by-line ;
+: scroll-down-line ( scroller -- ) y>> 1 swap slide-by-line ;
 
 : do-mouse-scroll ( scroller -- )
     scroll-direction get-global first2
@@ -35,9 +35,9 @@ scroller H{
 : <scroller-model> ( -- model )
     0 0 0 0 <range> 0 0 0 0 <range> 2array <compose> ;
 
-: x-model g gadget-model model-dependencies first ;
+: x-model ( -- model ) g gadget-model model-dependencies first ;
 
-: y-model g gadget-model model-dependencies second ;
+: y-model ( -- model ) g gadget-model model-dependencies second ;
 
 : <scroller> ( gadget -- scroller )
     <scroller-model> <frame> scroller construct-control [
index 4d2c423445fa6843c444a9a10cebdc1f2e3924b0..c781a9167d66b3af9dac736e14206f8df8c0ce02 100755 (executable)
@@ -22,13 +22,13 @@ TUPLE: slider elevator thumb saved line ;
 
 : min-thumb-dim 15 ;
 
-: slider-value gadget-model range-value >fixnum ;
+: slider-value ( gadget -- n ) gadget-model range-value >fixnum ;
 
-: slider-page gadget-model range-page-value ;
+: slider-page ( gadget -- n ) gadget-model range-page-value ;
 
-: slider-max gadget-model range-max-value ;
+: slider-max ( gadget -- n ) gadget-model range-max-value ;
 
-: slider-max* gadget-model range-max-value* ;
+: slider-max* ( gadget -- n ) gadget-model range-max-value* ;
 
 : thumb-dim ( slider -- h )
     dup slider-page over slider-max 1 max / 1 min
@@ -43,9 +43,9 @@ TUPLE: slider elevator thumb saved line ;
     dup elevator-length over thumb-dim - 1 max
     swap slider-max* 1 max / ;
 
-: slider>screen slider-scale * ;
+: slider>screen ( m scale -- n ) slider-scale * ;
 
-: screen>slider slider-scale / ;
+: screen>slider ( m scale -- n ) slider-scale / ;
 
 M: slider model-changed nip slider-elevator relayout-1 ;
 
@@ -141,8 +141,11 @@ M: elevator layout*
     swap <thumb> g-> set-slider-thumb over add-gadget
     @center frame, ;
 
-: <left-button> { 0 1 } arrow-left -1 <slide-button> ;
-: <right-button> { 0 1 } arrow-right 1 <slide-button> ;
+: <left-button> ( -- button )
+    { 0 1 } arrow-left -1 <slide-button> ;
+
+: <right-button> ( -- button )
+    { 0 1 } arrow-right 1 <slide-button> ;
 
 : build-x-slider ( slider -- )
     [
@@ -151,8 +154,11 @@ M: elevator layout*
         <right-button> @right frame,
     ] with-gadget ;
 
-: <up-button> { 1 0 } arrow-up -1 <slide-button> ;
-: <down-button> { 1 0 } arrow-down 1 <slide-button> ;
+: <up-button> ( -- button )
+    { 1 0 } arrow-up -1 <slide-button> ;
+
+: <down-button> ( -- button )
+    { 1 0 } arrow-down 1 <slide-button> ;
 
 : build-y-slider ( slider -- )
     [
index 77e9375d90c01ee2da58b253de0adc5f17e698c5..f0884f9486f25192c60b5fe2bf547a671a6e1d3b 100644 (file)
@@ -1,17 +1,20 @@
-! Copyright (C) 2005, 2007 Slava Pestov.
+! Copyright (C) 2005, 2008 Slava Pestov.
 ! Copyright (C) 2006, 2007 Alex Chapman.
 ! See http://factorcode.org/license.txt for BSD license.
 USING: arrays kernel sequences io.styles ui.gadgets ui.render
 colors ;
 IN: ui.gadgets.theme
 
-: solid-interior <solid> swap set-gadget-interior ;
+: solid-interior ( gadget color -- )
+    <solid> swap set-gadget-interior ;
 
-: solid-boundary <solid> swap set-gadget-boundary ;
+: solid-boundary ( gadget color -- )
+    <solid> swap set-gadget-boundary ;
 
-: faint-boundary gray solid-boundary ;
+: faint-boundary ( gadget -- )
+    gray solid-boundary ;
 
-: selection-color light-purple ;
+: selection-color ( -- color ) light-purple ;
 
 : plain-gradient
     T{ gradient f {
index 7dd95d542d040908c9d4328021e09632edfe8e02..9d732b55db6d0fec922329450c0c5170aaf2e558 100755 (executable)
@@ -8,7 +8,8 @@ kernel math namespaces sequences models math.vectors ;
 
 TUPLE: viewport ;
 
-: find-viewport [ viewport? ] find-parent ;
+: find-viewport ( gadget -- viewport )
+    [ viewport? ] find-parent ;
 
 : viewport-dim ( viewport -- dim )
     gadget-child pref-dim viewport-gap 2 v*n v+ ;
index b63e7f9d2e5fdbca7707ded01f3c481dd73b49b5..2895dd07ccd5e5f8f02bf4c7d2c8b1f3e7a98f64 100755 (executable)
@@ -12,7 +12,7 @@ title status
 fonts handle
 loc ;
 
-: find-world [ world? ] find-parent ;
+: find-world ( gadget -- world ) [ world? ] find-parent ;
 
 M: f world-status ;
 
index d33a789fe7389ddf71662ab3468d41bf14bc5847..8f40bec1c3cab84fb5486d73b3f49fcfdbe097fe 100644 (file)
@@ -93,7 +93,7 @@ TUPLE: solid color ;
 C: <solid> solid
 
 ! Solid pen
-: (solid)
+: (solid) ( gadget paint -- loc dim )
     solid-color gl-color rect-dim >r origin get dup r> v+ ;
 
 M: solid draw-interior (solid) gl-fill-rect ;
index b8a6f7ec2c94074a97f6057e036d46f3f6714f37..50a3b6134356c6ecb9e9d3bcb6390ea05aaf1aa1 100755 (executable)
@@ -3,22 +3,21 @@
 USING: debugger ui.tools.workspace help help.topics kernel
 models ui.commands ui.gadgets ui.gadgets.panes
 ui.gadgets.scrollers ui.gadgets.tracks ui.gestures
-ui.gadgets.buttons compiler.units assocs words vocabs ;
+ui.gadgets.buttons compiler.units assocs words vocabs
+accessors ;
 IN: ui.tools.browser
 
 TUPLE: browser-gadget pane history ;
 
 : show-help ( link help -- )
-    dup browser-gadget-history add-history
-    >r >link r> browser-gadget-history set-model ;
+    dup history>> add-history
+    >r >link r> history>> set-model ;
 
 : <help-pane> ( browser-gadget -- gadget )
-    browser-gadget-history
-    [ [ dup help ] try drop ] <pane-control> ;
+    history>> [ [ dup help ] try drop ] <pane-control> ;
 
 : init-history ( browser-gadget -- )
-    "handbook" >link <history>
-    swap set-browser-gadget-history ;
+    "handbook" >link <history> >>history drop ;
 
 : <browser-gadget> ( -- gadget )
     browser-gadget new
@@ -31,7 +30,7 @@ TUPLE: browser-gadget pane history ;
 M: browser-gadget call-tool* show-help ;
 
 M: browser-gadget tool-scroller
-    browser-gadget-pane find-scroller ;
+    pane>> find-scroller ;
 
 M: browser-gadget graft*
     dup add-definition-observer
@@ -48,24 +47,24 @@ M: browser-gadget ungraft*
     or or ;
 
 M: browser-gadget definitions-changed ( assoc browser -- )
-    browser-gadget-history
+    history>>
     dup model-value rot showing-definition?
     [ notify-connections ] [ drop ] if ;
 
 : help-action ( browser-gadget -- link )
-    browser-gadget-history model-value >link ;
+    history>> model-value >link ;
 
-: com-follow browser-gadget call-tool ;
+: com-follow ( link -- ) browser-gadget call-tool ;
 
-: com-back browser-gadget-history go-back ;
+: com-back ( browser -- ) history>> go-back ;
 
-: com-forward browser-gadget-history go-forward ;
+: com-forward ( browser -- ) history>> go-forward ;
 
-: com-documentation "handbook" swap show-help ;
+: com-documentation ( browser -- ) "handbook" swap show-help ;
 
-: com-vocabularies "vocab-index" swap show-help ;
+: com-vocabularies ( browser -- ) "vocab-index" swap show-help ;
 
-: browser-help "ui-browser" help-window ;
+: browser-help ( -- ) "ui-browser" help-window ;
 
 \ browser-help H{ { +nullary+ t } } define-command
 
index 8cb581b1c22b8468fa9aec8b81cdd8f9adf8d346..5491e4c93cf98e4ffdbd89273955d4fbbecd4796 100644 (file)
@@ -46,7 +46,7 @@ debugger "gestures" f {
     { T{ button-down } request-focus }
 } define-command-map
 
-: com-traceback error-continuation get traceback-window ;
+: com-traceback ( -- ) error-continuation get traceback-window ;
 
 \ com-traceback H{ { +nullary+ t } } define-command
 
index d01f7ab1398fe1a8683842cab7c7937615328d3c..f0454f5cc26c1fa70e1796b21cd1f3ba56c55249 100755 (executable)
@@ -5,7 +5,7 @@ models sequences ui.gadgets.buttons
 ui.gadgets.packs ui.gadgets.labels tools.deploy.config
 namespaces ui.gadgets.editors ui.gadgets.borders ui.gestures
 ui.commands assocs ui.gadgets.tracks ui ui.tools.listener
-tools.deploy vocabs ui.tools.workspace system ;
+tools.deploy vocabs ui.tools.workspace system accessors ;
 IN: ui.tools.deploy
 
 TUPLE: deploy-gadget vocab settings ;
@@ -40,9 +40,10 @@ TUPLE: deploy-gadget vocab settings ;
     deploy-word-defs? get "Retain all word definitions" <checkbox> gadget,
     deploy-c-types? get "Retain all C types" <checkbox> gadget, ;
 
-: deploy-settings-theme
-    { 10 10 } over set-pack-gap
-    1 swap set-pack-fill ;
+: deploy-settings-theme ( gadget -- )
+    { 10 10 } >>gap
+    1 >>fill
+    drop ;
 
 : <deploy-settings> ( vocab -- control )
     default-config [ <model> ] assoc-map [
@@ -57,16 +58,16 @@ TUPLE: deploy-gadget vocab settings ;
         namespace <mapping> over set-gadget-model
     ] bind ;
 
-: find-deploy-gadget
+: find-deploy-gadget ( gadget -- deploy-gadget )
     [ deploy-gadget? ] find-parent ;
 
-: find-deploy-vocab
+: find-deploy-vocab ( gadget -- vocab )
     find-deploy-gadget deploy-gadget-vocab ;
 
-: find-deploy-config
+: find-deploy-config ( gadget -- config )
     find-deploy-vocab deploy-config ;
 
-: find-deploy-settings
+: find-deploy-settings ( gadget -- settings )
     find-deploy-gadget deploy-gadget-settings ;
 
 : com-revert ( gadget -- )
@@ -100,7 +101,7 @@ deploy-gadget "toolbar" f {
     { T{ key-down f f "RET" } com-deploy }
 } define-command-map
 
-: buttons,
+: buttons, ( -- )
     g <toolbar> { 10 10 } over set-pack-gap gadget, ;
 
 : <deploy-gadget> ( vocab -- gadget )
index e4079a331edc0ffe095b75fadecf385d23c931d6..03c601bcab09ff0e4d26cfcb93c3070c1daed6a4 100644 (file)
@@ -31,7 +31,7 @@ TUPLE: inspector-gadget object pane ;
 
 \ globals H{ { +nullary+ t } { +listener+ t } } define-command
 
-: inspector-help "ui-inspector" help-window ;
+: inspector-help ( -- ) "ui-inspector" help-window ;
 
 \ inspector-help H{ { +nullary+ t } } define-command
 
index 013bc57584ab9ca673dc54a88918a948727affd9..48bf01af37b627b75f4a5da3c3f5306f71912782 100755 (executable)
@@ -172,7 +172,7 @@ M: stack-display tool-scroller
     listener-gadget new dup init-listener
     [ listener-output, listener-input, ] { 0 1 } build-track ;
 
-: listener-help "ui-listener" help-window ;
+: listener-help ( -- ) "ui-listener" help-window ;
 
 \ listener-help H{ { +nullary+ t } } define-command
 
index 51a545db47693d37a48b3f3b1499c0bb4751f7c5..bd9dd351a422b36025d4197a513b56895457c33a 100755 (executable)
@@ -8,7 +8,7 @@ namespaces parser prettyprint quotations tools.annotations
 editors tools.profiler tools.test tools.time tools.walker
 ui.commands ui.gadgets.editors ui.gestures ui.operations
 ui.tools.deploy vocabs vocabs.loader words sequences
-tools.vocabs classes compiler.units ;
+tools.vocabs classes compiler.units accessors ;
 IN: ui.tools.operations
 
 V{ } clone operations set-global
@@ -19,25 +19,25 @@ V{ } clone operations set-global
     { +listener+ t }
 } define-operation
 
-: com-prettyprint . ;
+: com-prettyprint ( obj -- ) . ;
 
 [ drop t ] \ com-prettyprint H{
     { +listener+ t }
 } define-operation
 
-: com-push ;
+: com-push ( obj -- obj ) ;
 
 [ drop t ] \ com-push H{
     { +listener+ t }
 } define-operation
 
-: com-unparse unparse listener-input ;
+: com-unparse ( obj -- ) unparse listener-input ;
 
 [ drop t ] \ com-unparse H{ } define-operation
 
 ! Input
 
-: com-input input-string listener-input ;
+: com-input ( obj -- ) string>> listener-input ;
 
 [ input? ] \ com-input H{
     { +primary+ t }
@@ -58,7 +58,7 @@ V{ } clone operations set-global
 } define-operation
 
 ! Pathnames
-: edit-file edit ;
+: edit-file ( pathname -- ) edit ;
 
 [ pathname? ] \ edit-file H{
     { +keyboard+ T{ key-down f { C+ } "E" } }
@@ -116,21 +116,22 @@ M: word com-stack-effect word-def com-stack-effect ;
 } define-operation
 
 ! Vocabularies
-: com-vocab-words get-workspace swap show-vocab-words ;
+: com-vocab-words ( vocab -- )
+    get-workspace swap show-vocab-words ;
 
 [ vocab? ] \ com-vocab-words H{
     { +secondary+ t }
     { +keyboard+ T{ key-down f { C+ } "B" } }
 } define-operation
 
-: com-enter-in vocab-name set-in ;
+: com-enter-in ( vocab -- ) vocab-name set-in ;
 
 [ vocab? ] \ com-enter-in H{
     { +keyboard+ T{ key-down f { C+ } "I" } }
     { +listener+ t }
 } define-operation
 
-: com-use-vocab vocab-name use+ ;
+: com-use-vocab ( vocab -- ) vocab-name use+ ;
 
 [ vocab-spec? ] \ com-use-vocab H{
     { +secondary+ t }
@@ -165,7 +166,8 @@ M: word com-stack-effect word-def com-stack-effect ;
     { +listener+ t }
 } define-operation
 
-: com-show-profile profiler-gadget call-tool ;
+: com-show-profile ( workspace -- )
+    profiler-gadget call-tool ;
 
 : com-profile ( quot -- ) profile f com-show-profile ;
 
index 8b8d2c07a3d314b9c53e146558789abac584d4ec..cb68630a0851359b1cea1aff9d98fda7cfc0ec01 100755 (executable)
@@ -27,7 +27,7 @@ TUPLE: profiler-gadget pane ;
 : com-method-profile ( gadget -- )
     [ method-profile. ] with-profiler-pane ;
 
-: profiler-help "ui-profiler" help-window ;
+: profiler-help ( -- ) "ui-profiler" help-window ;
 
 \ profiler-help H{ { +nullary+ t } } define-command
 
index 695727e3145d7c04725aff2f375f1af8c04952f8..af1d2633519c6e24280f4950ca85af5d347e502d 100755 (executable)
@@ -27,9 +27,11 @@ M: live-search handle-gesture* ( gadget gesture delegate -- ? )
         2drop t
     ] if ;
 
-: find-live-search [ [ live-search? ] is? ] find-parent ;
+: find-live-search ( gadget -- search )
+    [ [ live-search? ] is? ] find-parent ;
 
-: find-search-list find-live-search live-search-list ;
+: find-search-list ( gadget -- list )
+    find-live-search live-search-list ;
 
 TUPLE: search-field ;
 
index 494e9d67370af23fa086bc45f802eb9d12528122..24622d0e97b00471a08851a03bbdaeafadfcbfdb 100755 (executable)
@@ -55,13 +55,13 @@ M: workspace model-changed
 
 [ workspace-window ] ui-hook set-global
 
-: com-listener stack-display select-tool ;
+: com-listener ( workspace -- ) stack-display select-tool ;
 
-: com-browser browser-gadget select-tool ;
+: com-browser ( workspace -- ) browser-gadget select-tool ;
 
-: com-inspector inspector-gadget select-tool ;
+: com-inspector ( workspace -- ) inspector-gadget select-tool ;
 
-: com-profiler profiler-gadget select-tool ;
+: com-profiler ( workspace -- ) profiler-gadget select-tool ;
 
 workspace "tool-switching" f {
     { T{ key-down f { A+ } "1" } com-listener }
index edf4a5bb869d74ffc83957df2444d6acb437c782..8d205daebf39c60e567126681b9f6cf8de54c747 100755 (executable)
@@ -62,7 +62,7 @@ M: walker-gadget focusable-child*
         g walker-gadget-traceback 1 track,
     ] { 0 1 } build-track ;
 
-: walker-help "ui-walker" help-window ;
+: walker-help ( -- ) "ui-walker" help-window ;
 
 \ walker-help H{ { +nullary+ t } } define-command
 
index 5a334ab56b62efe604b16573eb9088dfe0e65d3a..5b663aef47f9e2a246ada8a0762cdbdb1556ba82 100755 (executable)
@@ -10,7 +10,8 @@ IN: ui.tools.workspace
 
 TUPLE: workspace book listener popup ;
 
-: find-workspace [ workspace? ] find-parent ;
+: find-workspace ( gadget -- workspace )
+    [ workspace? ] find-parent ;
 
 SYMBOL: workspace-window-hook
 
index 552547442acd6429d96fb7518a8c582bdd912241..4d84e3839950ed9cefff75bec4a87e5a2647e365 100644 (file)
@@ -28,6 +28,6 @@ C-STRUCT: stat
 FUNCTION: int stat  ( char* pathname, stat* buf ) ;
 FUNCTION: int lstat ( char* pathname, stat* buf ) ;
 
-: stat-st_atim stat-st_atimespec ;
-: stat-st_mtim stat-st_mtimespec ;
-: stat-st_ctim stat-st_ctimespec ;
+: stat-st_atim ( stat -- timespec ) stat-st_atimespec ;
+: stat-st_mtim ( stat -- timespec ) stat-st_mtimespec ;
+: stat-st_ctim ( stat -- timespec ) stat-st_ctimespec ;
index 0d1ea3bc04b9853847ea7553661d5e1bad3c8beb..6f050fc8f88ebe1a7fe626ab402f0a544323295d 100755 (executable)
@@ -1,8 +1,9 @@
-USING: kernel parser sequences words ;
+USING: kernel parser sequences words effects ;
 IN: values
 
 : VALUE:
-    CREATE-WORD { f } clone [ first ] curry define ; parsing
+    CREATE-WORD { f } clone [ first ] curry
+    (( -- value )) define-declared ; parsing
 
 : set-value ( value word -- )
     word-def first set-first ;