nudge 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/VERSION +1 -1
  2. data/lib/instructions/bool/bool_and.rb +8 -0
  3. data/lib/instructions/bool/bool_define.rb +9 -0
  4. data/lib/instructions/bool/bool_depth.rb +5 -0
  5. data/lib/instructions/bool/bool_duplicate.rb +7 -0
  6. data/lib/instructions/bool/bool_equal_q.rb +8 -0
  7. data/lib/instructions/bool/bool_flush.rb +3 -0
  8. data/lib/instructions/bool/bool_not.rb +8 -0
  9. data/lib/instructions/bool/bool_or.rb +8 -0
  10. data/lib/instructions/bool/bool_pop.rb +3 -0
  11. data/lib/instructions/bool/bool_random.rb +3 -0
  12. data/lib/instructions/bool/bool_rotate.rb +11 -0
  13. data/lib/instructions/bool/bool_shove.rb +14 -0
  14. data/lib/instructions/bool/bool_swap.rb +3 -0
  15. data/lib/instructions/bool/bool_xor.rb +8 -0
  16. data/lib/instructions/bool/bool_yank.rb +12 -0
  17. data/lib/instructions/bool/bool_yankdup.rb +12 -0
  18. data/lib/instructions/code/code_atom_q.rb +9 -0
  19. data/lib/instructions/code/code_backbone_points.rb +17 -0
  20. data/lib/instructions/code/code_car.rb +15 -0
  21. data/lib/instructions/code/code_cdr.rb +13 -1
  22. data/lib/instructions/code/code_concatenate.rb +20 -0
  23. data/lib/instructions/code/code_cons.rb +22 -1
  24. data/lib/instructions/code/code_container.rb +21 -2
  25. data/lib/instructions/code/code_contains_q.rb +11 -0
  26. data/lib/instructions/code/code_define.rb +9 -0
  27. data/lib/instructions/code/code_depth.rb +5 -0
  28. data/lib/instructions/code/code_discrepancy.rb +13 -7
  29. data/lib/instructions/code/code_do_count.rb +21 -1
  30. data/lib/instructions/code/code_do_range.rb +44 -3
  31. data/lib/instructions/code/code_do_times.rb +39 -1
  32. data/lib/instructions/code/code_duplicate.rb +7 -0
  33. data/lib/instructions/code/code_equal_q.rb +9 -0
  34. data/lib/instructions/code/code_execute.rb +7 -0
  35. data/lib/instructions/code/code_execute_then_pop.rb +9 -0
  36. data/lib/instructions/code/code_flush.rb +3 -0
  37. data/lib/instructions/code/code_gsub.rb +11 -3
  38. data/lib/instructions/code/code_if.rb +8 -0
  39. data/lib/instructions/code/code_instructions.rb +12 -0
  40. data/lib/instructions/code/code_list.rb +10 -0
  41. data/lib/instructions/code/code_member_q.rb +14 -0
  42. data/lib/instructions/code/code_name_lookup.rb +10 -0
  43. data/lib/instructions/code/code_noop.rb +3 -0
  44. data/lib/instructions/code/code_nth.rb +12 -0
  45. data/lib/instructions/code/code_nth_cdr.rb +14 -2
  46. data/lib/instructions/code/code_nth_point.rb +15 -0
  47. data/lib/instructions/code/code_null_q.rb +11 -0
  48. data/lib/instructions/code/code_parses_q.rb +8 -0
  49. data/lib/instructions/code/code_points.rb +8 -0
  50. data/lib/instructions/code/code_pop.rb +3 -0
  51. data/lib/instructions/code/code_position.rb +11 -0
  52. data/lib/instructions/code/code_quote.rb +11 -0
  53. data/lib/instructions/code/code_replace_nth_point.rb +11 -0
  54. data/lib/instructions/code/code_rotate.rb +11 -0
  55. data/lib/instructions/code/code_shove.rb +14 -0
  56. data/lib/instructions/code/code_swap.rb +3 -0
  57. data/lib/instructions/code/code_yank.rb +12 -0
  58. data/lib/instructions/code/code_yankdup.rb +12 -0
  59. data/lib/instructions/conversion/bool_from_float.rb +9 -0
  60. data/lib/instructions/conversion/bool_from_int.rb +9 -0
  61. data/lib/instructions/conversion/code_from_bool.rb +9 -1
  62. data/lib/instructions/conversion/code_from_float.rb +10 -1
  63. data/lib/instructions/conversion/code_from_int.rb +10 -1
  64. data/lib/instructions/conversion/code_from_name.rb +10 -1
  65. data/lib/instructions/conversion/float_from_bool.rb +9 -0
  66. data/lib/instructions/conversion/float_from_int.rb +9 -0
  67. data/lib/instructions/conversion/int_from_bool.rb +9 -0
  68. data/lib/instructions/conversion/int_from_float.rb +9 -0
  69. data/lib/instructions/exec/exec_define.rb +9 -0
  70. data/lib/instructions/exec/exec_depth.rb +5 -0
  71. data/lib/instructions/exec/exec_do_count.rb +22 -0
  72. data/lib/instructions/exec/exec_do_range.rb +43 -0
  73. data/lib/instructions/exec/exec_do_times.rb +40 -0
  74. data/lib/instructions/exec/exec_duplicate.rb +7 -0
  75. data/lib/instructions/exec/exec_equal_q.rb +9 -0
  76. data/lib/instructions/exec/exec_flush.rb +5 -0
  77. data/lib/instructions/exec/exec_if.rb +8 -0
  78. data/lib/instructions/exec/exec_k.rb +4 -0
  79. data/lib/instructions/exec/exec_pop.rb +3 -0
  80. data/lib/instructions/exec/exec_rotate.rb +11 -0
  81. data/lib/instructions/exec/exec_s.rb +11 -0
  82. data/lib/instructions/exec/exec_shove.rb +14 -0
  83. data/lib/instructions/exec/exec_swap.rb +3 -0
  84. data/lib/instructions/exec/exec_y.rb +18 -0
  85. data/lib/instructions/exec/exec_yank.rb +12 -0
  86. data/lib/instructions/exec/exec_yankdup.rb +12 -0
  87. data/lib/instructions/float/float_abs.rb +8 -0
  88. data/lib/instructions/float/float_add.rb +8 -0
  89. data/lib/instructions/float/float_cosine.rb +8 -0
  90. data/lib/instructions/float/float_define.rb +9 -0
  91. data/lib/instructions/float/float_depth.rb +5 -0
  92. data/lib/instructions/float/float_divide.rb +12 -0
  93. data/lib/instructions/float/float_duplicate.rb +7 -0
  94. data/lib/instructions/float/float_equal_q.rb +8 -0
  95. data/lib/instructions/float/float_flush.rb +3 -0
  96. data/lib/instructions/float/float_greater_than_q.rb +9 -0
  97. data/lib/instructions/float/float_if.rb +8 -0
  98. data/lib/instructions/float/float_less_than_q.rb +9 -0
  99. data/lib/instructions/float/float_max.rb +8 -0
  100. data/lib/instructions/float/float_min.rb +8 -0
  101. data/lib/instructions/float/float_modulo.rb +12 -0
  102. data/lib/instructions/float/float_multiply.rb +8 -0
  103. data/lib/instructions/float/float_negative.rb +8 -0
  104. data/lib/instructions/float/float_pop.rb +3 -0
  105. data/lib/instructions/float/float_power.rb +12 -0
  106. data/lib/instructions/float/float_random.rb +3 -0
  107. data/lib/instructions/float/float_rotate.rb +11 -0
  108. data/lib/instructions/float/float_shove.rb +14 -0
  109. data/lib/instructions/float/float_sine.rb +8 -0
  110. data/lib/instructions/float/float_sqrt.rb +10 -0
  111. data/lib/instructions/float/float_subtract.rb +10 -0
  112. data/lib/instructions/float/float_swap.rb +3 -0
  113. data/lib/instructions/float/float_tangent.rb +8 -0
  114. data/lib/instructions/float/float_yank.rb +12 -0
  115. data/lib/instructions/float/float_yankdup.rb +12 -0
  116. data/lib/instructions/int/int_abs.rb +9 -1
  117. data/lib/instructions/int/int_add.rb +8 -0
  118. data/lib/instructions/int/int_define.rb +10 -1
  119. data/lib/instructions/int/int_depth.rb +5 -0
  120. data/lib/instructions/int/int_divide.rb +12 -0
  121. data/lib/instructions/int/int_duplicate.rb +7 -0
  122. data/lib/instructions/int/int_equal_q.rb +8 -0
  123. data/lib/instructions/int/int_flush.rb +3 -0
  124. data/lib/instructions/int/int_greater_than_q.rb +9 -0
  125. data/lib/instructions/int/int_if.rb +8 -0
  126. data/lib/instructions/int/int_less_than_q.rb +9 -0
  127. data/lib/instructions/int/int_max.rb +8 -0
  128. data/lib/instructions/int/int_min.rb +8 -0
  129. data/lib/instructions/int/int_modulo.rb +12 -0
  130. data/lib/instructions/int/int_multiply.rb +8 -0
  131. data/lib/instructions/int/int_negative.rb +8 -0
  132. data/lib/instructions/int/int_pop.rb +3 -0
  133. data/lib/instructions/int/int_power.rb +12 -0
  134. data/lib/instructions/int/int_random.rb +3 -0
  135. data/lib/instructions/int/int_rotate.rb +11 -0
  136. data/lib/instructions/int/int_shove.rb +14 -0
  137. data/lib/instructions/int/int_subtract.rb +10 -0
  138. data/lib/instructions/int/int_swap.rb +3 -0
  139. data/lib/instructions/int/int_yank.rb +14 -0
  140. data/lib/instructions/int/int_yankdup.rb +14 -0
  141. data/lib/instructions/name/name_depth.rb +5 -0
  142. data/lib/instructions/name/name_disable_lookup.rb +11 -0
  143. data/lib/instructions/name/name_duplicate.rb +7 -0
  144. data/lib/instructions/name/name_equal_q.rb +8 -0
  145. data/lib/instructions/name/name_flush.rb +3 -0
  146. data/lib/instructions/name/name_next.rb +7 -0
  147. data/lib/instructions/name/name_pop.rb +3 -0
  148. data/lib/instructions/name/name_random_bound.rb +9 -0
  149. data/lib/instructions/name/name_rotate.rb +11 -0
  150. data/lib/instructions/name/name_shove.rb +14 -0
  151. data/lib/instructions/name/name_swap.rb +3 -0
  152. data/lib/instructions/name/name_unbind.rb +7 -0
  153. data/lib/instructions/name/name_yank.rb +12 -0
  154. data/lib/instructions/name/name_yankdup.rb +12 -0
  155. data/spec/instructions/code/code_nth_cdr_spec.rb +10 -2
  156. metadata +3 -3
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:exec+ stack, and one +:bool+;
2
+ # returns the top +:exec+ item if the +:bool+ is +false+, the second one if +true+
3
+ #
4
+ # *needs:* 2 +:exec+, 1 +:bool+
5
+ #
6
+ # *pushes:* 1 +:exec+
7
+ #
8
+
1
9
  class ExecIfInstruction < Instruction
