]> gitweb.factorcode.org Git - factor.git/commitdiff
help.markup: adding a $slots word to document slots, use it.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 17 Feb 2020 06:36:19 +0000 (22:36 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 17 Feb 2020 06:36:19 +0000 (22:36 -0800)
38 files changed:
basis/compiler/cfg/cfg-docs.factor
basis/compiler/cfg/instructions/instructions-docs.factor
basis/compiler/cfg/linear-scan/live-intervals/live-intervals-docs.factor
basis/compiler/cfg/ssa/interference/interference-docs.factor
basis/compiler/cfg/stack-frame/stack-frame-docs.factor
basis/compiler/cfg/stacks/local/local-docs.factor
basis/compiler/tree/propagation/info/info-docs.factor
basis/compiler/tree/tree-docs.factor
basis/cpu/x86/assembler/operands/operands-docs.factor
basis/furnace/actions/actions-docs.factor
basis/furnace/auth/auth-docs.factor
basis/furnace/auth/providers/couchdb/couchdb-docs.factor
basis/furnace/auth/providers/providers-docs.factor
basis/furnace/sessions/sessions-docs.factor
basis/furnace/syndication/syndication-docs.factor
basis/help/markup/markup.factor
basis/http/http-docs.factor
basis/http/server/rewrite/rewrite-docs.factor
basis/io/buffers/buffers-docs.factor
basis/math/rectangles/rectangles-docs.factor
basis/models/models-docs.factor
basis/smtp/smtp-docs.factor
basis/stack-checker/alien/alien-docs.factor
basis/ui/baseline-alignment/baseline-alignment-docs.factor
basis/ui/gadgets/line-support/line-support-docs.factor
basis/ui/gadgets/tables/tables-docs.factor
basis/ui/gadgets/worlds/worlds-docs.factor
basis/ui/render/render-docs.factor
basis/ui/tools/listener/listener-docs.factor
basis/vm/vm-docs.factor
basis/wrap/wrap-docs.factor
core/destructors/destructors-docs.factor
core/source-files/errors/errors-docs.factor
core/source-files/source-files-docs.factor
extra/gdbm/gdbm-docs.factor
extra/hashcash/hashcash-docs.factor
extra/pop3/pop3-docs.factor
extra/ui/gadgets/charts/lines/lines-docs.factor

index eeb29162774e4b16d51ca3beb29141d24d27cea3..a9d8c9444f7a365e8076d5f0b1c586690e149946 100644 (file)
@@ -7,41 +7,41 @@ IN: compiler.cfg
 HELP: basic-block
 { $class-description
   "Factors representation of a basic block in the Call Flow Graph (CFG). A basic block is a sequence of instructions that always are executed sequentially and doesn't contain any internal branching. It has the following slots:"
-  { $table
+  { $slots
     {
-        { $slot "number" }
+        "number"
         { "The blocks sequence number. Generated by calling " { $link number-blocks } "." }
     }
     {
-        { $slot "successors" }
+        "successors"
         { "A " { $link vector } " of basic blocks that may be executed directly after this block. Most blocks only have one successor but a block that checks where an if-condition should branch to would have two for example." }
     }
     {
-        { $slot "predecessors" }
+        "predecessors"
         { "The opposite of successors -- a " { $link vector } " of basic blocks from which the execution may have arrived into this block." }
     }
     {
-        { $slot "instructions" }
+        "instructions"
         { "A " { $link vector } " of " { $link insn } " tuples which form the instructions of the basic block." }
     }
     {
-        { $slot "kill-block?" }
+        "kill-block?"
         { "The first and the last block in a cfg and all blocks containing " { $link ##call } " instructions are kill blocks. Kill blocks can't be optimized so they are omitted from certain optimization steps." }
     }
     {
-        { $slot "height" }
+        "height"
         "Block's height as a " { $link height-state } ". What the heights of the block was at entry and how much they were increased in the block."
     }
     {
-        { $slot "replaces" }
+        "replaces"
         { "Used by " { $vocab-link "compiler.cfg.stacks.local" } " for local stack analysis." }
     }
     {
-        { $slot "peeks" }
+        "peeks"
         { "Used by " { $vocab-link "compiler.cfg.stacks.local" } " for local stack analysis." }
     }
     {
-        { $slot "kills" }
+        "kills"
         { "Used by " { $vocab-link "compiler.cfg.stacks.local" } " for local stack analysis." }
     }
   }
@@ -60,12 +60,12 @@ HELP: <cfg>
 HELP: cfg
 { $class-description
   "Call flow graph. It has the following slots:"
-  { $table
-    { { $slot "entry" } { "Root " { $link basic-block } " of the graph." } }
-    { { $slot "word" } { "The " { $link word } " the cfg is produced from." } }
-    { { $slot "post-order" } { "The blocks of the cfg in a post order traversal " { $link sequence } "." } }
-    { { $slot "stack-frame" } { { $link stack-frame } " of the cfg." } }
-    { { $slot "frame-pointer?" } { "Whether the cfg needs a frame pointer. Only cfgs generated for " { $link #alien-callback } " nodes does need it. If the slot is " { $link t } ", then the frame pointer register (" { $link RBP } " on x86.64 archs) will not be clobbered by register allocation. See " { $vocab-link "compiler.cfg.linear-scan" } " for details." } }
+  { $slots
+    { "entry" { "Root " { $link basic-block } " of the graph." } }
+    { "word" { "The " { $link word } " the cfg is produced from." } }
+    { "post-order" { "The blocks of the cfg in a post order traversal " { $link sequence } "." } }
+    { "stack-frame" { { $link stack-frame } " of the cfg." } }
+    { "frame-pointer?" { "Whether the cfg needs a frame pointer. Only cfgs generated for " { $link #alien-callback } " nodes does need it. If the slot is " { $link t } ", then the frame pointer register (" { $link RBP } " on x86.64 archs) will not be clobbered by register allocation. See " { $vocab-link "compiler.cfg.linear-scan" } " for details." } }
   }
 }
 { $see-also <cfg> post-order } ;
index af9b13568fc29bffc40e3eef4e283fe729e92305..61818160a56c8c4a57d5945b50db569768e9d3bd 100644 (file)
@@ -9,27 +9,27 @@ IN: compiler.cfg.instructions
 HELP: ##alien-invoke
 { $class-description
   "An instruction for calling a function in a dynamically linked library. It has the following slots:"
-  { $table
+  { $slots
     {
-        { $slot "dead-outputs" }
+        "dead-outputs"
         { "A sequence of return values from the function that the compiler.cfg.dce pass has figured out are not used." }
     }
     {
-        { $slot "reg-inputs" }
+        "reg-inputs"
         { "Registers to use for the arguments to the function call. Each sequence item is a 3-tuple consisting of a " { $link spill-slot } ", register representation and a register. When the function is called, the parameter is copied from the spill slot to the given register." }
     }
     {
-        { $slot "stack-inputs" }
+        "stack-inputs"
         { "Stack slots used for the arguments to the function call." }
     }
     {
-        { $slot "reg-outputs" }
+        "reg-outputs"
         { "If the called function returns a value, then this slot is a one-element sequence containing a 3-tuple describing which register is used for the return value." }
     }
-    { { $slot "symbols" } { "Name of the function to call." } }
-    { { $slot "dll" } { "A dll handle or " { $link f } "." } }
+    { "symbols" { "Name of the function to call." } }
+    { "dll" { "A dll handle or " { $link f } "." } }
     {
-        { $slot "gc-map" }
+        "gc-map"
         {
             "If the invoked C function calls Factor code which triggers a GC, then a "
             { $link gc-map }
@@ -44,9 +44,9 @@ HELP: ##alien-invoke
 HELP: ##alien-indirect
 { $class-description
   "An instruction representing an indirect alien call. The first item on the datastack is a pointer to the function to call and the parameters follows. It has the following slots:"
-  { $table
-    { { $slot "src" } { "Spill slot containing the function pointer." } }
-    { { $slot "reg-outputs" } { "Sequence of output values passed in registers." } }
+  { $slots
+    { "src" { "Spill slot containing the function pointer." } }
+    { "reg-outputs" { "Sequence of output values passed in registers." } }
   }
 }
 { $see-also alien-indirect %alien-indirect } ;
@@ -54,11 +54,11 @@ HELP: ##alien-indirect
 HELP: ##allot
 { $class-description
   "An instruction for allocating memory in the nursery. Usually the instruction is preceded by " { $link ##check-nursery-branch } " which checks that there is enough room in the nursery to allocate. It has the following slots:"
-  { $table
-    { { $slot "dst" } { "Register to put the pointer to the memory in." } }
-    { { $slot "size" } { "Number of bytes to allocate." } }
-    { { $slot "class-of" } { "Class of object to allocate, e.g " { $link tuple } " or " { $link array } "." } }
-    { { $slot "temp" } { "Temporary register to clobber." } }
+  { $slots
+    { "dst" { "Register to put the pointer to the memory in." } }
+    { "size" { "Number of bytes to allocate." } }
+    { "class-of" { "Class of object to allocate, e.g " { $link tuple } " or " { $link array } "." } }
+    { "temp" { "Temporary register to clobber." } }
   }
 } ;
 
@@ -79,8 +79,8 @@ HELP: ##box-alien
 HELP: ##call
 { $class-description
   "An instruction for calling a Factor word."
-  { $table
-    { { $slot "word" } { "The word called." } }
+  { $slots
+    { "word" { "The word called." } }
   }
 } ;
 
@@ -89,11 +89,11 @@ HELP: ##check-nursery-branch
   "Instruction that inserts a conditional branch to a " { $link basic-block } " that garbage collects the nursery. The " { $vocab-link "compiler.cfg.gc-checks" } " vocab goes through each block in the " { $link cfg } " and checks if it allocates memory. If it does, then this instruction is inserted in the cfg before that block and checks if there is enough available space in the nursery. If it isn't, then a basic block containing code for garbage collecting the nursery is executed."
   $nl
   "It has the following slots:"
-  { $table
-    { { $slot "size" } { "Number of bytes the next block in the cfg will allocate." } }
-    { { $slot "cc" } { "A comparison symbol." } }
-    { { $slot "temp1" } { "First register that will be clobbered." } }
-    { { $slot "temp2" } { "Second register that will be clobbered." } }
+  { $slots
+    { "size" { "Number of bytes the next block in the cfg will allocate." } }
+    { "cc" { "A comparison symbol." } }
+    { "temp1" { "First register that will be clobbered." } }
+    { "temp2" { "Second register that will be clobbered." } }
   }
 }
 { $see-also %check-nursery-branch } ;
@@ -101,8 +101,8 @@ HELP: ##check-nursery-branch
 HELP: ##compare-float-ordered-branch
 { $class-description
   "It has the following slots:"
-  { $table
-    { { $slot "cc" } { "Comparison symbol." } }
+  { $slots
+    { "cc" { "Comparison symbol." } }
   }
 } ;
 
@@ -119,8 +119,8 @@ HELP: ##compare-integer
 
 HELP: ##copy
 { $class-description "Instruction that copies a value from one register to another of the same type. For example, you can copy between two gprs or two simd registers but not across. It has the following slots:"
-  { $table
-    { { $slot "rep" } { "Value representation. Both the source and destination register must have the same representation." } }
+  { $slots
+    { "rep" { "Value representation. Both the source and destination register must have the same representation." } }
   }
 } ;
 
@@ -139,8 +139,8 @@ HELP: ##inc
 HELP: ##jump
 { $class-description
   "An uncondiation jump instruction. It has the following slots:"
-  { $table
-    { { $slot "word" } { "Word whose address the instruction is jumping to." } }
+  { $slots
+    { "word" { "Word whose address the instruction is jumping to." } }
   }
   "Note that the optimizer is sometimes able to optimize away a " { $link ##call } " and " { $link ##return } " pair into one ##jump instruction."
 } ;
@@ -156,9 +156,9 @@ HELP: ##load-memory-imm
 HELP: ##load-reference
 { $class-description
   "An instruction for loading a pointer to an object into a register. It has the following slots:"
-  { $table
-    { { $slot "dst" } { "Register to load the pointer into." } }
-    { { $slot "obj" } { "A Factor object." } }
+  { $slots
+    { "dst" { "Register to load the pointer into." } }
+    { "obj" { "A Factor object." } }
   }
 } ;
 
@@ -174,10 +174,10 @@ HELP: ##load-vector
 HELP: ##local-allot
 { $class-description
   "An instruction for allocating memory in the words own stack frame. It's mostly used for receiving data from alien calls. It has the following slots:"
-  { $table
-    { { $slot "dst" } { "Register into which a pointer to the stack allocated memory is put." } }
-    { { $slot "size" } { "Number of bytes to allocate." } }
-    { { $slot "offset" } { } }
+  { $slots
+    { "dst" { "Register into which a pointer to the stack allocated memory is put." } }
+    { "size" { "Number of bytes to allocate." } }
+    { "offset" { } }
   }
 }
 { $see-also ##allot } ;
@@ -191,8 +191,8 @@ HELP: ##no-tco
 
 HELP: ##parallel-copy
 { $class-description "An instruction for performing multiple copies. It allows for optimizations or (or prunings) if more than one source or destination vreg is the same. They are transformed into " { $link ##copy } " instructions in " { $link destruct-ssa } ". It has the following slots:"
-  { $table
-    { { $slot "values" } { "An assoc mapping source vregs to destinations." } }
+  { $slots
+    { "values" { "An assoc mapping source vregs to destinations." } }
   }
 } ;
 
@@ -205,9 +205,9 @@ HELP: ##peek
 HELP: ##phi
 { $class-description
   "A special kind of instruction used to mark control flow. It is inserted by the " { $vocab-link "compiler.cfg.ssa.construction" } " vocab. It has the following slots:"
-  { $table
-    { { $slot "inputs" } { "An assoc containing as keys the blocks/block numbers where the vreg was defined and as values the vreg. Why care about the blocks?" } }
-    { { $slot "dst" } { "A merged vreg for the value." } }
+  { $slots
+    { "inputs" { "An assoc containing as keys the blocks/block numbers where the vreg was defined and as values the vreg. Why care about the blocks?" } }
+    { "dst" { "A merged vreg for the value." } }
   }
 } ;
 
@@ -241,22 +241,22 @@ HELP: ##save-context
 HELP: ##set-slot
 { $class-description
   "An instruction for the non-primitive, non-immediate variant of " { $link set-slot } ". It has the following slots:"
-  { $table
-    { { $slot "src" } { "Object to put in the slot." } }
-    { { $slot "obj" } { "Object to set the slot on." } }
-    { { $slot "slot" } { "Slot index." } }
-    { { $slot "tag" } { "Type tag for obj." } }
+  { $slots
+    { "src" { "Object to put in the slot." } }
+    { "obj" { "Object to set the slot on." } }
+    { "slot" { "Slot index." } }
+    { "tag" { "Type tag for obj." } }
   }
 } ;
 
 HELP: ##set-slot-imm
 { $class-description
   "An instruction for what? It has the following slots:"
-  { $table
-    { { $slot "src" } { "Register containing the value to put in the slot." } }
-    { { $slot "obj" } { "Register containing the object to set the slot on.." } }
-    { { $slot "slot" } { "Slot index." } }
-    { { $slot "tag" } { "Type tag for obj." } }
+  { $slots
+    { "src" { "Register containing the value to put in the slot." } }
+    { "obj" { "Register containing the object to set the slot on.." } }
+    { "slot" { "Slot index." } }
+    { "tag" { "Type tag for obj." } }
   }
 }
 { $see-also ##set-slot %set-slot-imm } ;
@@ -268,10 +268,10 @@ HELP: ##single>double-float
 
 HELP: ##shuffle-vector-imm
 { $class-description "Shuffles the vector in a SSE register according to the given shuffle pattern. It is used to extract a given element of the vector."
-  { $table
-    { { $slot "dst" } { "Destination register to shuffle the vector to." } }
-    { { $slot "src" } { "Source register." } }
-    { { $slot "shuffle" } { "Shuffling pattern." } }
+  { $slots
+    { "dst" { "Destination register to shuffle the vector to." } }
+    { "src" { "Source register." } }
+    { "shuffle" { "Shuffling pattern." } }
   }
 }
 { $see-also %shuffle-vector-imm } ;
@@ -279,31 +279,31 @@ HELP: ##shuffle-vector-imm
 HELP: ##slot-imm
 { $class-description
   "Instruction for reading a slot with a given index from an object."
-  { $table
-    { { $slot "dst" } { "Register to read the slot value into." } }
-    { { $slot "obj" } { "Register containing the object with the slot." } }
-    { { $slot "slot" } { "Slot index." } }
-    { { $slot "tag" } { "Type tag for obj." } }
+  { $slots
+    { "dst" { "Register to read the slot value into." } }
+    { "obj" { "Register containing the object with the slot." } }
+    { "slot" { "Slot index." } }
+    { "tag" { "Type tag for obj." } }
   }
 } { $see-also %slot-imm } ;
 
 HELP: ##spill
 { $class-description "Instruction that copies a value from a register to a " { $link spill-slot } "."
-  { $table
-    { { $slot "rep" } { "Register representation which is necessary when spilling SIMD registers." } }
+  { $slots
+    { "rep" { "Register representation which is necessary when spilling SIMD registers." } }
   }
 } { $see-also ##reload } ;
 
 HELP: ##store-memory-imm
 { $class-description "Instruction that copies an 8 byte value from a XMM register to a memory location addressed by a normal register. This instruction is often turned into a cheaper " { $link ##store-memory } " instruction in the " { $link value-numbering } " pass."
-  { $table
-    { { $slot "base" } { "Vreg that contains the base address." } }
+  { $slots
+    { "base" { "Vreg that contains the base address." } }
     {
-        { $slot "offset" }
+        "offset"
         { "Offset in bytes from the address to where the data should be written." }
     }
-    { { $slot "rep" } { "Value representation in the vector register." } }
-    { { $slot "src" } { "Vreg that contains the item to set." } }
+    { "rep" { "Value representation in the vector register." } }
+    { "src" { "Vreg that contains the item to set." } }
   }
 }
 { $see-also %store-memory-imm } ;
@@ -314,9 +314,9 @@ HELP: ##test-branch
 
 HELP: ##unbox-any-c-ptr
 { $class-description "Instruction that unboxes a pointer in a register so that it can be fed to a C FFI function. For example, if 'src' points to a " { $link byte-array } ", then in 'dst' will be put a pointer to the first byte of that byte array."
-  { $table
-    { { $slot "dst" } { "Destination register." } }
-    { { $slot "src" } { "Source register." } }
+  { $slots
+    { "dst" { "Destination register." } }
+    { "src" { "Source register." } }
   }
 }
 { $see-also %unbox-any-c-ptr } ;
@@ -327,10 +327,10 @@ HELP: ##unbox-long-long
 HELP: ##vector>scalar
 { $class-description
   "This instruction is very similar to " { $link ##copy } "."
-  { $table
-    { { $slot "dst" } { "destination vreg" } }
-    { { $slot "src" } { "source vreg" } }
-    { { $slot "rep" } { "representation for the source vreg" } }
+  { $slots
+    { "dst" { "destination vreg" } }
+    { "src" { "source vreg" } }
+    { "rep" { "representation for the source vreg" } }
   }
 }
 { $notes "The two vregs must not necessarily share the same representation." }
@@ -338,9 +338,9 @@ HELP: ##vector>scalar
 
 HELP: ##vm-field
 { $class-description "Instruction for loading a pointer to a vm field."
-  { $table
-    { { $slot "dst" } { "Register to load the field into." } }
-    { { $slot "offset" } { "Offset of the field relative to the vm address." } }
+  { $slots
+    { "dst" { "Register to load the field into." } }
+    { "offset" { "Offset of the field relative to the vm address." } }
   }
 }
 { $see-also %vm-field } ;
@@ -348,13 +348,13 @@ HELP: ##vm-field
 HELP: ##write-barrier
 { $class-description
   "An instruction for inserting a write barrier. This instruction is almost always inserted after a " { $link ##set-slot } " instruction. If the container object is in an older generation than the item inserted, this instruction guarantees that the item will not be garbage collected. It has the following slots:"
-  { $table
-    { { $slot "src" } { "Object to which the writer barrier refers." } }
-    { { $slot "slot" } { "Slot index of the object." } }
-    { { $slot "scale" } { "No idea." } }
-    { { $slot "tag" } { "Type tag for obj." } }
-    { { $slot "temp1" } { "First temporary register to clobber." } }
-    { { $slot "temp2" } { "Second temporary register to clobber." } }
+  { $slots
+    { "src" { "Object to which the writer barrier refers." } }
+    { "slot" { "Slot index of the object." } }
+    { "scale" { "No idea." } }
+    { "tag" { "Type tag for obj." } }
+    { "temp1" { "First temporary register to clobber." } }
+    { "temp2" { "Second temporary register to clobber." } }
   }
 } ;
 
@@ -396,13 +396,13 @@ HELP: gc-map-insn
 
 HELP: gc-map
 { $class-description "A tuple that holds info necessary for a gc cycle to figure out where the gc root pointers are. It has the following slots:"
-  { $table
+  { $slots
     {
-        { $slot "gc-roots" }
+        "gc-roots"
         { { $link sequence } " of vregs or spill-slots" }
     }
     {
-        { $slot "derived-roots" }
+        "derived-roots"
         { "An " { $link assoc } " of pairs of vregs or spill slots." } }
   }
   "The 'gc-roots' and 'derived-roots' slots are initially vreg integers referencing objects that are live during the gc call and needs to be spilled so that they can be traced. In the " { $link emit-gc-map-insn } " word in " { $vocab-link "compiler.cfg.linear-scan.assignment" } " they are converted to spill slots which the collector is able to trace."
index 80194e0b5f2520f4e3b1c65ffb63a89a2af00deb..2d6e70d099f4c4c405d9bad9e5557b0bd4789066 100644 (file)
@@ -76,26 +76,27 @@ HELP: last-use?
 
 HELP: live-interval-state
 { $class-description "A class encoding the \"liveness\" of a virtual register. It has the following slots:"
-  { $table
-    { { $slot "vreg" } { "The vreg this live interval state is bound to." } }
+  { $slots
+    { "vreg" { "The vreg this live interval state is bound to." } }
     {
-        { $slot "reg" }
+        "reg"
         { "The allocated register, set in the " { $link allocate-registers } " step." }
     }
     {
-        { $slot "spill-rep" }
+        "spill-rep"
         { { $link representation } " the vreg will have when it is spilled." }
     }
     {
-        { $slot "spill-to" }
+        "spill-to"
         { { $link spill-slot } " to use for spilling, if it needs to be spilled." }
     }
     {
-        { $slot "ranges" }
+        "ranges"
         { "Inclusive ranges where the live interval is live. This is because the [start,end] interval can have gaps." }
     }
     {
-        { $slot "uses" } { "sequence of insn# numbers which reference insructions that use the register in the live interval." }
+        "uses"
+        { "sequence of insn# numbers which reference insructions that use the register in the live interval." }
     }
   }
 }
@@ -118,9 +119,9 @@ HELP: record-temp
 
 HELP: sync-point
 { $class-description "A location where all live registers have to be spilled. For example when garbage collection is run or an alien ffi call is invoked. Figuring out where in the " { $link cfg } " the sync points are is done in the " { $link compute-live-intervals } " step. The tuple has the following slots:"
-  { $table
-    { { $slot "n" } { "Set from an instructions sequence number." } }
-    { { $slot "keep-dst?" } { "Boolean that determines whether registers are spilled around this sync point." } }
+  { $slots
+    { "n" { "Set from an instructions sequence number." } }
+    { "keep-dst?" { "Boolean that determines whether registers are spilled around this sync point." } }
   }
 }
 { $see-also cfg>sync-points clobber-insn hairy-clobber-insn insn } ;
index fbdbdd4b1c4303e50c16e2bf61fc45206faa920a..831f98a4734a35bd000e1d8e205deb2e2f26b931 100644 (file)
@@ -8,9 +8,9 @@ HELP: sets-interfere?
 HELP: vreg-info
 { $class-description
   "Slots:"
-  { $table
-    { { $slot "vreg" } { "The vreg the vreg-info is the info for." } }
-    { { $slot "bb" } { "The " { $link basic-block } " in which the vreg is defined." } }
+  { $slots
+    { "vreg" { "The vreg the vreg-info is the info for." } }
+    { "bb" { "The " { $link basic-block } " in which the vreg is defined." } }
   }
 } ;
 
index 349cd3e420657c847e2629b7ea9946ab527767b0..1f168eba2ab3676aab960d3265e4145dadd7dd57 100644 (file)
@@ -11,15 +11,15 @@ HELP: stack-frame
     { "One final " { $link cell } " of padding." }
   }
   "The stack frame is also aligned to a 16 byte boundary. It has the following slots:"
-  { $table
-    { { $slot "total-size" } { "Total size of the stack frame." } }
-    { { $slot "params" } { "Reserved parameter space." } }
-    { { $slot "allot-area-base" } { "Base offset of the allocation area." } }
-    { { $slot "allot-area-size" } { "Number of bytes requires for the allocation area." } }
-    { { $slot "allot-area-align" } { "This slot is always at least " { $link cell } " bytes." } }
-    { { $slot "spill-area-base" } { "Base offset for the spill area." } }
-    { { $slot "spill-area-size" } { "Number of bytes requires for all spill slots." } }
-    { { $slot "spill-area-align" } { "This slot is always at least " { $link cell } " bytes." } }
+  { $slots
+    { "total-size" { "Total size of the stack frame." } }
+    { "params" { "Reserved parameter space." } }
+    { "allot-area-base" { "Base offset of the allocation area." } }
+    { "allot-area-size" { "Number of bytes requires for the allocation area." } }
+    { "allot-area-align" { "This slot is always at least " { $link cell } " bytes." } }
+    { "spill-area-base" { "Base offset for the spill area." } }
+    { "spill-area-size" { "Number of bytes requires for all spill slots." } }
+    { "spill-area-align" { "This slot is always at least " { $link cell } " bytes." } }
   }
 }
 { $see-also align-stack } ;
index 0131a1098d478fc5dd7918320d17b7c739b1d06b..5e78783540b820be490605fd3ce44ef456e27a61 100644 (file)
@@ -29,21 +29,21 @@ HELP: global-loc>local
 
 HELP: height-state
 { $description "A tuple which keeps track of the stacks heights and increments of a " { $link basic-block } " during local analysis. The idea is that if the stack change instructions are tracked, then multiple changes can be folded into one. It has the following slots:"
-  { $table
+  { $slots
     {
-        { $slot "ds-begin" }
+        "ds-begin"
         "Datastack height at the beginning of the block."
     }
     {
-        { $slot "rs-begin" }
+        "rs-begin"
         "Retainstack height at the beginning of the block."
     }
     {
-        { $slot "ds-inc" }
+        "ds-inc"
         "Datastack change during the block."
     }
     {
-        { $slot "rs-inc" }
+        "rs-inc"
         "Retainstack change during the block."
     }
   }
@@ -103,10 +103,10 @@ HELP: replaces
 
 ARTICLE: "compiler.cfg.stacks.local" "Local stack analysis"
 "For each " { $link basic-block } " in the " { $link cfg } ", local stack analysis is performed. The analysis is started right after the block is created with " { $link begin-local-analysis } " and finished with " { $link end-local-analysis } ", when the construction of the block is complete. During the analysis, three sets containing stack locations are built:"
-{ $list
-  { { $slot "peeks" } " all stack locations that the block reads before writing" }
-  { { $slot "replaces" } " all stack locations that the block writes" }
-  { { $slot "kills" } " all stack locations which become unavailable after the block ends because of the stack height being decremented. For example, if the block contains " { $link drop } ", then D: 0 will be contained in kills because that stack location will not be live anymore." }
+{ $slots
+  { "peeks" { " all stack locations that the block reads before writing" } }
+  { "replaces" { " all stack locations that the block writes" } }
+  { "kills" { " all stack locations which become unavailable after the block ends because of the stack height being decremented. For example, if the block contains " { $link drop } ", then D: 0 will be contained in kills because that stack location will not be live anymore." } }
 }
 "This is done while constructing the CFG. These sets are then used by the " { $link end-stack-analysis } " word to emit optimal sequences of " { $link ##peek } " and " { $link ##replace } " instructions to the cfg."
 $nl
index d44604cc290fdc0d1aed87ed2e13e88a3a428f39..06e61477b48e4dbbe9edba7416110236a57b4592 100644 (file)
@@ -28,17 +28,17 @@ HELP: value-info
 { $description "Gets the value info for the given SSA value. If none is found then a null empty interval is returned." } ;
 
 HELP: value-info<=
-{ $values { "info1" value-info } { "info2" value-info } { "?" boolean } }
+{ $values { "info1" value-info-state } { "info2" value-info-state } { "?" boolean } }
 { $description "Checks if the first value info is equal to, or smaller than the second one." } ;
 
 HELP: value-info-state
 { $class-description "Represents constraints the compiler knows about the input and output variables to an SSA tree node. It has the following slots:"
-  { $table
-    { { $slot "class" } { "Class of values the variable can take." } }
-    { { $slot "interval" } { "Range of values the variable can take." } }
-    { { $slot "literal" } { "Literal value, if present." } }
-    { { $slot "literal?" } { "Whether the value of the variable is known at compile-time or not." } }
-    { { $slot "slots" } { "If the value is a literal tuple or fixed length type, then slots is a " { $link sequence } " of " { $link value-info-state } " encoding what is known about its slots at compile-time." } }
+  { $slots
+    { "class" { "Class of values the variable can take." } }
+    { "interval" { "Range of values the variable can take." } }
+    { "literal" { "Literal value, if present." } }
+    { "literal?" { "Whether the value of the variable is known at compile-time or not." } }
+    { "slots" { "If the value is a literal tuple or fixed length type, then slots is a " { $link sequence } " of " { $link value-info-state } " encoding what is known about its slots at compile-time." } }
   }
   "Don't mutate value infos you receive, always construct new ones. We don't declare the slots read-only to allow cloning followed by writing, and to simplify constructors."
 } ;
index eaf309010e9fd22eedfd934a5604547757f2daac..bdfdd9c26d84e62e1f27bd272a4cad1f0c54ce44 100644 (file)
@@ -18,13 +18,13 @@ HELP: #alien-callback
 
 HELP: #call
 { $class-description "SSA tree node that calls a word. It has the following slots:"
-  { $table
-    { { $slot "word" } { "The " { $link word } " to call." } }
-    { { $slot "in-d" } { "Sequence of input variables to the call. The items are ordered from top to bottom of the stack." } }
-    { { $slot "out-d" } { "Output values of the call." } }
-    { { $slot "method" } { "If the called word is generic and inlined here, then 'method' contains the inlined " { $link quotation } "." } }
-    { { $slot "body" } { "If the called word is generic and inlined, then 'body' is a sequence of SSA nodes built from the inlined method." } }
-    { { $slot "info" } { "If the called word is generic and inlined, then the info slot contains an assoc of value infos for the body of the inlined generic. It is set during the propagation pass of the optimizer." } }
+  { $slots
+    { "word" { "The " { $link word } " to call." } }
+    { "in-d" { "Sequence of input variables to the call. The items are ordered from top to bottom of the stack." } }
+    { "out-d" { "Output values of the call." } }
+    { "method" { "If the called word is generic and inlined here, then 'method' contains the inlined " { $link quotation } "." } }
+    { "body" { "If the called word is generic and inlined, then 'body' is a sequence of SSA nodes built from the inlined method." } }
+    { "info" { "If the called word is generic and inlined, then the info slot contains an assoc of value infos for the body of the inlined generic. It is set during the propagation pass of the optimizer." } }
   }
 } ;
 
@@ -34,8 +34,8 @@ HELP: #call-recursive
 
 HELP: #declare
 { $class-description "SSA tree node emitted when " { $link declare } " declarations are encountered. It has the following slots:"
-  { $table
-    { { $slot "declaration" } { { $link assoc } " that maps values to the types they are declared as." } }
+  { $slots
+    { "declaration" { { $link assoc } " that maps values to the types they are declared as." } }
   }
 } ;
 
@@ -45,8 +45,8 @@ HELP: #enter-recursive
 
 HELP: #if
 { $class-description "SSA tree node that implements conditional branching. It has the following slots:"
-  { $table
-    { { $slot "children" }
+  { $slots
+    { "children"
       { "A two item " { $link sequence } ". The first item holds the instructions executed if the condition is true and the second those that are executed if it is not true." }
     }
   }
@@ -54,8 +54,8 @@ HELP: #if
 
 HELP: #introduce
 { $class-description "SSA tree node that puts an input value from the \"outside\" on the stack. It is used to \"introduce\" data stack parameter whenever they are needed. It has the following slots:"
-  { $table
-    { { $slot "out-d" } { "Array of values of the parameters being introduced." } }
+  { $slots
+    { "out-d" { "Array of values of the parameters being introduced." } }
   }
 } ;
 
@@ -64,25 +64,25 @@ HELP: #phi
 
 HELP: #push
 { $class-description "SSA tree node that puts a literal value on the stack. It has the following slots:"
-  { $table
-    { { $slot "out-d" } { "A one item array containing the " { $link <value> } " of the literal being pushed." } }
+  { $slots
+    { "out-d" { "A one item array containing the " { $link <value> } " of the literal being pushed." } }
   }
 }
 { $notes "A " { $link quotation } " is also a literal." } ;
 
 HELP: #recursive
 { $class-description "Instruction which encodes a loop. It has the following slots:"
-  { $table
-    { { $slot "child" } { "A sequence of nodes representing the body of the loop." } }
-    { { $slot "loop?" } { "If " { $link t } ", the recursion is implemented using a jump, otherwise as a call back to the word." } }
+  { $slots
+    { "child" { "A sequence of nodes representing the body of the loop." } }
+    { "loop?" { "If " { $link t } ", the recursion is implemented using a jump, otherwise as a call back to the word." } }
   }
 }
 { $see-also inline-recursive-word } ;
 
 HELP: #shuffle
 { $class-description "SSA tree node that represents a stack shuffling operation such as " { $link swap } ". It has the following slots:"
-  { $table
-    { { $slot "mapping" } { "An " { $link assoc } " that shows how the shuffle output values (the keys) correspond to their inputs (the values)." } }
+  { $slots
+    { "mapping" { "An " { $link assoc } " that shows how the shuffle output values (the keys) correspond to their inputs (the values)." } }
   }
 } ;
 
index 04e55a098c225b2b05b3454c8a3a0c70d5d2160b..78750dda0a82b84ccedaa67516a47274e4dc81f1 100644 (file)
@@ -3,9 +3,9 @@ IN: cpu.x86.assembler.operands
 
 HELP: indirect
 { $class-description "Tuple that represents an indirect addressing operand. It has the following slots:"
-  { $table
-    { { $slot "index" } { "Register for the index value. It must not be " { $link ESP } " or " { $link RSP } "." } }
-    { { $slot "displacement" } { "An integer offset." } }
+  { $slots
+    { "index" { "Register for the index value. It must not be " { $link ESP } " or " { $link RSP } "." } }
+    { "displacement" { "An integer offset." } }
   }
 } ;
 
index af5cac082ac2b45e26738008835d65e09131d73f..458b50cf099e5966d7c527f69cbfedc32ec1e247 100644 (file)
@@ -92,15 +92,15 @@ $nl
 
 ARTICLE: "furnace.actions.config" "Furnace action configuration"
 "Actions have the following slots:"
-{ $table
-  { { $slot "rest" } { "A parameter name to map the rest of the URL, after the action name, to. If this is not set, then navigating to a URL where the action is not the last path component will return to the client with an error. A more general facility can be found in the " { $vocab-link "http.server.rewrite" } " vocabulary." } }
-    { { $slot "init" } { "A quotation called at the beginning of a GET or HEAD request. Typically this quotation configures " { $link "html.forms" } " and parses query parameters." } }
-    { { $slot "authorize" } { "A quotation called at the beginning of a GET, HEAD or POST request. In GET requests, it is called after the " { $slot "init" } " quotation; in POST requests, it is called after the " { $slot "validate" } " quotation. By convention, this quotation performs custom authorization checks which depend on query parameters or POST parameters." } }
-    { { $slot "display" } { "A quotation called after the " { $slot "init" } " quotation in a GET request. This quotation must return an HTTP " { $link response } "." } }
-    { { $slot "validate" } { "A quotation called at the beginning of a POST request to validate POST parameters." } }
-    { { $slot "submit" } { "A quotation called after the " { $slot "validate" } " quotation in a POST request. This quotation must return an HTTP " { $link response } "." } }
-    { { $slot "replace" } { "A quotation called after the " { $slot "validate" } " quotation in a PUT request. This quotation must return an HTTP " { $link response } "." } }
-    { { $slot "update" } { "A quotation called after the " { $slot "validate" } " quotation in a PATCH request. This quotation must return an HTTP " { $link response } "." } }
+{ $slots
+    { "rest" { "A parameter name to map the rest of the URL, after the action name, to. If this is not set, then navigating to a URL where the action is not the last path component will return to the client with an error. A more general facility can be found in the " { $vocab-link "http.server.rewrite" } " vocabulary." } }
+    { "init" { "A quotation called at the beginning of a GET or HEAD request. Typically this quotation configures " { $link "html.forms" } " and parses query parameters." } }
+    { "authorize" { "A quotation called at the beginning of a GET, HEAD or POST request. In GET requests, it is called after the " { $slot "init" } " quotation; in POST requests, it is called after the " { $slot "validate" } " quotation. By convention, this quotation performs custom authorization checks which depend on query parameters or POST parameters." } }
+    { "display" { "A quotation called after the " { $slot "init" } " quotation in a GET request. This quotation must return an HTTP " { $link response } "." } }
+    { "validate" { "A quotation called at the beginning of a POST request to validate POST parameters." } }
+    { "submit" { "A quotation called after the " { $slot "validate" } " quotation in a POST request. This quotation must return an HTTP " { $link response } "." } }
+    { "replace" { "A quotation called after the " { $slot "validate" } " quotation in a PUT request. This quotation must return an HTTP " { $link response } "." } }
+    { "update" { "A quotation called after the " { $slot "validate" } " quotation in a PATCH request. This quotation must return an HTTP " { $link response } "." } }
 }
 "At least one of the " { $slot "display" } " and " { $slot "submit" } " slots must be set, otherwise the action will be useless." ;
 
index c6dbf6e419f491d4354315c086b4c7c22780c3f8..efceccc588029a988705d8c3a8a09d8eb0a9de77 100644 (file)
@@ -97,18 +97,18 @@ ARTICLE: "furnace.auth.protected" "Protected resources"
     <protected>
 }
 "Protected responders have the following two slots which may be set:"
-{ $table
-    { { $slot "description" } "A string identifying the protected resource for user interface purposes" }
-    { { $slot "capabilities" } { "A sequence of capabilities; see " { $link "furnace.auth.capabilities" } } }
+{ $slots
+    { "description" "A string identifying the protected resource for user interface purposes" }
+    { "capabilities" { "A sequence of capabilities; see " { $link "furnace.auth.capabilities" } } }
 } ;
 
 ARTICLE: "furnace.auth.realm-config" "Authentication realm configuration"
 "Instances of subclasses of " { $link realm } " have the following slots which may be set:"
-{ $table
-    { { $slot "name" } "A string identifying the realm for user interface purposes" }
-    { { $slot "users" } { "An authentication provider (see " { $link "furnace.auth.providers" } "). By default, the " { $link users-in-db } " provider is used." } }
-    { { $slot "checksum" } { "An implementation of the checksum protocol used for verifying passwords (see " { $link "checksums" } "). The " { $link sha-256 } " checksum is used by default." } }
-    { { $slot "secure" } { "A boolean, that when set to a true value, forces the client to access the authentication realm via HTTPS. An attempt to access the realm via HTTP results in a redirect to the corresponding HTTPS URL. On by default." } }
+{ $slots
+    { "name" "A string identifying the realm for user interface purposes" }
+    { "users" { "An authentication provider (see " { $link "furnace.auth.providers" } "). By default, the " { $link users-in-db } " provider is used." } }
+    { "checksum" { "An implementation of the checksum protocol used for verifying passwords (see " { $link "checksums" } "). The " { $link sha-256 } " checksum is used by default." } }
+    { "secure" { "A boolean, that when set to a true value, forces the client to access the authentication realm via HTTPS. An attempt to access the realm via HTTP results in a redirect to the corresponding HTTPS URL. On by default." } }
 } ;
 
 ARTICLE: "furnace.auth.providers" "Authentication providers"
index 7481b7ac937e83be9af4ca372327ac9cebcada44..35d4ca7ec38a6b209b263a8b47616995a93fd474 100644 (file)
@@ -4,20 +4,20 @@ IN: furnace.auth.providers.couchdb
 HELP: couchdb-auth-provider
 {
     $class-description "Implements the furnace authentication protocol for CouchDB."
-    { $table
-      { { $slot "base-url" } { "The base URL for the CouchDB database, e.g. http://foo.org:5984/mydatabase" } }
-      { { $slot "username-view" } { "A URL for a view which emits usernames as keys and user documents as values, "
+    { $slots
+      { "base-url" { "The base URL for the CouchDB database, e.g. http://foo.org:5984/mydatabase" } }
+      { "username-view" { "A URL for a view which emits usernames as keys and user documents as values, "
                                     "i.e. something like emit(doc.username, doc). The URL should be relative"
                                     " to base-url (e.g. \"_design/my_views/_view/by_username\")."
                                     " The view is not defined automatically by the library." } }
-      { { $slot "prefix" } { "In order to ensure the uniqueness of user IDs and email addresses,"
+      { "prefix" { "In order to ensure the uniqueness of user IDs and email addresses,"
                              " the library creates documents in the database with ids corresponding to these values. "
                              "These ids "
                              "are prefixed by the string given as the value for this slot. Ideally, you should guarantee that no other "
                              "documents in the database can have ids with this prefix. However, "
                              "the worst that can happen is for someone to falsely be told that a username "
                              "is taken when it is in fact free." } }
-      { { $slot "field-map" } { "An assoc taking " { $link user } " slot names to CouchDB document "
+      { "field-map" { "An assoc taking " { $link user } " slot names to CouchDB document "
                                 "field names. It is not usually necessary to set this slot - it is useful only if "
                                 "you do not wish to use the default field names." } }
   }
index 44cc9c44b47114d8a3750fc3f5aa1ccd6f31a269..bd79347320664f81dcafd8320fad72836ffb17ab 100644 (file)
@@ -3,17 +3,17 @@ IN: furnace.auth.providers
 
 HELP: user
 { $class-description "The class of users. Instances have the following slots:"
-{ $table
-    { { $slot "username" } { "The username, used to identify the user for login purposes" } }
-    { { $slot "realname" } { "The user's real name, optional" } }
-    { { $slot "password" } { "The user's password, encoded with a checksum" } }
-    { { $slot "salt" } { "A random salt prepended to the password to ensure that two users with the same plain-text password still have different checksum output" } }
-    { { $slot "email" } { "The user's e-mail address, optional" } }
-    { { $slot "ticket" } { "Used for password recovery" } }
-    { { $slot "capabilities" } { "A sequence of capabilities; see " { $link "furnace.auth.capabilities" } } }
-    { { $slot "profile" } { "A hashtable with webapp-specific configuration" } }
-    { { $slot "deleted" } { "A boolean indicating whether the user is active or not. This allows a user account to be deactivated without removing the user from the database" } }
-    { { $slot "changed?" } { "A boolean indicating whether the user has changed since being retrieved from the database" } }
+{ $slots
+    { "username" { "The username, used to identify the user for login purposes" } }
+    { "realname" { "The user's real name, optional" } }
+    { "password" { "The user's password, encoded with a checksum" } }
+    { "salt" { "A random salt prepended to the password to ensure that two users with the same plain-text password still have different checksum output" } }
+    { "email" { "The user's e-mail address, optional" } }
+    { "ticket" { "Used for password recovery" } }
+    { "capabilities" { "A sequence of capabilities; see " { $link "furnace.auth.capabilities" } } }
+    { "profile" { "A hashtable with webapp-specific configuration" } }
+    { "deleted" { "A boolean indicating whether the user is active or not. This allows a user account to be deactivated without removing the user from the database" } }
+    { "changed?" { "A boolean indicating whether the user has changed since being retrieved from the database" } }
 } } ;
 
 HELP: add-user
index e272f36fa1d7f3aa61443fe080b933d1fc383c27..5ed300e96bbc12021193fe910bc512acf236cc73 100644 (file)
@@ -24,9 +24,9 @@ HELP: sset
 
 ARTICLE: "furnace.sessions.config" "Session manager configuration"
 "The " { $link sessions } " tuple has two slots which contain configuration parameters:"
-{ $table
-    { { $slot "verify?" } { "If set to a true value, the client IP address and user agent of each session is tracked, and checked every time a client attempts to re-establish a session. While this does not offer any real security, it can thwart unskilled packet-sniffing attacks. On by default." } }
-    { { $slot "timeout" } { "A " { $link duration } " storing the maximum time that inactive sessions will be stored on the server. The default timeout is 20 minutes. Note that for sessions to actually expire, you must start a thread to do so; see the " { $vocab-link "furnace.alloy" } " vocabulary for an easy way of doing this." } }
+{ $slots
+    { "verify?" { "If set to a true value, the client IP address and user agent of each session is tracked, and checked every time a client attempts to re-establish a session. While this does not offer any real security, it can thwart unskilled packet-sniffing attacks. On by default." } }
+    { "timeout" { "A " { $link duration } " storing the maximum time that inactive sessions will be stored on the server. The default timeout is 20 minutes. Note that for sessions to actually expire, you must start a thread to do so; see the " { $vocab-link "furnace.alloy" } " vocabulary for an easy way of doing this." } }
 } ;
 
 ARTICLE: "furnace.sessions.serialize" "Session state serialization"
index 3ee435d947892e0be94a5cda4cec7c1313617b9e..a587e8d68b4b263454aca066b9ba72392e7b47d5 100644 (file)
@@ -49,10 +49,10 @@ HELP: feed-entry-url
 
 ARTICLE: "furnace.syndication.config" "Configuring Atom feed actions"
 "Instances of " { $link feed-action } " have three slots which need to be set:"
-{ $table
-    { { $slot "title" } "The title of the feed as a string" }
-    { { $slot "url" } { "The feed " { $link url } } }
-    { { $slot "entries" } { "A quotation with stack effect " { $snippet "( -- seq )" } ", which produces a sequence of objects responding to the " { $link "furnace.syndication.protocol" } " protocol" } }
+{ $slots
+    { "title" "The title of the feed as a string" }
+    { "url" { "The feed " { $link url } } }
+    { "entries" { "A quotation with stack effect " { $snippet "( -- seq )" } ", which produces a sequence of objects responding to the " { $link "furnace.syndication.protocol" } " protocol" } }
 } ;
 
 ARTICLE: "furnace.syndication.protocol" "Atom feed entry protocol"
index 821710a02ad06513b96fc76dd7c2af98a00cd1c6..590398cb2d08074c258f19ed845c5ed528d08a1a 100644 (file)
@@ -65,9 +65,6 @@ M: f print-element drop ;
 : $snippet ( children -- )
     [ snippet-style get print-element* ] ($span) ;
 
-! for help-lint
-ALIAS: $slot $snippet
-
 : $emphasis ( children -- )
     [ emphasis-style get print-element* ] ($span) ;
 
@@ -336,6 +333,12 @@ PRIVATE>
         ] each
     ] ($grid) ;
 
+! for help-lint
+ALIAS: $slot $snippet
+
+: $slots ( children -- )
+    [ unclip \ $slot swap 2array prefix ] map $table ;
+
 : a/an ( str -- str )
     [ first ] [ length ] bi 1 =
     "afhilmnorsx" "aeiou" ? member? "an" "a" ? ;
index 00709fa742bb325209f86fd77081dc2135ebdae5..0e2efc5fb818d386e9fc279d00803306dcddde97 100644 (file)
@@ -10,15 +10,15 @@ HELP: request
 { $description "An HTTP request."
 $nl
 "Instances contain the following slots:"
-{ $table
-    { { $slot "method" } { "The HTTP method as a " { $link string } ". The most frequently-used HTTP methods are " { $snippet "GET" } ", " { $snippet "HEAD" } " and " { $snippet "POST" } "." } }
-    { { $slot "url" } { "The " { $link url } " being requested" } }
-    { { $slot "proxy-url" } { "The proxy " { $link url } " to use, or " { $link f } " for no proxy. If not " { $link f } ", the url will additionally be " { $link derive-url } "'d from the " { $link "http.proxy-variables" } ". The proxy is used if the result has at least the " { $slot "host" } " slot set." } }
-    { { $slot "version" } { "The HTTP version. Default is " { $snippet "1.1" } " and should not be changed without good reason." } }
-    { { $slot "header" } { "An assoc of HTTP header values. See " { $link "http.headers" } } }
-    { { $slot "post-data" } { "See " { $link "http.post-data" } } }
-    { { $slot "cookies" } { "A sequence of HTTP cookies. See " { $link "http.cookies" } } }
-    { { $slot "redirects" } { "Number of redirects to attempt before throwing an error. Default is " { $snippet "max-redirects" } "." } }
+{ $slots
+    { "method" { "The HTTP method as a " { $link string } ". The most frequently-used HTTP methods are " { $snippet "GET" } ", " { $snippet "HEAD" } " and " { $snippet "POST" } "." } }
+    { "url" { "The " { $link url } " being requested" } }
+    { "proxy-url" { "The proxy " { $link url } " to use, or " { $link f } " for no proxy. If not " { $link f } ", the url will additionally be " { $link derive-url } "'d from the " { $link "http.proxy-variables" } ". The proxy is used if the result has at least the " { $slot "host" } " slot set." } }
+    { "version" { "The HTTP version. Default is " { $snippet "1.1" } " and should not be changed without good reason." } }
+    { "header" { "An assoc of HTTP header values. See " { $link "http.headers" } } }
+    { "post-data" { "See " { $link "http.post-data" } } }
+    { "cookies" { "A sequence of HTTP cookies. See " { $link "http.cookies" } } }
+    { "redirects" { "Number of redirects to attempt before throwing an error. Default is " { $snippet "max-redirects" } "." } }
 } } ;
 
 HELP: <response>
@@ -29,16 +29,16 @@ HELP: response
 { $class-description "An HTTP response."
 $nl
 "Instances contain the following slots:"
-{ $table
-    { { $slot "version" } { "The HTTP version. Default is " { $snippet "1.1" } " and should not be changed without good reason." } }
-    { { $slot "code" } { "HTTP status code, an " { $link integer } ". Examples are 200 for success, 404 for file not found, and so on." } }
-    { { $slot "message" } { "HTTP status message, only displayed to the user. If the status code is 200, the status message might be “Success”, for example." } }
-    { { $slot "header" } { "An assoc of HTTP header values. See " { $link "http.headers" } } }
-    { { $slot "cookies" } { "A sequence of HTTP cookies. See " { $link "http.cookies" } } }
-    { { $slot "content-type" } { "an HTTP content type" } }
-    { { $slot "content-charset" } { "an encoding name" } }
-    { { $slot "content-encoding" } { "an encoding descriptor. See " { $link "io.encodings" } } }
-    { { $slot "body" } { "an HTTP response body" } }
+{ $slots
+    { "version" { "The HTTP version. Default is " { $snippet "1.1" } " and should not be changed without good reason." } }
+    { "code" { "HTTP status code, an " { $link integer } ". Examples are 200 for success, 404 for file not found, and so on." } }
+    { "message" { "HTTP status message, only displayed to the user. If the status code is 200, the status message might be “Success”, for example." } }
+    { "header" { "An assoc of HTTP header values. See " { $link "http.headers" } } }
+    { "cookies" { "A sequence of HTTP cookies. See " { $link "http.cookies" } } }
+    { "content-type" { "an HTTP content type" } }
+    { "content-charset" { "an encoding name" } }
+    { "content-encoding" { "an encoding descriptor. See " { $link "io.encodings" } } }
+    { "body" { "an HTTP response body" } }
 } } ;
 
 HELP: <raw-response>
@@ -49,11 +49,11 @@ HELP: raw-response
 { $class-description "A minimal HTTP response used by webapps which need full control over all output sent to the client. Most webapps can use " { $link response } " instead."
 $nl
 "Instances contain the following slots:"
-{ $table
-    { { $slot "version" } { "The HTTP version. Default is " { $snippet "1.1" } " and should not be changed without good reason." } }
-    { { $slot "code" } { "HTTP status code, an " { $link integer } ". Examples are 200 for success, 404 for file not found, and so on." } }
-    { { $slot "message" } { "HTTP status message, only displayed to the user. If the status code is 200, the status message might be “Success”, for example." } }
-    { { $slot "body" } { "an HTTP response body" } }
+{ $slots
+    { "version" { "The HTTP version. Default is " { $snippet "1.1" } " and should not be changed without good reason." } }
+    { "code" { "HTTP status code, an " { $link integer } ". Examples are 200 for success, 404 for file not found, and so on." } }
+    { "message" { "HTTP status message, only displayed to the user. If the status code is 200, the status message might be “Success”, for example." } }
+    { "body" { "an HTTP response body" } }
 } } ;
 
 HELP: <cookie>
@@ -65,16 +65,16 @@ HELP: cookie
 "An HTTP cookie."
 $nl
 "Instances contain a number of slots which correspond exactly to the fields of a cookie in the cookie specification:"
-{ $table
-    { { $slot "name" } { "The cookie name, a " { $link string } } }
-    { { $slot "value" } { "The cookie value, an object supported by " { $link present } } }
-    { { $slot "comment" } { "A " { $link string } } }
-    { { $slot "path" } { "The pathname prefix where the cookie is valid, a " { $link string } } }
-    { { $slot "domain" } { "The domain name where the cookie is valid, a " { $link string } } }
-    { { $slot "expires" } { "The expiry time, a " { $link timestamp } " or " { $link f } " for a session cookie" } }
-    { { $slot "max-age" } { "The expiry duration, a " { $link duration } " or " { $link f } " for a session cookie" } }
-    { { $slot "http-only" } { "If set to a true value, JavaScript code cannot see the cookie" } }
-    { { $slot "secure" } { "If set to a true value, the cookie is only sent for " { $snippet "https" } " protocol connections" } }
+{ $slots
+    { "name" { "The cookie name, a " { $link string } } }
+    { "value" { "The cookie value, an object supported by " { $link present } } }
+    { "comment" { "A " { $link string } } }
+    { "path" { "The pathname prefix where the cookie is valid, a " { $link string } } }
+    { "domain" { "The domain name where the cookie is valid, a " { $link string } } }
+    { "expires" { "The expiry time, a " { $link timestamp } " or " { $link f } " for a session cookie" } }
+    { "max-age" { "The expiry duration, a " { $link duration } " or " { $link f } " for a session cookie" } }
+    { "http-only" { "If set to a true value, JavaScript code cannot see the cookie" } }
+    { "secure" { "If set to a true value, the cookie is only sent for " { $snippet "https" } " protocol connections" } }
 }
 "Only one of " { $snippet "expires" } " and " { $snippet "max-age" } " can be set; the latter is preferred and is supported by all modern browsers." } ;
 
@@ -104,11 +104,11 @@ HELP: post-data
 { $class-description "HTTP POST data passed in a POST request."
 $nl
 "Instances contain the following slots:"
-{ $table
-    { { $slot "data" } { "The POST data. This can be in a higher-level form, such as an assoc of POST parameters, a string, or an XML document" } }
-    { { $slot "params" } { "Parameters passed in the POST request." } }
-    { { $slot "content-type" } { "A MIME type" } }
-    { { $slot "content-encoding" } { "Encoding used for the POST data" } }
+{ $slots
+    { "data" { "The POST data. This can be in a higher-level form, such as an assoc of POST parameters, a string, or an XML document" } }
+    { "params" { "Parameters passed in the POST request." } }
+    { "content-type" { "A MIME type" } }
+    { "content-encoding" { "Encoding used for the POST data" } }
 } } ;
 
 HELP: set-header
index 501d90848af0f8ef441df31f7cf1c85f8a35c589..a5bdc9aa3852c335eb94bd51f86e8587b9662d16 100644 (file)
@@ -3,10 +3,10 @@ USING: help.syntax help.markup http.server ;
 
 HELP: rewrite
 { $class-description "The class of directory rewrite responders. The slots are as follows:"
-{ $list
-  { { $slot "default" } " - the responder to call if no file name is provided." }
-  { { $slot "child" } " - the responder to call if a file name is provided." }
-  { { $slot "param" } " - the name of a request parameter which will store the first path component of the file name passed to the responder." }
+{ $slots
+  { "default" "the responder to call if no file name is provided." }
+  { "child" "the responder to call if a file name is provided." }
+  { "param" "the name of a request parameter which will store the first path component of the file name passed to the responder." }
 } } ;
 
 HELP: <rewrite>
@@ -23,11 +23,11 @@ HELP: <rewrite>
 
 HELP: vhost-rewrite
 { $class-description "The class of virtual host rewrite responders. The slots are as follows:"
-{ $list
-  { { $slot "default" } " - the responder to call if no host name prefix is provided." }
-  { { $slot "child" } " - the responder to call if a host name prefix is provided." }
-  { { $slot "param" } " - the name of a request parameter which will store the first host name component of the host name passed to the responder." }
-  { { $slot "suffix" } " - the domain name suffix which will be chopped off the end of the request's host name in order to produce the parameter." }
+{ $slots
+  { "default" "the responder to call if no host name prefix is provided." }
+  { "child" " the responder to call if a host name prefix is provided." }
+  { "param" "the name of a request parameter which will store the first host name component of the host name passed to the responder." }
+  { "suffix" "the domain name suffix which will be chopped off the end of the request's host name in order to produce the parameter." }
 } } ;
 
 HELP: <vhost-rewrite>
index 46b4b4174e414c2a06f4656a209b3a5bab1ed2db..f2f4e01431c09a072d4cf185d9b4dec6c16c27d2 100644 (file)
@@ -43,11 +43,11 @@ ABOUT: "buffers"
 
 HELP: buffer
 { $class-description "The class of I/O buffers, which resemble FIFO queues, but are optimized for holding bytes, are have underlying storage allocated at a fixed address. Buffers must be de-allocated manually. It has the following slots:"
-    { $table
-        { { $slot "size" } "The total size, in bytes, of the buffer" }
-        { { $slot "ptr" } { "The " { $link c-ptr } " memory where data is stored" } }
-        { { $slot "fill" } "The fill pointer, a write index where new data is added" }
-        { { $slot "pos" } "The position, a read index where data is consumed" }
+    { $slots
+        { "size" "The total size, in bytes, of the buffer" }
+        { "ptr" { "The " { $link c-ptr } " memory where data is stored" } }
+        { "fill" "The fill pointer, a write index where new data is added" }
+        { "pos" "The position, a read index where data is consumed" }
     }
 } ;
 
index 50d7c2a48373c21b1ea0f223f90a8144655c2bce..d60b4bd6c93ea739aa21bea39d7370b793e3d65d 100644 (file)
@@ -3,9 +3,9 @@ IN: math.rectangles
 
 HELP: rect
 { $class-description "A rectangle with the following slots:"
-    { $list
-        { { $slot "loc" } " - the top-left corner of the rectangle as an x/y pair" }
-        { { $slot "dim" } " - the dimensions of the rectangle as a width/height pair" }
+    { $slots
+        { "loc" "the top-left corner of the rectangle as an x/y pair" }
+        { "dim" "the dimensions of the rectangle as a width/height pair" }
     }
     "Rectangles are constructed by calling " { $link <rect> } " and " { $link <extent-rect> } "."
 } ;
index 614e407e37d02e501a94ceef996b1c6efc4e0271..e565045780c15a73a243d5a72c234f900b6b3fa2 100644 (file)
@@ -4,12 +4,12 @@ IN: models
 
 HELP: model
 { $class-description "A mutable cell holding a single value. When the value is changed, a sequence of connected objects are notified. Models have the following slots:"
-    { $list
-        { { $slot "value" } " - the value of the model. Use " { $link set-model } " to change the value." }
-        { { $slot "connections" } " - a sequence of objects implementing the " { $link model-changed } " generic word, to be notified when the model's value changes." }
-        { { $slot "dependencies" } " - a sequence of models which should have this model added to their sequence of connections when activated." }
-        { { $slot "ref" } " - a reference count tracking the number of models which depend on this one." }
-        { { $slot "locked?" } " - a slot set by " { $link with-locked-model } " to ensure that the model doesn't get changed recursively" }
+    { $slots
+        { "value" "the value of the model. Use " { $link set-model } " to change the value." }
+        { "connections" "a sequence of objects implementing the " { $link model-changed } " generic word, to be notified when the model's value changes." }
+        { "dependencies" "a sequence of models which should have this model added to their sequence of connections when activated." }
+        { "ref" "a reference count tracking the number of models which depend on this one." }
+        { "locked?" "a slot set by " { $link with-locked-model } " to ensure that the model doesn't get changed recursively" }
     }
 "Other classes may inherit from " { $link model } "."
 } ;
index c3cf0e5990fa3cf042e381b87f679ab6f77f688c..08f76688e47c901e444ffab69422d4ffaf7311ca 100644 (file)
@@ -6,12 +6,12 @@ IN: smtp
 
 HELP: smtp-config
 { $class-description "An SMTP configuration object, with the following slots:"
-    { $table
-        { { $slot "domain" } { "Name of the machine sending the email, or " { $link host-name } " if empty." } }
-        { { $slot "server" } { "An " { $link <inet> } " of the SMTP server." } }
-        { { $slot "tls?" } { "Secure socket after connecting to server, server must support " { $snippet "STARTTLS" } } }
-        { { $slot "read-timeout" } { "Length of time after which we give up waiting for a response." } }
-        { { $slot "auth" } { "Either " { $link no-auth } " or an instance of " { $link plain-auth } " or " { $link login-auth } } }
+    { $slots
+        { "domain" { "Name of the machine sending the email, or " { $link host-name } " if empty." } }
+        { "server" { "An " { $link <inet> } " of the SMTP server." } }
+        { "tls?" { "Secure socket after connecting to server, server must support " { $snippet "STARTTLS" } } }
+        { "read-timeout" { "Length of time after which we give up waiting for a response." } }
+        { "auth" { "Either " { $link no-auth } " or an instance of " { $link plain-auth } " or " { $link login-auth } } }
     }
 } ;
 
@@ -53,15 +53,15 @@ HELP: with-smtp-connection
 
 HELP: email
 { $class-description "An e-mail. E-mails have the following slots:"
-    { $table
-        { { $slot "from" } "The sender of the e-mail. An e-mail address." }
-        { { $slot "to" } "The recipients of the e-mail. A sequence of e-mail addresses." }
-        { { $slot "cc" } "Carbon-copy. A sequence of e-mail addresses." }
-        { { $slot "bcc" } "Blind carbon-copy. A sequence of e-mail addresses." }
-        { { $slot "subject" } "The subject of the e-mail. A string." }
-        { { $slot "content-type" } { "The MIME type of the body. A string, default is " { $snippet "text/plain" } "." } }
-        { { $slot "encoding" } { "An encoding to send the body as. Default is " { $link utf8 } "." } }
-        { { $slot "body" } " The body of the e-mail. A string." }
+    { $slots
+        { "from" "The sender of the e-mail. An e-mail address." }
+        { "to" "The recipients of the e-mail. A sequence of e-mail addresses." }
+        { "cc" "Carbon-copy. A sequence of e-mail addresses." }
+        { "bcc" "Blind carbon-copy. A sequence of e-mail addresses." }
+        { "subject" "The subject of the e-mail. A string." }
+        { "content-type" { "The MIME type of the body. A string, default is " { $snippet "text/plain" } "." } }
+        { "encoding" { "An encoding to send the body as. Default is " { $link utf8 } "." } }
+        { "body" " The body of the e-mail. A string." }
     }
 "The " { $slot "from" } " and " { $slot "to" } " slots are required; the rest are optional."
 $nl
index 3665d8c7937ca6c657bb99480bdc7dec96b676f0..4c5e01f2a19ab89a12ad36bc1d66ee5bacb6cf8d 100644 (file)
@@ -4,10 +4,10 @@ IN: stack-checker.alien
 
 HELP: alien-node-params
 { $class-description "Base class for the parameter slot of " { $link #alien-node } " nodes. It has the following slots:"
-  { $table
-    { { $slot "return" } { "a " { $link c-type-name } " which indicates the type of the functions return value." } }
-    { { $slot "parameters" } { "a " { $link sequence } " of " { $link c-type-name } " giving the types of the functions parameters." } }
-    { { $slot "abi" } { "calling convention of the function the node parameters operates on." } }
+  { $slots
+    { "return" { "a " { $link c-type-name } " which indicates the type of the functions return value." } }
+    { "parameters" { "a " { $link sequence } " of " { $link c-type-name } " giving the types of the functions parameters." } }
+    { "abi" { "calling convention of the function the node parameters operates on." } }
   }
 }
 { $see-also abi } ;
index e32fa5d8fa40b975629ae53df3aba2bebf278832..f343bc2825549151087ccdeedcf558e70c9021b8 100644 (file)
@@ -3,8 +3,8 @@ USING: help.markup help.syntax ui.baseline-alignment ui.gadgets ;
 
 HELP: aligned-gadget
 { $class-description "A " { $link gadget } " that adds the following slots:"
-    { $list
-        { { $slot "baseline" } " - a cached value for " { $link baseline } "; do not read or write this slot directly." }
-        { { $slot "cap-height" } " - a cached value for " { $link cap-height } "; do not read or write this slot directly." }
+    { $slots
+        { "baseline" "a cached value for " { $link baseline } "; do not read or write this slot directly." }
+        { "cap-height" "a cached value for " { $link cap-height } "; do not read or write this slot directly." }
     }
 } ;
index 312ded912447033dde469b52a2808a664fda432a..dea9407a84b38c17b8b5a235f2c3c2cf33d5c7c9 100644 (file)
@@ -6,29 +6,29 @@ HELP: line-gadget
 { $class-description "Base class for gadgets that implements display of sequences of text."
   $nl
   "Line gadgets have the following slots:"
-  { $table
+  { $slots
     {
-        { $slot "font" }
+        "font"
         { "a " { $link font } "." }
     }
     {
-        { $slot "selection-color" }
+        "selection-color"
         { "a " { $link color } "." }
     }
     {
-        { $slot "min-rows" }
+        "min-rows"
         { "The preferred minimum number of visible rows when the gadget is contained in a viewport." }
     }
     {
-        { $slot "max-rows" }
+        "max-rows"
         { "The preferred maximum number of visible rows when the gadget is cotnained in a viewport." }
     }
     {
-        { $slot "min-cols" }
+        "min-cols"
         { "The preferred minimum number of visible columns when the gadget is contained in a viewport." }
     }
     {
-        { $slot "max-cols" }
+        "max-cols"
         { "The preferred maximum number of visible columns when the gadget is contained in a viewport." }
     }
   }
index 7ae4fd52421d5316292e3a70b9195cf8c68544ac..b8a5d5c9d5d290622cd179c4b6f62bd48f9c7043 100644 (file)
@@ -22,10 +22,10 @@ $nl
 
 ARTICLE: "ui.gadgets.tables.selection" "Table row selection"
 "A few slots in the table gadget concern row selection:"
-{ $table
-  { { $slot "selection" } { " - if set to a model, the values of the currently selected row or rows, as determined by a " { $link row-value } " call to the renderer, is stored in this model. See " { $link "models" } "." } }
-  { { $slot "selection-index" } { " - if set to a model, the indices of the currently selected rows." } }
-  { { $slot "selection-required?" } { " - if set to a true value, the table ensures that some row is always selected, if the model is non-empty. If set to " { $link f } ", a state where nothing is selected is permitted to occur. The default is " { $link f } "." } }
+{ $slots
+  { "selection" { " - if set to a model, the values of the currently selected row or rows, as determined by a " { $link row-value } " call to the renderer, is stored in this model. See " { $link "models" } "." } }
+  { "selection-index" { " - if set to a model, the indices of the currently selected rows." } }
+  { "selection-required?" { " - if set to a true value, the table ensures that some row is always selected, if the model is non-empty. If set to " { $link f } ", a state where nothing is selected is permitted to occur. The default is " { $link f } "." } }
 }
 "Some words for row selection:"
 { $subsections
@@ -43,12 +43,12 @@ $nl
 
 ARTICLE: "ui.gadgets.tables.config" "Table gadget configuration"
 "Various slots in the table gadget can be set to change the appearance and behavior of the table gadget."
-{ $table
-  { { $slot "gap" } }
-  { { $slot "focus-border-color" } }
-  { { $slot "mouse-color" } }
-  { { $slot "column-line-color" } }
-  { { $slot "takes-focus?" } }
+{ $slots
+  { "gap" }
+  { "focus-border-color" }
+  { "mouse-color" }
+  { "column-line-color" }
+  { "takes-focus?" }
 } ;
 
 ARTICLE: "ui.gadgets.tables.example" "Table gadget example"
index 19c63a8c575c486c7244037fb7fd7b93faab1e84..cb7113a459490ccd80406bfc98fe2be01d0168d3 100644 (file)
@@ -46,49 +46,49 @@ HELP: focus-path
 
 HELP: world
 { $class-description "A gadget which appears at the top of the gadget hieararchy, and in turn may be displayed in a native window. Worlds have the following slots:"
-  { $table
+  { $slots
     {
-        { $slot "active?" }
+        "active?"
         { "an " { $link integer } " initially set to 0. The active " { $link ui-backend } " increases the value in steps up to 100 while the native window containing the world is being initialized but not yet visible on the screen. The world is only redrawn when the value is 100 which prevents redundant redraws from happening during initialization. The slot is set to 0 if an error is thrown while drawing the world; this prevents multiple debugger windows from being shown." }
     }
     {
-        { $slot "layers" }
+        "layers"
         { "a sequence of glass panes in front of the primary gadget, used to implement behaviors such as popup menus which are hidden when the mouse is clicked outside the menu. See " { $link "ui.gadgets.glass" } "." }
     }
     {
-        { $slot "title" }
+        "title"
         { "a string to be displayed in the title bar of the native window containing the world." }
     }
     {
-        { $slot "status" }
+        "status"
         { "a " { $link model } " holding a string to be displayed in the world's status bar." }
     }
     {
-        { $slot "status-owner" }
+        "status-owner"
         { "the gadget that displayed the most recent status message." }
     }
     {
-        { $slot "focus" }
+        "focus"
         { "the current owner of the keyboard focus in the world." }
     }
     {
-        { $slot "focused?" }
+        "focused?"
         { "a boolean indicating if the native window containing the world has keyboard focus." }
     }
     {
-        { $slot "grab-input?" }
+        "grab-input?"
         { "if set to " { $link t } ", the world will hide the mouse cursor and disable normal mouse input while focused. Use " { $link grab-input } " and " { $link ungrab-input } " to change this setting." }
     }
     {
-        { $slot "handle" }
+        "handle"
         { "a backend-specific native handle representing the native window containing the world, or " { $link f } " if the world is not grafted." }
     }
     {
-        { $slot "window-loc" }
+        "window-loc"
         { "the on-screen location of the native window containing the world. The co-ordinate system here is backend-specific." }
     }
     {
-        { $slot "window-controls" }
+        "window-controls"
         { "the set of " { $link "ui.gadgets.worlds-window-controls" } " with which the world window was created." }
     }
   }
index 737a1a63559a63bf39bc5e00ccfb324803276dbb..2c59df783093bfa023eab9434993c4e52e265e5b 100644 (file)
@@ -12,19 +12,19 @@ HELP: draw-gadget*
 
 HELP: gadget
 { $class-description "An object which displays itself on the screen and acts on user input gestures. Gadgets have the following slots:"
-    { $list
-        { { $slot "pref-dim" } " - a cached value for " { $link pref-dim } "; do not read or write this slot directly." }
-        { { $slot "parent" } " - the gadget containing this one, or " { $link f } " if this gadget is not part of the visible gadget hierarchy." }
-        { { $slot "children" } " - a vector of child gadgets. Do not modify this vector directly, instead use " { $link add-gadget } ", " { $link add-gadgets } ", " { $link unparent } " or " { $link clear-gadget } "." }
-        { { $slot "graft-state" } { " - a pair of " { $link boolean } " values that represent the current graft state of the gadget and what its next state will become." } }
-        { { $slot "orientation" } " - an orientation specifier. This slot is used by layout gadgets." }
-        { { $slot "layout-state" } " - stores the layout state of the gadget. Do not read or write this slot directly, instead call " { $link relayout } " and " { $link relayout-1 } " if the gadget needs to be re-laid out." }
-        { { $slot "visible?" } " - a boolean indicating if the gadget should display and receive user input." }
-        { { $slot "root?" } " - if set to " { $link t } ", layout changes in this gadget will not propagate to the gadget's parent." }
-        { { $slot "clipped?" } " - a boolean indicating if clipping will be enabled when drawing this gadget's children." }
-        { { $slot "interior" } " - an implementation of the " { $link "ui-pen-protocol" } }
-        { { $slot "boundary" } " - an implementation of the " { $link "ui-pen-protocol" } }
-        { { $slot "model" } " - a " { $link model } " or " { $link f } "; see " { $link "ui-control-impl" } }
+    { $slots
+        { "pref-dim" { "a cached value for " { $link pref-dim } "; do not read or write this slot directly." } }
+        { "parent" { "the gadget containing this one, or " { $link f } " if this gadget is not part of the visible gadget hierarchy." } }
+        { "children" { "a vector of child gadgets. Do not modify this vector directly, instead use " { $link add-gadget } ", " { $link add-gadgets } ", " { $link unparent } " or " { $link clear-gadget } "." } }
+        { "graft-state" { "a pair of " { $link boolean } " values that represent the current graft state of the gadget and what its next state will become." } }
+        { "orientation" "an orientation specifier. This slot is used by layout gadgets." }
+        { "layout-state" { "stores the layout state of the gadget. Do not read or write this slot directly, instead call " { $link relayout } " and " { $link relayout-1 } " if the gadget needs to be re-laid out." } }
+        { "visible?" "a boolean indicating if the gadget should display and receive user input." }
+        { "root?" { "if set to " { $link t } ", layout changes in this gadget will not propagate to the gadget's parent." } }
+        { "clipped?" "a boolean indicating if clipping will be enabled when drawing this gadget's children." }
+        { "interior" { "an implementation of the " { $link "ui-pen-protocol" } } }
+        { "boundary" { "an implementation of the " { $link "ui-pen-protocol" } } }
+        {  "model" { "a " { $link model } " or " { $link f } "; see " { $link "ui-control-impl" } } }
     }
 "Gadgets subclass the " { $link rect } " class, and thus all instances have " { $slot "loc" } " and " { $slot "dim" } " instances holding their location and dimensions." }
 { $notes
index 5626e4fa69e0a0709afc291fd31b25b34a8ce805..6983c0490d65abae9eb7ec7d85576bf2aadf2c61 100644 (file)
@@ -10,9 +10,9 @@ HELP: <listener-gadget>
 
 HELP: interactor
 { $class-description "An interactor is an " { $link editor } " intended to be used as the input component of a " { $link "ui-listener" } ". It has the following slots:"
-{ $table
+{ $slots
   {
-      { $slot "waiting" }
+      "waiting"
       { "If waiting is " { $link t } ", the interactor is waiting for user input, and invoking " { $link evaluate-input } " resumes the thread." }
   }
 }
index baa0b476240d47b96b47a8ac43ce3cc4e673dedc..d972446258b3cf8aa664d35eac554ef8692edb5d 100644 (file)
@@ -3,25 +3,25 @@ IN: vm
 
 HELP: zone
 { $class-description "A struct that defines the memory layout for an allocation zone in the virtual machine. Factor code cannot directly access allocation zones, but the struct is used by the compiler to calculate memory addresses. Its slots are:"
-  { $table
-    { { $slot "here" } { "Memory address to the last allocated byte in the zone. Initially, this slot is equal to " { $snippet "start" } " but each allocation in the zone will increment this pointer." } }
-    { { $slot "start" } { "Memory address to the start of the zone." } }
-    { { $slot "end" } { "Memory address to the end of the zone." } }
+  { $slots
+    { "here" { "Memory address to the last allocated byte in the zone. Initially, this slot is equal to " { $snippet "start" } " but each allocation in the zone will increment this pointer." } }
+    { "start" { "Memory address to the start of the zone." } }
+    { "end" { "Memory address to the end of the zone." } }
   }
 } ;
 
 HELP: vm
 { $class-description "A struct that defines the memory layout of the running virtual machine. It is used by the optimizing compiler to calculate field offsets. Its slots are:"
-  { $table
-    { { $slot "nursery" } { "A " { $link zone } " in which all new objects are allocated." } }
+  { $slots
+    { "nursery" { "A " { $link zone } " in which all new objects are allocated." } }
   }
 } ;
 
 HELP: gc-info
 { $class-description "A struct that defines the sizes of the garbage collection maps for a word. It has the following slots:"
-  { $table
-    { { $slot "gc-root-count" } "Number of gc root bits per callsite." }
-    { { $slot "derived-root-count" } "Number of derived roots per callsite." }
-    { { $slot "return-address-count" } "Number of gc callsites." }
+  { $slots
+    { "gc-root-count" "Number of gc root bits per callsite." }
+    { "derived-root-count" "Number of derived roots per callsite." }
+    { "return-address-count" "Number of gc callsites." }
   }
 } ;
index fd4e345750e15aee5097112e30a7e6dba888e8b1..c0a68e60a16324fc1d9df14a302b8b161efd5155 100644 (file)
@@ -12,10 +12,10 @@ ARTICLE: "wrap" "Word wrapping"
 
 HELP: element
 { $class-description "An element to be wrapped. It has the following slots:" }
-{ $table
-    { { $slot "contents" } "The object being wrapped." }
-    { { $slot "black" } "The width of the object (e.g., the text length)." }
-    { { $slot "white" } "The space after the object (e.g., trailing whitespace)." }
+{ $slots
+    { "contents" "The object being wrapped." }
+    { "black" "The width of the object (e.g., the text length)." }
+    { "white" "The space after the object (e.g., trailing whitespace)." }
 } ;
 
 HELP: wrap
index 700f7bdccbe8bdd7c922b459e6e31b4a2615f8c4..8271fcbd2020f363ca32d5c71a162ffd89b63108 100644 (file)
@@ -7,9 +7,9 @@ HELP: debug-leaks?
 
 HELP: disposable
 { $class-description "Parent class for disposable resources. This class has two slots:"
-    { $list
-        { { $slot "disposed" } " - boolean. Set to true by " { $link dispose } ". Assert that it is false with " { $link check-disposed } "." }
-        { { $slot "continuation" } " - current continuation at construction time, for debugging. Set by " { $link new-disposable } " if " { $link debug-leaks? } " is on." }
+    { $slots
+        { "disposed" { "A boolean value, set to true by " { $link dispose } ". Assert that it is false with " { $link check-disposed } "." } }
+        { "continuation" { "The current continuation at construction time, for debugging. Set by " { $link new-disposable } " if " { $link debug-leaks? } " is on." } }
     }
 "New instances must be constructed with " { $link new-disposable } " and subclasses must implement " { $link dispose* } "." } ;
 
index 086f814d69a71ef50e1c021c3e07b25985594040..3c93706405f3a1fe50285f2e05a15c49f24f2226 100644 (file)
@@ -5,14 +5,14 @@ HELP: error-type-holder
 { $description "A definition of a class of errors"
   $nl
   "Instances contain the following slots:"
-  { $table
-    { { $slot "type" } { "symbol representing the error type." } }
-    { { $slot "word" } { "name of the word that lists all errors of this error type." } }
-    { { $slot "plural" } { "pluralized description of this error type." } }
-    { { $slot "icon" } { "path to an icon image representing this error type." } }
-    { { $slot "quot" } { "quotation that produces a list of all errors of this type." } }
-    { { $slot "forget-quot" } { "a quotation that removes errors of this type for a given word." } }
-    { { $slot "fatal?" } { "whether the error is fatal or not. default " { $link t } "." } }
+  { $slots
+    { "type" { "symbol representing the error type." } }
+    { "word" { "name of the word that lists all errors of this error type." } }
+    { "plural" { "pluralized description of this error type." } }
+    { "icon" { "path to an icon image representing this error type." } }
+    { "quot" { "quotation that produces a list of all errors of this type." } }
+    { "forget-quot" { "a quotation that removes errors of this type for a given word." } }
+    { "fatal?" { "whether the error is fatal or not. default " { $link t } "." } }
   }
 } ;
 
index c473f6d2cf8b21f504c34eaff743282d10c37509..cb5224a0a3c3d5577a81cb4892b2dc15135185ed 100644 (file)
@@ -31,12 +31,12 @@ HELP: path>source-file
 
 HELP: source-file
 { $class-description "Instances retain information about loaded source files, and have the following slots:"
-    { $list
-        { { $slot "path" } " - a pathname string." }
-        { { $slot "top-level-form" } " - a " { $link quotation } " composed of any code not used to define new words and classes" }
-        { { $slot "checksum" } " - the CRC32 checksum of the source file's contents at the time it was most recently loaded." }
-        { { $slot "definitions" } " - a pair of assocs, containing definitions and classes defined in this source file, respectively" }
-        { { $slot "main" } " - a word that gets called if you " { $link run } " the vocabulary" }
+    { $slots
+        { "path" { "a pathname string." } }
+        { "top-level-form" { " - a " { $link quotation } " composed of any code not used to define new words and classes" } }
+        { "checksum" { "the CRC32 checksum of the source file's contents at the time it was most recently loaded." } }
+        { "definitions" { "a pair of assocs, containing definitions and classes defined in this source file, respectively" } }
+        { "main" { "a word that gets called if you " { $link run } " the vocabulary" } }
     }
 } ;
 
index eec1f5e94b2fae458f16596168819efc77b8fc26..db38308ad779583fcf6bff85998d1581c6fe5855 100644 (file)
@@ -6,14 +6,13 @@ IN: gdbm
 
 HELP: gdbm
 { $class-description "Instance of this class is used as database configuration object. It has following slots:"
-
-  { $table
-    { { $slot "name" } "The file name of the database." }
-    { { $slot "block-size" } "The size of a single transfer from disk to memory. If the value is less than 512, the file system blocksize is used (this is default)." }
-    { { $slot "role" } "Determines what kind of access the user wants to obtain (see below)." }
-    { { $slot "sync" } { "Being set to " { $link t } " causes all database operations to be synchronized to the disk." } }
-    { { $slot "nolock" } { "Being set to " { $link t } " prevents gdbm from performing any locking on the database file." } }
-    { { $slot "mode" } "An integer representing standard UNIX access permissions." }
+  { $slots
+    { "name" "The file name of the database." }
+    { "block-size" "The size of a single transfer from disk to memory. If the value is less than 512, the file system blocksize is used (this is default)." }
+    { "role" "Determines what kind of access the user wants to obtain (see below)." }
+    { "sync" { "Being set to " { $link t } " causes all database operations to be synchronized to the disk." } }
+    { "nolock" { "Being set to " { $link t } " prevents gdbm from performing any locking on the database file." } }
+    { "mode" "An integer representing standard UNIX access permissions." }
   }
   "The " { $slot "role" } " can be set to one of the folowing values:"
   { $table
index 5de07be1660eededd1e19340c4fcd949f3359b2c..835ece53d0ef3a013efdf15d09c8ff412ece571d 100644 (file)
@@ -52,13 +52,13 @@ HELP: <hashcash>
 
 HELP: hashcash
 { $class-description "An hashcash object. An hashcash have the following slots:"
-    { $table
-        { { $slot "version" } "The version number. Only version 1 is supported." }
-        { { $slot "bits" } "The claimed bit value." }
-        { { $slot "date" } "The date a stamp was minted." }
-        { { $slot "resource" } "The resource for which a stamp is minted." }
-        { { $slot "ext" } "Extensions that a specialized application may want." }
-        { { $slot "salt" } "A random salt." }
-        { { $slot "suffix" } "The computed suffix. This is supposed to be manipulated by the library." }
+    { $slots
+        { "version" "The version number. Only version 1 is supported." }
+        { "bits" "The claimed bit value." }
+        { "date" "The date a stamp was minted." }
+        { "resource" "The resource for which a stamp is minted." }
+        { "ext" "Extensions that a specialized application may want." }
+        { "salt" "A random salt." }
+        { "suffix" "The computed suffix. This is supposed to be manipulated by the library." }
     }
 } ;
index 4faac9a3c210f2098e77676ddae38347b6cceb15..7ad3aabd066b541bbf83368cc7e336e4609c40ba 100644 (file)
@@ -90,19 +90,19 @@ HELP: list
 
 HELP: pop3-account
 { $class-description "A POP3 account on a POP3 server. It has the following slots:"
-    { $table
-        { { $slot "#" } "The ephemeral ordinal number of the message." }
-        { { $slot "host" } "The name or IP address of the remote host to which a POP3 connection is required." }
-        { { $slot "port" } "The POP3 server port (defaults to 110)." }
-        { { $slot "timeout" } "Maximum time in minutes to wait for a response from the POP3 server (defaults to 1 minutes)." }
-        { { $slot "user" } "The userID of the account on the POP3 server." }
-        { { $slot "pwd" } { "The clear-text password for the userID." } }
-        { { $slot "stream" } { "The duplex input/output stream wrapping the POP3 session." } }
-        { { $slot "capa" } { "A list of the mail server capabilities." } }
-        { { $slot "count" } { "Number of messages in the mailbox." } }
-        { { $slot "list" } { "A list of every message with its number and size in bytes" } }
-        { { $slot "uidls" } { "The UIDL (Unique IDentification Listing) of every message in the mailbox together with its ordinal number." } }
-        { { $slot "messages" } { "A sequence of email tuples in the mailbox containing each email's headers, number, uidl, and size." } }
+    { $slots
+        { "#" "The ephemeral ordinal number of the message." }
+        { "host" "The name or IP address of the remote host to which a POP3 connection is required." }
+        { "port" "The POP3 server port (defaults to 110)." }
+        { "timeout" "Maximum time in minutes to wait for a response from the POP3 server (defaults to 1 minutes)." }
+        { "user" "The userID of the account on the POP3 server." }
+        { "pwd" { "The clear-text password for the userID." } }
+        { "stream" { "The duplex input/output stream wrapping the POP3 session." } }
+        { "capa" { "A list of the mail server capabilities." } }
+        { "count" { "Number of messages in the mailbox." } }
+        { "list" { "A list of every message with its number and size in bytes" } }
+        { "uidls" { "The UIDL (Unique IDentification Listing) of every message in the mailbox together with its ordinal number." } }
+        { "messages" { "A sequence of email tuples in the mailbox containing each email's headers, number, uidl, and size." } }
     }
 "The " { $slot "host" } " is required; the rest are either set by default or optional." $nl
 "The " { $slot "user" } " and " { $slot "pwd" } " must either be set before using " { $link connect } " or immediately after it with the " { $link >user } " and " { $link >pwd } " words."
@@ -110,14 +110,14 @@ HELP: pop3-account
 
 HELP: message
 { $class-description "An e-mail message having the following slots:"
-    { $table
-        { { $slot "#" } "The ephemeral ordinal number of the message." }
-        { { $slot "uidl" } "The POP3 UIDL (Unique IDentification Listing) of the message." }
-        { { $slot "headers" } "The From:, Subject:, and To: headers of the message." }
-        { { $slot "from" } "The sender of the message. An e-mail address." }
-        { { $slot "to" } "The recipients of the message." }
-        { { $slot "subject" } { "The subject of the message." } }
-        { { $slot "size" } { "The size of the message in octets." } }
+    { $slots
+        { "#" "The ephemeral ordinal number of the message." }
+        { "uidl" "The POP3 UIDL (Unique IDentification Listing) of the message." }
+        { "headers" "The From:, Subject:, and To: headers of the message." }
+        { "from" "The sender of the message. An e-mail address." }
+        { "to" "The recipients of the message." }
+        { "subject" { "The subject of the message." } }
+        { "size" { "The size of the message in octets." } }
     }
 } ;
 
index bde78cc9ee9e16ce603fc629bb1fd9d0a53bddd8..3061cbd1168982e31d0df1e1bb7160a4eade8126 100644 (file)
@@ -50,9 +50,9 @@ HELP: line
 { $class-description "This is a " { $link gadget } " which, when added as a child to the " { $link chart } ", will display its data as straight line segments. The implementation is oriented towards speed to allow large data sets to be displayed as quickly as possible."
 $nl
 "Slots:"
-{ $list
-    { { $slot "data" } " - a " { $link sequence } " of { x y } pairs sorted by non-descending x;" }
-    { { $slot "data" } " - a " { $link color } " to draw the line with." }
+{ $slots
+    { "data" { "a " { $link sequence } " of { x y } pairs sorted by non-descending x;" } }
+    { "color" { "a " { $link color } " to draw the line with." } }
 } } ;
 
 HELP: y-at