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.
- checksums.yaml +5 -5
- data/.rubocop.yml +133 -0
- data/.rubocop_todo.yml +75 -0
- data/.simplecov +1 -3
- data/.tool-versions +1 -0
- data/.travis.yml +9 -2
- data/Gemfile +11 -5
- data/Gemfile.lock +65 -39
- data/README.md +8 -1
- data/Rakefile +1 -1
- data/bin/gobstones +1 -1
- data/gobstones.gemspec +12 -11
- data/lib/gobstones/cli/printer.rb +41 -28
- data/lib/gobstones/cli/runner.rb +50 -15
- data/lib/gobstones/extensions/all.rb +1 -1
- data/lib/gobstones/extensions/boolean.rb +1 -5
- data/lib/gobstones/extensions/{fixnum.rb → integer.rb} +2 -4
- data/lib/gobstones/extensions/string.rb +1 -3
- data/lib/gobstones/lang/all.rb +3 -3
- data/lib/gobstones/lang/commands/all.rb +11 -10
- data/lib/gobstones/lang/commands/boom.rb +26 -0
- data/lib/gobstones/lang/commands/command_block.rb +23 -23
- data/lib/gobstones/lang/commands/conditional.rb +26 -0
- data/lib/gobstones/lang/commands/if.rb +13 -0
- data/lib/gobstones/lang/commands/if_then_else.rb +26 -0
- data/lib/gobstones/lang/commands/ir_al_origen.rb +15 -0
- data/lib/gobstones/lang/commands/mover.rb +23 -0
- data/lib/gobstones/lang/commands/multiple_assignment.rb +34 -21
- data/lib/gobstones/lang/commands/poner.rb +31 -0
- data/lib/gobstones/lang/commands/procedure_call.rb +8 -8
- data/lib/gobstones/lang/commands/repeat_with.rb +69 -0
- data/lib/gobstones/lang/commands/sacar.rb +29 -0
- data/lib/gobstones/lang/commands/single_assignment.rb +15 -20
- data/lib/gobstones/lang/commands/skip.rb +15 -0
- data/lib/gobstones/lang/commands/vaciar_tablero.rb +15 -0
- data/lib/gobstones/lang/commands/while.rb +20 -0
- data/lib/gobstones/lang/definitions/definition.rb +16 -23
- data/lib/gobstones/lang/definitions/definition_call.rb +7 -15
- data/lib/gobstones/lang/definitions/function.rb +1 -7
- data/lib/gobstones/lang/definitions/main.rb +1 -8
- data/lib/gobstones/lang/definitions/no_return_statement.rb +2 -8
- data/lib/gobstones/lang/definitions/procedure.rb +1 -7
- data/lib/gobstones/lang/definitions/return_from_function.rb +6 -13
- data/lib/gobstones/lang/definitions/return_from_main.rb +15 -10
- data/lib/gobstones/lang/definitions/var_tuple.rb +10 -12
- data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +17 -27
- data/lib/gobstones/lang/expressions/boolean_expressions.rb +4 -10
- data/lib/gobstones/lang/expressions/comparison_expressions.rb +0 -16
- data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +3 -5
- data/lib/gobstones/lang/expressions/expression.rb +18 -0
- data/lib/gobstones/lang/expressions/function_call.rb +9 -6
- data/lib/gobstones/lang/expressions/one_arg_expression.rb +8 -16
- data/lib/gobstones/lang/expressions/primitive_functions.rb +24 -16
- data/lib/gobstones/lang/expressions/two_arg_expression.rb +9 -16
- data/lib/gobstones/lang/expressions/type_bound_functions.rb +30 -25
- data/lib/gobstones/lang/expressions/var_name.rb +9 -13
- data/lib/gobstones/lang/literals/all.rb +3 -3
- data/lib/gobstones/lang/literals/{booleans.rb → boolean.rb} +24 -22
- data/lib/gobstones/lang/literals/{colors.rb → color.rb} +4 -14
- data/lib/gobstones/lang/literals/{directions.rb → direction.rb} +3 -13
- data/lib/gobstones/lang/literals/literal.rb +35 -27
- data/lib/gobstones/lang/literals/number.rb +6 -8
- data/lib/gobstones/lang/program.rb +9 -16
- data/lib/gobstones/modules/equality_definition.rb +23 -0
- data/lib/gobstones/parser/ast/ast.rb +48 -70
- data/lib/gobstones/parser/parse_error.rb +2 -7
- data/lib/gobstones/parser/treetop_parser.rb +9 -14
- data/lib/gobstones/runner/board.rb +12 -15
- data/lib/gobstones/runner/cell.rb +14 -20
- data/lib/gobstones/runner/errors/all.rb +1 -1
- data/lib/gobstones/runner/errors/boom_error.rb +0 -5
- data/lib/gobstones/runner/errors/definition_not_found_error.rb +7 -7
- data/lib/gobstones/runner/errors/empty_cell_error.rb +0 -5
- data/lib/gobstones/runner/errors/gobstones_runtime_error.rb +0 -5
- data/lib/gobstones/runner/errors/gobstones_type_error.rb +2 -7
- data/lib/gobstones/runner/errors/out_of_board_error.rb +0 -5
- data/lib/gobstones/runner/errors/undefined_variable_error.rb +6 -4
- data/lib/gobstones/runner/errors/wrong_arguments_error.rb +0 -5
- data/lib/gobstones/runner/execution_context.rb +16 -33
- data/lib/gobstones/runner/head.rb +17 -20
- data/lib/gobstones/runner/program_result.rb +12 -0
- data/lib/gobstones/type_check_result.rb +0 -4
- data/spec/lang/commands/boom_spec.rb +7 -0
- data/spec/lang/commands/command_block_spec.rb +15 -0
- data/spec/lang/commands/if_spec.rb +32 -0
- data/spec/lang/commands/if_then_else_spec.rb +19 -0
- data/spec/lang/commands/ir_al_origen_spec.rb +11 -0
- data/spec/lang/commands/mover_spec.rb +30 -0
- data/spec/lang/commands/multiple_assignment_spec.rb +39 -22
- data/spec/lang/commands/poner_spec.rb +27 -0
- data/spec/lang/commands/procedure_call_spec.rb +26 -28
- data/spec/lang/commands/procedure_spec.rb +32 -32
- data/spec/lang/commands/repeat_with_spec.rb +64 -0
- data/spec/lang/commands/sacar_spec.rb +32 -0
- data/spec/lang/commands/single_assignment_spec.rb +5 -6
- data/spec/lang/commands/skip_spec.rb +10 -0
- data/spec/lang/commands/vaciar_tablero_spec.rb +10 -0
- data/spec/lang/commands/while_spec.rb +39 -0
- data/spec/lang/definitions/main_spec.rb +34 -0
- data/spec/lang/definitions/no_return_statement_spec.rb +4 -5
- data/spec/lang/definitions/var_tuple_spec.rb +4 -7
- data/spec/lang/expressions/arithmetic_expressions_spec.rb +37 -64
- data/spec/lang/expressions/boolean_expressions_spec.rb +25 -34
- data/spec/lang/expressions/comparison_expressions_spec.rb +109 -155
- data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +3 -7
- data/spec/lang/expressions/function_call_spec.rb +24 -20
- data/spec/lang/expressions/primitive_functions_spec.rb +28 -39
- data/spec/lang/expressions/type_bound_functions_spec.rb +10 -18
- data/spec/lang/expressions/var_name_spec.rb +8 -12
- data/spec/lang/literals/{booleans_spec.rb → boolean_spec.rb} +3 -5
- data/spec/lang/literals/color_spec.rb +19 -0
- data/spec/lang/literals/direction_spec.rb +46 -0
- data/spec/lang/literals/{numbers_spec.rb → number_spec.rb} +3 -4
- data/spec/matchers/parse_matcher.rb +9 -11
- data/spec/parser/arithmetic_expressions_spec.rb +51 -61
- data/spec/parser/assignments_spec.rb +21 -31
- data/spec/parser/boolean_expressions_spec.rb +35 -43
- data/spec/parser/command_block_spec.rb +18 -20
- data/spec/parser/data_types_spec.rb +9 -19
- data/spec/parser/function_calls_spec.rb +19 -19
- data/spec/parser/function_definitions_spec.rb +17 -22
- data/spec/parser/gobstones_program_spec.rb +30 -30
- data/spec/parser/if_command_spec.rb +19 -28
- data/spec/parser/main_definition_spec.rb +13 -16
- data/spec/parser/nested_expressions_spec.rb +20 -24
- data/spec/parser/primitive_expressions_spec.rb +33 -38
- data/spec/parser/procedure_calls_spec.rb +17 -18
- data/spec/parser/procedure_definitions_spec.rb +12 -15
- data/spec/parser/repeat_with_command_spec.rb +10 -10
- data/spec/parser/simple_commands_spec.rb +23 -37
- data/spec/parser/treetop_parser_spec.rb +87 -83
- data/spec/parser/var_tuple_spec.rb +8 -12
- data/spec/parser/while_command_spec.rb +11 -14
- data/spec/runner/board_spec.rb +28 -33
- data/spec/runner/cell_spec.rb +21 -28
- data/spec/runner/execution_context_spec.rb +18 -35
- data/spec/runner/head_spec.rb +54 -60
- data/spec/spec_helper.rb +10 -1
- data/spec/support/board_assertions.rb +18 -0
- data/spec/{gobstones_lang_test_objects.rb → support/gobstones_lang_test_objects.rb} +6 -4
- data/spec/type_checker_spec.rb +19 -25
- metadata +80 -56
- data/.ruby-version +0 -1
- data/lib/gobstones/lang/commands/boom_cmd.rb +0 -31
- data/lib/gobstones/lang/commands/conditional_cmd.rb +0 -31
- data/lib/gobstones/lang/commands/if_cmd.rb +0 -38
- data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +0 -19
- data/lib/gobstones/lang/commands/mover_cmd.rb +0 -27
- data/lib/gobstones/lang/commands/poner_cmd.rb +0 -35
- data/lib/gobstones/lang/commands/repeat_with_cmd.rb +0 -77
- data/lib/gobstones/lang/commands/sacar_cmd.rb +0 -33
- data/lib/gobstones/lang/commands/skip_cmd.rb +0 -19
- data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +0 -19
- data/lib/gobstones/lang/commands/while_cmd.rb +0 -25
- data/lib/gobstones/modules/equal_by_class.rb +0 -13
- data/spec/lang/commands/boom_cmd_spec.rb +0 -8
- data/spec/lang/commands/cmd_block_spec.rb +0 -21
- data/spec/lang/commands/if_cmd_spec.rb +0 -50
- data/spec/lang/commands/ir_al_origen_cmd_spec.rb +0 -16
- data/spec/lang/commands/mover_cmd_spec.rb +0 -36
- data/spec/lang/commands/poner_cmd_spec.rb +0 -28
- data/spec/lang/commands/repeat_with_cmd_spec.rb +0 -60
- data/spec/lang/commands/sacar_cmd_spec.rb +0 -35
- data/spec/lang/commands/skip_cmd_spec.rb +0 -12
- data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +0 -14
- data/spec/lang/commands/while_cmd_spec.rb +0 -43
- data/spec/lang/literals/colors_spec.rb +0 -13
- 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
|
-
|
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/
|
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
|
18
|
-
|
12
|
+
def equality_attributes
|
13
|
+
%i[argument]
|
19
14
|
end
|
20
15
|
|
21
|
-
def evaluate(
|
22
|
-
|
16
|
+
def evaluate(_context)
|
17
|
+
subclass_responsibility
|
23
18
|
end
|
24
19
|
|
25
|
-
def with_evaluated_argument_in(context
|
26
|
-
yield
|
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/
|
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
|
-
|
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
|
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
|
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
|
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/
|
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
|
-
|
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
|
29
|
-
|
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/
|
2
|
-
require 'gobstones/lang/literals/
|
3
|
-
require 'gobstones/lang/literals/
|
4
|
-
require 'gobstones/
|
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/
|
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
|
18
|
-
|
12
|
+
def equality_attributes
|
13
|
+
%i[name]
|
19
14
|
end
|
20
15
|
|
21
16
|
def hash
|
22
|
-
|
17
|
+
name.hash
|
23
18
|
end
|
24
19
|
|
25
20
|
def evaluate(context)
|
26
|
-
context.get
|
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/
|
2
|
-
require 'gobstones/lang/literals/
|
3
|
-
require 'gobstones/lang/literals/
|
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
|
-
|
23
|
+
subclass_responsibility
|
27
24
|
end
|
28
25
|
|
29
|
-
def if_true(
|
30
|
-
|
26
|
+
def if_true(_block, _context)
|
27
|
+
subclass_responsibility
|
31
28
|
end
|
32
29
|
|
33
|
-
def if_false(
|
34
|
-
|
30
|
+
def if_false(_block, _context)
|
31
|
+
subclass_responsibility
|
35
32
|
end
|
36
33
|
|
37
|
-
def
|
38
|
-
|
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(
|
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(
|
61
|
+
def if_false(_block, _context)
|
66
62
|
# nothing to do, I'm true :)
|
63
|
+
self
|
67
64
|
end
|
68
65
|
|
69
|
-
def
|
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(
|
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(
|
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
|
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
|