2
10
 
3
11
  include IfInstruction
@@ -1,3 +1,7 @@
1
+ # Implements the K Combinator on the +:exec+ stack:
2
+ # deletes the second item (replacing the top one).
3
+ #
4
+
1
5
  class ExecKInstruction < Instruction
2
6
  def preconditions?
3
7
  needs :exec, 2
@@ -1,3 +1,6 @@
1
+ # pops (and discards) the topmost item from the +:exec+ stack
2
+ #
3
+
1
4
  class ExecPopInstruction < Instruction
2
5
  include PopInstruction
3
6
  def initialize(context)
@@ -1,3 +1,14 @@
1
+ # pops the top 3 items of the +:exec+ stack;
2
+ # pushes them back in _rotated_ order
3
+ #
4
+ # If they were A, B and C (with C originally at the top of the stack)
5
+ # the result will be B, C, A (with A at the top)
6
+ #
7
+ # *needs:* 3 +:exec+
8
+ #
9
+ # *pushes:* 3 +:exec+
10
+ #
11
+
1
12
  class ExecRotateInstruction < Instruction
2
13
  include RotateInstruction
3
14
  def initialize(context)
@@ -1,3 +1,14 @@
1
+ # Implements the S Combinator on the +:exec+ stack:
2
+ # if the top three items on the stack are A, B, C (in top-to-bottom order), this pushes
3
+ # 1. a CodeBlock containing B and C (in that order)
4
+ # 2. C
5
+ # 3. A
6
+ #
7
+ # *needs:* 3 +:exec+ items
8
+ #
9
+ # *pushes:* 3 +:exec+ items
10
+ #
11
+
1
12
  class ExecSInstruction < Instruction
