gobstones 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +133 -0
  3. data/.rubocop_todo.yml +75 -0
  4. data/.simplecov +1 -3
  5. data/.tool-versions +1 -0
  6. data/.travis.yml +9 -2
  7. data/Gemfile +11 -5
  8. data/Gemfile.lock +65 -39
  9. data/README.md +8 -1
  10. data/Rakefile +1 -1
  11. data/bin/gobstones +1 -1
  12. data/gobstones.gemspec +12 -11
  13. data/lib/gobstones/cli/printer.rb +41 -28
  14. data/lib/gobstones/cli/runner.rb +50 -15
  15. data/lib/gobstones/extensions/all.rb +1 -1
  16. data/lib/gobstones/extensions/boolean.rb +1 -5
  17. data/lib/gobstones/extensions/{fixnum.rb → integer.rb} +2 -4
  18. data/lib/gobstones/extensions/string.rb +1 -3
  19. data/lib/gobstones/lang/all.rb +3 -3
  20. data/lib/gobstones/lang/commands/all.rb +11 -10
  21. data/lib/gobstones/lang/commands/boom.rb +26 -0
  22. data/lib/gobstones/lang/commands/command_block.rb +23 -23
  23. data/lib/gobstones/lang/commands/conditional.rb +26 -0
  24. data/lib/gobstones/lang/commands/if.rb +13 -0
  25. data/lib/gobstones/lang/commands/if_then_else.rb +26 -0
  26. data/lib/gobstones/lang/commands/ir_al_origen.rb +15 -0
  27. data/lib/gobstones/lang/commands/mover.rb +23 -0
  28. data/lib/gobstones/lang/commands/multiple_assignment.rb +34 -21
  29. data/lib/gobstones/lang/commands/poner.rb +31 -0
  30. data/lib/gobstones/lang/commands/procedure_call.rb +8 -8
  31. data/lib/gobstones/lang/commands/repeat_with.rb +69 -0
  32. data/lib/gobstones/lang/commands/sacar.rb +29 -0
  33. data/lib/gobstones/lang/commands/single_assignment.rb +15 -20
  34. data/lib/gobstones/lang/commands/skip.rb +15 -0
  35. data/lib/gobstones/lang/commands/vaciar_tablero.rb +15 -0
  36. data/lib/gobstones/lang/commands/while.rb +20 -0
  37. data/lib/gobstones/lang/definitions/definition.rb +16 -23
  38. data/lib/gobstones/lang/definitions/definition_call.rb +7 -15
  39. data/lib/gobstones/lang/definitions/function.rb +1 -7
  40. data/lib/gobstones/lang/definitions/main.rb +1 -8
  41. data/lib/gobstones/lang/definitions/no_return_statement.rb +2 -8
  42. data/lib/gobstones/lang/definitions/procedure.rb +1 -7
  43. data/lib/gobstones/lang/definitions/return_from_function.rb +6 -13
  44. data/lib/gobstones/lang/definitions/return_from_main.rb +15 -10
  45. data/lib/gobstones/lang/definitions/var_tuple.rb +10 -12
  46. data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +17 -27
  47. data/lib/gobstones/lang/expressions/boolean_expressions.rb +4 -10
  48. data/lib/gobstones/lang/expressions/comparison_expressions.rb +0 -16
  49. data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +3 -5
  50. data/lib/gobstones/lang/expressions/expression.rb +18 -0
  51. data/lib/gobstones/lang/expressions/function_call.rb +9 -6
  52. data/lib/gobstones/lang/expressions/one_arg_expression.rb +8 -16
  53. data/lib/gobstones/lang/expressions/primitive_functions.rb +24 -16
  54. data/lib/gobstones/lang/expressions/two_arg_expression.rb +9 -16
  55. data/lib/gobstones/lang/expressions/type_bound_functions.rb +30 -25
  56. data/lib/gobstones/lang/expressions/var_name.rb +9 -13
  57. data/lib/gobstones/lang/literals/all.rb +3 -3
  58. data/lib/gobstones/lang/literals/{booleans.rb → boolean.rb} +24 -22
  59. data/lib/gobstones/lang/literals/{colors.rb → color.rb} +4 -14
  60. data/lib/gobstones/lang/literals/{directions.rb → direction.rb} +3 -13
  61. data/lib/gobstones/lang/literals/literal.rb +35 -27
  62. data/lib/gobstones/lang/literals/number.rb +6 -8
  63. data/lib/gobstones/lang/program.rb +9 -16
  64. data/lib/gobstones/modules/equality_definition.rb +23 -0
  65. data/lib/gobstones/parser/ast/ast.rb +48 -70
  66. data/lib/gobstones/parser/parse_error.rb +2 -7
  67. data/lib/gobstones/parser/treetop_parser.rb +9 -14
  68. data/lib/gobstones/runner/board.rb +12 -15
  69. data/lib/gobstones/runner/cell.rb +14 -20
  70. data/lib/gobstones/runner/errors/all.rb +1 -1
  71. data/lib/gobstones/runner/errors/boom_error.rb +0 -5
  72. data/lib/gobstones/runner/errors/definition_not_found_error.rb +7 -7
  73. data/lib/gobstones/runner/errors/empty_cell_error.rb +0 -5
  74. data/lib/gobstones/runner/errors/gobstones_runtime_error.rb +0 -5
  75. data/lib/gobstones/runner/errors/gobstones_type_error.rb +2 -7
  76. data/lib/gobstones/runner/errors/out_of_board_error.rb +0 -5
  77. data/lib/gobstones/runner/errors/undefined_variable_error.rb +6 -4
  78. data/lib/gobstones/runner/errors/wrong_arguments_error.rb +0 -5
  79. data/lib/gobstones/runner/execution_context.rb +16 -33
  80. data/lib/gobstones/runner/head.rb +17 -20
  81. data/lib/gobstones/runner/program_result.rb +12 -0
  82. data/lib/gobstones/type_check_result.rb +0 -4
  83. data/spec/lang/commands/boom_spec.rb +7 -0
  84. data/spec/lang/commands/command_block_spec.rb +15 -0
  85. data/spec/lang/commands/if_spec.rb +32 -0
  86. data/spec/lang/commands/if_then_else_spec.rb +19 -0
  87. data/spec/lang/commands/ir_al_origen_spec.rb +11 -0
  88. data/spec/lang/commands/mover_spec.rb +30 -0
  89. data/spec/lang/commands/multiple_assignment_spec.rb +39 -22
  90. data/spec/lang/commands/poner_spec.rb +27 -0
  91. data/spec/lang/commands/procedure_call_spec.rb +26 -28
  92. data/spec/lang/commands/procedure_spec.rb +32 -32
  93. data/spec/lang/commands/repeat_with_spec.rb +64 -0
  94. data/spec/lang/commands/sacar_spec.rb +32 -0
  95. data/spec/lang/commands/single_assignment_spec.rb +5 -6
  96. data/spec/lang/commands/skip_spec.rb +10 -0
  97. data/spec/lang/commands/vaciar_tablero_spec.rb +10 -0
  98. data/spec/lang/commands/while_spec.rb +39 -0
  99. data/spec/lang/definitions/main_spec.rb +34 -0
  100. data/spec/lang/definitions/no_return_statement_spec.rb +4 -5
  101. data/spec/lang/definitions/var_tuple_spec.rb +4 -7
  102. data/spec/lang/expressions/arithmetic_expressions_spec.rb +37 -64
  103. data/spec/lang/expressions/boolean_expressions_spec.rb +25 -34
  104. data/spec/lang/expressions/comparison_expressions_spec.rb +109 -155
  105. data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +3 -7
  106. data/spec/lang/expressions/function_call_spec.rb +24 -20
  107. data/spec/lang/expressions/primitive_functions_spec.rb +28 -39
  108. data/spec/lang/expressions/type_bound_functions_spec.rb +10 -18
  109. data/spec/lang/expressions/var_name_spec.rb +8 -12
  110. data/spec/lang/literals/{booleans_spec.rb → boolean_spec.rb} +3 -5
  111. data/spec/lang/literals/color_spec.rb +19 -0
  112. data/spec/lang/literals/direction_spec.rb +46 -0
  113. data/spec/lang/literals/{numbers_spec.rb → number_spec.rb} +3 -4
  114. data/spec/matchers/parse_matcher.rb +9 -11
  115. data/spec/parser/arithmetic_expressions_spec.rb +51 -61
  116. data/spec/parser/assignments_spec.rb +21 -31
  117. data/spec/parser/boolean_expressions_spec.rb +35 -43
  118. data/spec/parser/command_block_spec.rb +18 -20
  119. data/spec/parser/data_types_spec.rb +9 -19
  120. data/spec/parser/function_calls_spec.rb +19 -19
  121. data/spec/parser/function_definitions_spec.rb +17 -22
  122. data/spec/parser/gobstones_program_spec.rb +30 -30
  123. data/spec/parser/if_command_spec.rb +19 -28
  124. data/spec/parser/main_definition_spec.rb +13 -16
  125. data/spec/parser/nested_expressions_spec.rb +20 -24
  126. data/spec/parser/primitive_expressions_spec.rb +33 -38
  127. data/spec/parser/procedure_calls_spec.rb +17 -18
  128. data/spec/parser/procedure_definitions_spec.rb +12 -15
  129. data/spec/parser/repeat_with_command_spec.rb +10 -10
  130. data/spec/parser/simple_commands_spec.rb +23 -37
  131. data/spec/parser/treetop_parser_spec.rb +87 -83
  132. data/spec/parser/var_tuple_spec.rb +8 -12
  133. data/spec/parser/while_command_spec.rb +11 -14
  134. data/spec/runner/board_spec.rb +28 -33
  135. data/spec/runner/cell_spec.rb +21 -28
  136. data/spec/runner/execution_context_spec.rb +18 -35
  137. data/spec/runner/head_spec.rb +54 -60
  138. data/spec/spec_helper.rb +10 -1
  139. data/spec/support/board_assertions.rb +18 -0
  140. data/spec/{gobstones_lang_test_objects.rb → support/gobstones_lang_test_objects.rb} +6 -4
  141. data/spec/type_checker_spec.rb +19 -25
  142. metadata +80 -56
  143. data/.ruby-version +0 -1
  144. data/lib/gobstones/lang/commands/boom_cmd.rb +0 -31
  145. data/lib/gobstones/lang/commands/conditional_cmd.rb +0 -31
  146. data/lib/gobstones/lang/commands/if_cmd.rb +0 -38
  147. data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +0 -19
  148. data/lib/gobstones/lang/commands/mover_cmd.rb +0 -27
  149. data/lib/gobstones/lang/commands/poner_cmd.rb +0 -35
  150. data/lib/gobstones/lang/commands/repeat_with_cmd.rb +0 -77
  151. data/lib/gobstones/lang/commands/sacar_cmd.rb +0 -33
  152. data/lib/gobstones/lang/commands/skip_cmd.rb +0 -19
  153. data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +0 -19
  154. data/lib/gobstones/lang/commands/while_cmd.rb +0 -25
  155. data/lib/gobstones/modules/equal_by_class.rb +0 -13
  156. data/spec/lang/commands/boom_cmd_spec.rb +0 -8
  157. data/spec/lang/commands/cmd_block_spec.rb +0 -21
  158. data/spec/lang/commands/if_cmd_spec.rb +0 -50
  159. data/spec/lang/commands/ir_al_origen_cmd_spec.rb +0 -16
  160. data/spec/lang/commands/mover_cmd_spec.rb +0 -36
  161. data/spec/lang/commands/poner_cmd_spec.rb +0 -28
  162. data/spec/lang/commands/repeat_with_cmd_spec.rb +0 -60
  163. data/spec/lang/commands/sacar_cmd_spec.rb +0 -35
  164. data/spec/lang/commands/skip_cmd_spec.rb +0 -12
  165. data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +0 -14
  166. data/spec/lang/commands/while_cmd_spec.rb +0 -43
  167. data/spec/lang/literals/colors_spec.rb +0 -13
  168. data/spec/lang/literals/directions_spec.rb +0 -45