2
13
  def preconditions?
3
14
  needs :exec, 3
@@ -1,3 +1,17 @@
1
+ # pops the top items of the +:exec+ and +:int+ stacks;
2
+ # pushes the +:exec+ down "into" the stack, at a level determined by the +:int+ "destination" value.
3
+ #
4
+ # If the destination value is negative or 0, the item stays on top;
5
+ # if the destination value is greater than or equal to the depth of the stack, the item goes to the bottom;
6
+ # otherwise, the item is inserted farther from the stack's top as the destination value increases.
7
+ #
8
+ # note: the destination depth is calculated after the items have been popped
9
+ #
10
+ # *needs:* 1 +:exec+, 1 +:int+
11
+ #
12
+ # *pushes:* 1 +:exec+ (sortof)
13
+ #
14
+
1
15
  class ExecShoveInstruction < Instruction
2
16
  include ShoveInstruction
3
17
  def initialize(context)
@@ -1,3 +1,6 @@
1
+ # exchanges the position of the top 2 items on the +:exec+ stack
2
+ #
3
+
1
4
  class ExecSwapInstruction < Instruction
2
5
  include SwapInstruction
3
6
  def initialize(context)
@@ -1,3 +1,21 @@
1
+ # Implements the Y Combinator on the +:exec+ stack:
2
+ # pops the top item from the +:exec+ stack, then
3
+ # pushes:
4
+ # * a CodeBlockPoint with the following macro:
5
+ # block {
6
+ # do exec_y
7
+ # popped_item
8
+ # }
9
+ # * the +popped_item+ (again)
10
+ #
11
+ # The result is an (arguably infinite) recursive call of the +popped_item+; it will run once, then
12
+ # the macro will be encountered and the process will repeat.
13
+ #
14
+ # *needs:* 1 +:exec+ item
15
+ #
16
+ # *pushes:* 2 +:exec+ items
17
+
18
+
1
19
  class ExecYInstruction < Instruction