@@ -1,15 +1,18 @@
1
+ require 'gobstones/lang/expressions/expression'
1
2
  require 'gobstones/lang/definitions/definition_call'
2
3
 
3
4
  module Gobstones
4
-
5
5
  module Lang
6
-
7
- class FunctionCall
8
-
6
+ class FunctionCall < Expression
9
7
  include DefinitionCall
10
8
 
11
- end
9
+ def is_function_call?
10
+ true
11
+ end
12
12
 
13
+ def to_s
14
+ "function call to #{name}"
15
+ end
16
+ end
13
17
  end
14
-
15
18
  end
@@ -1,33 +1,25 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/lang/expressions/expression'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
- class OneArgExpression
8
-
9
- include Gobstones::EqualByClass
10
-
5
+ class OneArgExpression < Expression
11
6
  attr_reader :argument
12
7
 
13
8
  def initialize(argument)
14
9
  @argument = argument
15
10
  end
16
11
 
17
- def ==(other)
18
- super(other) && argument == other.argument
12
+ def equality_attributes
13
+ %i[argument]
19
14
  end
20
15
 
21
- def evaluate(context)
22
- raise 'subclass responsibility'
16
+ def evaluate(_context)
17
+ subclass_responsibility
23
18
  end
24
19
 
25
- def with_evaluated_argument_in(context, &block)
26
- yield argument.evaluate(context)
20
+ def with_evaluated_argument_in(context)
21
+ yield(argument.evaluate(context))
27
22
  end
28
-
29
23
  end
30
-
31
24
  end
32
-
33
25
  end
@@ -1,74 +1,82 @@
1
1
  require 'gobstones/lang/expressions/one_arg_expression'
2
2
  require 'gobstones/extensions/boolean'
3
- require 'gobstones/extensions/fixnum'
3
+ require 'gobstones/extensions/integer'
4
4
  require 'gobstones/type_check_result'
5
5
 
6
6
  module Gobstones
7
-
8
7
  module Lang
9
-
10
8
  class NroBolitas < OneArgExpression
11
-
12
9
  def evaluate(context)
13
10
  with_evaluated_argument_in(context) do |result|
14
11
  context.head.number_of_balls(result).to_gbs_num
15
12
  end
16
13
  end
17
14
 
15
+ def to_s
16
+ 'nroBolitas() expression'
17
+ end
18
18
  end
19
19
 
20
20
  class HayBolitas < OneArgExpression
21
-
22
21
  def evaluate(context)
23
22
  with_evaluated_argument_in(context) do |result|
24
23
  context.head.are_there_balls?(result).to_gbs_bool
25
24
  end
26
25
  end
27
26
 
27
+ def to_s
28
+ 'hayBolitas() expression'
29
+ end
28
30
  end
29
31
 
30
32
  class PuedeMover < OneArgExpression