2
20
  def preconditions?
3
21
  needs :exec, 1
@@ -1,3 +1,15 @@
1
+ # pops the top item of the +:int+ stack (the "index");
2
+ # then repositions an item from down "inside" the +:exec+ stack to its top.
3
+ #
4
+ # If the index value is negative or 0, the bottom item on the stack is moved;
5
+ # if the index value is greater than or equal to the depth of the stack, there is no change;
6
+ # otherwise, the index value refers to the bottom-to-top order of stack items.
7
+ #
8
+ # *needs:* 1 +:int+, 1 +:exec+
9
+ #
10
+ # *pushes:* 1 +:exec+ (sortof)
11
+ #
12
+
1
13
  class ExecYankInstruction < Instruction
2
14
  include YankInstruction
3
15
  def initialize(context)
@@ -1,3 +1,15 @@
1
+ # pops the top item of the +:int+ stack (the "index");
2
+ # pushes a duplicate of an item from down "inside" the +:exec+ stack to its top.
3
+ #
4
+ # If the index value is negative or 0, the bottom item on the stack is copied;
5
+ # if the index value is greater than or equal to the depth of the stack, the top item is copied;
6
+ # otherwise, the index value refers to the bottom-to-top order of stack items.
7
+ #
8
+ # *needs:* 1 +:int+, 1 +:exec+
9
+ #
10
+ # *pushes:* 1 +:exec+ (sortof)
11
+ #
12
+
1
13
  class ExecYankdupInstruction < Instruction
2
14
  include YankdupInstruction
3
15
  def initialize(context)