31
-
32
33
  def evaluate(context)
33
34
  with_evaluated_argument_in(context) do |result|
34
35
  context.head.can_move?(result).to_gbs_bool
35
36
  end
36
37
  end
37
38
 
39
+ def to_s
40
+ 'puedeMover() expression'
41
+ end
42
+
38
43
  def argument_type
39
44
  :Direction
40
45
  end
41
46
 
42
47
  def type_check
43
- Gobstones::TypeCheckResult.new argument_type, argument.return_type
48
+ TypeCheckResult.new(argument_type, argument.return_type)
44
49
  end
45
-
46
50
  end
47
51
 
48
52
  class Siguiente < OneArgExpression
49
-
50
53
  def evaluate(context)
51
- with_evaluated_argument_in(context) { |result| result.next }
54
+ with_evaluated_argument_in(context, &:next)
52
55
  end
53
56
 
57
+ def to_s
58
+ 'siguiente() expression'
59
+ end
54
60
  end
55
61
 
56
62
  class Previo < OneArgExpression
57
-
58
63
  def evaluate(context)
59
- with_evaluated_argument_in(context) { |result| result.previous }
64
+ with_evaluated_argument_in(context, &:previous)
60
65
  end
61
66
 
67
+ def to_s
68
+ 'previo() expression'
69
+ end
62
70
  end
63
71
 
64
72
  class Opuesto < OneArgExpression
65
-
66
73
  def evaluate(context)
67
- with_evaluated_argument_in(context) { |result| result.opposite }
74
+ with_evaluated_argument_in(context, &:opposite)
68
75
  end
69
76
 
77
+ def to_s
78
+ 'opuesto() expression'
79
+ end
70
80
  end
71
-
72
81
  end
73
-
74
82
  end
@@ -1,21 +1,19 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/lang/expressions/expression'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
- class TwoArgExpression
8
-
9
- include Gobstones::EqualByClass
10
-
5
+ class TwoArgExpression < Expression
11
6
  attr_reader :left_expr, :right_expr
12
7
 
13
8
  def self.evaluates_with(selector)
14
9
  instance_eval do
15
10
  define_method :evaluate do |*args|
16
11
  context = args.first
17
- left_expr.evaluate(context)
18
- .send(selector, right_expr.evaluate(context))
12
+ left_expr.evaluate(context).send(selector, right_expr.evaluate(context))
13
+ end
14
+
15
+ define_method :to_s do
16
+ "#{selector} expression"
19
17
  end
20
18
  end
21
19
  end
@@ -25,14 +23,9 @@ module Gobstones
25
23
  @right_expr = right
26
24
  end
27
25
 
28
- def ==(other)
29
- super(other) &&
30
- self.left_expr == other.left_expr &&
31
- self.right_expr == other.right_expr
26
+ def equality_attributes
27
+ %i[left_expr right_expr]
32
28
  end
33
-
34
29
  end
35
-
36
30
  end
37
-
38
31
  end
@@ -1,66 +1,71 @@
1
- require 'gobstones/lang/literals/booleans'
2
- require 'gobstones/lang/literals/colors'
3
- require 'gobstones/lang/literals/directions'
4
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/lang/expressions/expression'
2
+ require 'gobstones/lang/literals/boolean'
3
+ require 'gobstones/lang/literals/color'
4
+ require 'gobstones/lang/literals/direction'
5
+ require 'gobstones/runner/execution_context'
5
6
 
6
7
  module Gobstones
7
-
8
8
  module Lang
9
-
10
- class TypeBoundFunc
11
-
12
- include Gobstones::EqualByClass
13
-
14
- end
9
+ TypeBoundFunc = Class.new(Expression)
15
10
 
16
11
  class MinBool < TypeBoundFunc
17
-
18
- def evaluate(context=nil)
12
+ def evaluate(_context = Runner::NullExecutionContext.new)
19
13
  False.new
20
14
  end
21
15
 
16
+ def to_s
17
+ 'minBool() expression'
18
+ end
22
19
  end
23
20
 
24
21
  class MaxBool < TypeBoundFunc
25
-
26
- def evaluate(context=nil)
22
+ def evaluate(_context = Runner::NullExecutionContext.new)
27
23
  True.new
28
24
  end
29
25
 
26
+ def to_s
27
+ 'maxBool() expression'
28
+ end
30
29
  end
31
30
 
32
31
  class MinColor < TypeBoundFunc
33
-
34
- def evaluate(context=nil)
32
+ def evaluate(_context = Runner::NullExecutionContext.new)
35
33
  Azul.new
36
34
  end
37
35
 
36
+ def to_s
37
+ 'minColor() expression'
38
+ end
38
39
  end
39
40
 
40
41
  class MaxColor < TypeBoundFunc
41
-
42
- def evaluate(context=nil)
42
+ def evaluate(_context = Runner::NullExecutionContext.new)
43
43
  Verde.new
44
44
  end
45
45
 
46
+ def to_s
47
+ 'maxColor() expression'
48
+ end
46
49
  end
47
50
 
48
51
  class MinDir < TypeBoundFunc
49
-
50
- def evaluate(context=nil)
52
+ def evaluate(_context = Runner::NullExecutionContext.new)
51
53
  Norte.new
52
54
  end
53
55
 
56
+ def to_s
57
+ 'minDir() expression'
58
+ end
54
59
  end
55
60
 
56
61
  class MaxDir < TypeBoundFunc
57
-
58
- def evaluate(context=nil)
62
+ def evaluate(_context = Runner::NullExecutionContext.new)
59
63
  Oeste.new
60
64
  end
61
65
 
66
+ def to_s
67
+ 'maxDir() expression'
68
+ end
62
69
  end
63
-
64
70
  end
65
-
66
71
  end