@@ -1,3 +1,11 @@
1
+ # pops the top item of the +:float+ stack;
2
+ # pushes a ValuePoint with its absolute value onto the +:float+ stack
3
+ #
4
+ # *needs:* 1 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatAbsInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 1
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a ValuePoint with their sum onto the +:float+ stack
3
+ #
4
+ # *needs:* 2 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatAddInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 2
@@ -1,3 +1,11 @@
1
+ # pops the top item of the +:float+ stack;
2
+ # pushes a ValuePoint with its cosine onto the +:float+ stack
3
+ #
4
+ # *needs:* 1 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatCosineInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 1
@@ -1,3 +1,12 @@
1
+ # pops the top item of the +:float+ stack and the +:name+ stack;
2
+ # if the name string is not a bound variable (as opposed to a local name),
3
+ # it binds the name to the +:float+ ValuePoint
4
+ #
5
+ # *needs:* 1 +:float+, 1 +:name+
6
+ #
7
+ # *pushes:* nothing
8
+ #
9
+
1
10
  class FloatDefineInstruction < Instruction
2
11
  include DefineInstruction
3
12
  def initialize(context)
@@ -1,3 +1,8 @@
1
+ # pushes a ValuePoint with the number of items in the +:float+ stack onto the +:int+ stack
2
+ #
3
+ # *pushes:* 1 +:int+
4
+ #
5
+
1
6
  class FloatDepthInstruction < Instruction
2
7
  include DepthInstruction
3
8
  def initialize(context)
@@ -1,3 +1,15 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a ValuePoint with their (floating point) quotient onto the +:float+ stack
3
+ #
4
+ # note: the top item is the denominator, the second item is the numerator
5
+ #
6
+ # note: will push an +:error+ ValuePoint instead of an +:int+ if the numerator is 0.0
7
+ #
8
+ # *needs:* 2 +:float+
9
+ #
10
+ # *pushes:* 1 +:float+
11
+ #
12
+
1
13
  class FloatDivideInstruction < Instruction
2
14
  def preconditions?
3
15
  needs :float, 2
@@ -1,3 +1,10 @@
1
+ # makes and pushes a clone of the top item on the +:float+ stack
2
+ #
3
+ # *needs:* 1 +:float+
4
+ #
5
+ # *pushes:* 1 +:float+
6
+ #
7
+
1
8
  class FloatDuplicateInstruction < Instruction
2
9
  include DuplicateInstruction
3
10
  def initialize(context)
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a new ValuePoint onto the +:bool+ stack, with its value +true+ if the popped values are identical
3
+ #
4
+ # *needs:* 2 +:float+
5
+ #
6
+ # *pushes:* 1 +:bool+
7
+ #
8
+
1
9
  class FloatEqualQInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 2
@@ -1,3 +1,6 @@
1
+ # deletes all items from the +:float+ stack
2
+ #
3
+
1
4
  class FloatFlushInstruction < Instruction
2
5
  include FlushInstruction
3
6
  def initialize(context)
@@ -1,3 +1,12 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a new ValuePoint onto the +:bool+ stack,
3
+ # with value +true+ if the second one is strictly greater than the top one
4
+ #
5
+ # *needs:* 2 +:float+
6
+ #
7
+ # *pushes:* 1 +:bool+
8
+ #
9
+
1
10
  class FloatGreaterThanQInstruction < Instruction
2
11
  def preconditions?
3
12
  needs :float, 2
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:float+ stack, and one +:bool+;
2
+ # returns the top +:float+ item if the +:bool+ is +false+, the second one if +true+
3
+ #
4
+ # *needs:* 2 +:float+, 1 +:bool+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatIfInstruction < Instruction
2
10
 
3
11
  include IfInstruction
@@ -1,3 +1,12 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a new ValuePoint onto the +:bool+ stack,
3
+ # with value +true+ if the second one is strictly less than the top one
4
+ #
5
+ # *needs:* 2 +:float+
6
+ #
7
+ # *pushes:* 1 +:bool+
8
+ #
9
+
1
10
  class FloatLessThanQInstruction < Instruction
2
11
  def preconditions?