@@ -1,37 +1,33 @@
1
- require 'gobstones/modules/equal_by_class'
1
+ require 'gobstones/lang/expressions/expression'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
- class VarName
8
-
9
- include Gobstones::EqualByClass
10
-
5
+ class VarName < Expression
11
6
  attr_reader :name
12
7
 
13
8
  def initialize(name)
14
9
  @name = name
15
10
  end
16
11
 
17
- def ==(var)
18
- super(var) && self.name == var.name
12
+ def equality_attributes
13
+ %i[name]
19
14
  end
20
15
 
21
16
  def hash
22
- @name.hash
17
+ name.hash
23
18
  end
24
19
 
25
20
  def evaluate(context)
26
- context.get self
21
+ context.get(self)
27
22
  end
28
23
 
29
24
  def named?(a_name)
30
25
  name == a_name
31
26
  end
32
27
 
28
+ def to_s
29
+ "variable named '#{name}'"
30
+ end
33
31
  end
34
-
35
32
  end
36
-
37
33
  end
@@ -1,4 +1,4 @@
1
- require 'gobstones/lang/literals/booleans'
2
- require 'gobstones/lang/literals/colors'
3
- require 'gobstones/lang/literals/directions'
1
+ require 'gobstones/lang/literals/boolean'
2
+ require 'gobstones/lang/literals/color'
3
+ require 'gobstones/lang/literals/direction'
4
4
  require 'gobstones/lang/literals/number'
@@ -1,11 +1,8 @@
1
1
  require 'gobstones/lang/literals/literal'
2
2
 
3
3
  module Gobstones
4
-
5
4
  module Lang
6
-
7
5
  class Boolean < Literal
8
-
9
6
  def return_type
10
7
  :Boolean
11
8
  end
@@ -23,26 +20,24 @@ module Gobstones
23
20
  end
24
21
 
25
22
  def not
26
- raise 'subclass responsibility'
23
+ subclass_responsibility
27
24
  end
28
25
 
29
- def if_true(block, context)
30
- raise 'subclass responsibility'
26
+ def if_true(_block, _context)
27
+ subclass_responsibility
31
28
  end
32
29
 
33
- def if_false(block, context)
34
- raise 'subclass responsibility'
30
+ def if_false(_block, _context)
31
+ subclass_responsibility
35
32
  end
36
33
 
37
- def is_true?
38
- raise 'subclass responsibility'
34
+ def true?
35
+ subclass_responsibility
39
36
  end
40
-
41
37
  end
42
38
 
43
39
  class True < Boolean
44
-
45
- def <(other)
40
+ def <(_other)
46
41
  false
47
42
  end
48
43
 
@@ -50,7 +45,7 @@ module Gobstones
50
45
  other
51
46
  end
52
47
 
53
- def or(other)
48
+ def or(_other)
54
49
  self
55
50
  end
56
51
 
@@ -60,25 +55,29 @@ module Gobstones
60
55
 
61
56
  def if_true(block, context)
62
57
  block.evaluate context
58
+ self
63
59
  end
64
60
 
65
- def if_false(block, context)
61
+ def if_false(_block, _context)
66
62
  # nothing to do, I'm true :)
63
+ self
67
64
  end
68
65
 
69
- def is_true?
66
+ def true?
70
67
  true
71
68
  end
72
69
 
70
+ def to_s
71
+ 'True'
72
+ end
73
73
  end
74
74
 
75
75
  class False < Boolean
76
-
77
76
  def <(other)
78
77
  self != other
79
78
  end
80
79
 
81
- def and(other)
80
+ def and(_other)
82
81
  self
83
82
  end
84
83
 
@@ -90,20 +89,23 @@ module Gobstones
90
89
  True.new
91
90
  end
92
91
 
93
- def if_true(block, context)
92
+ def if_true(_block, _context)
94
93
  # nothing to do, I'm false :)
94
+ self
95
95
  end
96
96
 
97
97
  def if_false(block, context)
98
98
  block.evaluate context
99
+ self
99
100
  end
100
101
 
101
- def is_true?
102
+ def true?
102
103
  false
103
104
  end
104
105
 
106
+ def to_s
107
+ 'False'
108
+ end
105
109
  end
106
-
107
110
  end
108
-
109
111
  end