3
12
  needs :float, 2
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a new ValuePoint onto the +:float+ stack with the largest of the two values
3
+ #
4
+ # *needs:* 2 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatMaxInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 2
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a new ValuePoint onto the +:float+ stack with the smallest of the two values
3
+ #
4
+ # *needs:* 2 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatMinInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 2
@@ -1,3 +1,15 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a ValuePoint with the remainder after dividing the second into the first onto the +:float+ stack
3
+ #
4
+ # note: the top item is the denominator, the second item is the numerator
5
+ #
6
+ # note: will push an +:error+ ValuePoint instead of a +:float+ if the numerator is 0.0
7
+ #
8
+ # *needs:* 2 +:float+
9
+ #
10
+ # *pushes:* 1 +:float+
11
+ #
12
+
1
13
  class FloatModuloInstruction < Instruction
2
14
  def preconditions?
3
15
  needs :float, 2
@@ -1,3 +1,11 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a ValuePoint with their product onto the +:float+ stack
3
+ #
4
+ # *needs:* 2 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatMultiplyInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 2
@@ -1,3 +1,11 @@
1
+ # pops the top item of the +:float+ stack;
2
+ # pushes a ValuePoint with the value negated onto the +:float+ stack
3
+ #
4
+ # *needs:* 1 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatNegativeInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 1
@@ -1,3 +1,6 @@
1
+ # pops (and discards) the topmost item from the +:float+ stack
2
+ #
3
+
1
4
  class FloatPopInstruction < Instruction
2
5
  include PopInstruction
3
6
  def initialize(context)
@@ -1,3 +1,15 @@
1
+ # pops the top 2 items of the +:float+ stack;
2
+ # pushes a ValuePoint with value x**y, where x is the second stack item, y the top one
3
+ #
4
+ # note: the top item is the exponent, the second item is the base
5
+ #
6
+ # note: will push an +:error+ ValuePoint instead of a +:float+ if the operation doesn't return a float
7
+ #
8
+ # *needs:* 2 +:float+
9
+ #
10
+ # *pushes:* 1 +:float+
11
+ #
12
+
1
13
  class FloatPowerInstruction < Instruction
2
14
  def preconditions?
3
15
  needs :float, 2
@@ -1,3 +1,6 @@
1
+ # pushes a new +:float+ ValuePoint, with value determined by a call to FloatType.any_value
2
+ #
3
+
1
4
  class FloatRandomInstruction < Instruction
2
5
  def preconditions?
3
6
  true # no preconditions
@@ -1,3 +1,14 @@
1
+ # pops the top 3 items of the +:float+ stack;
2
+ # pushes them back in _rotated_ order
3
+ #
4
+ # If they were A, B and C (with C originally at the top of the stack)
5
+ # the result will be B, C, A (with A at the top)
6
+ #
7
+ # *needs:* 3 +:float+
8
+ #
9
+ # *pushes:* 3 +:float+
10
+ #
11
+
1
12
  class FloatRotateInstruction < Instruction
2
13
  include RotateInstruction
3
14
  def initialize(context)
@@ -1,3 +1,17 @@
1
+ # pops the top items of the +:float+ and +:int+ stacks;
2
+ # pushes the +:float+ down "into" the stack, at a level determined by the +:int+ "destination" value.
3
+ #
4
+ # If the destination value is negative or 0, the item stays on top;
5
+ # if the destination value is greater than or equal to the depth of the stack, the item goes to the bottom;
6
+ # otherwise, the item is inserted farther from the stack's top as the destination value increases.
7
+ #
8
+ # note: the destination depth is calculated after the items have been popped
9
+ #
10
+ # *needs:* 1 +:float+, 1 +:int+
11
+ #
12
+ # *pushes:* 1 +:float+ (sortof)
13
+ #
14
+
1
15
  class FloatShoveInstruction < Instruction
2
16
  include ShoveInstruction
3
17
  def initialize(context)
@@ -1,3 +1,11 @@
1
+ # pops the top item of the +:float+ stack;
2
+ # pushes a ValuePoint with its sine onto the +:float+ stack
3
+ #
4
+ # *needs:* 1 +:float+
5
+ #
6
+ # *pushes:* 1 +:float+
7
+ #
8
+
1
9
  class FloatSineInstruction < Instruction
2
10
  def preconditions?
3
11
  needs :float, 1