gobstones 0.0.1.1 → 0.0.2

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -3
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG +22 -2
  6. data/Gemfile +3 -3
  7. data/Gemfile.lock +32 -27
  8. data/bin/gobstones +1 -1
  9. data/examples/.gitkeep +0 -0
  10. data/gobstones.gemspec +2 -2
  11. data/lib/gobstones/cli/board_template +1 -1
  12. data/lib/gobstones/cli/printer.rb +1 -1
  13. data/lib/gobstones/cli/runner.rb +8 -2
  14. data/lib/gobstones/extensions/all.rb +2 -1
  15. data/lib/gobstones/extensions/boolean.rb +1 -1
  16. data/lib/gobstones/extensions/fixnum.rb +1 -1
  17. data/lib/gobstones/extensions/string.rb +9 -0
  18. data/lib/gobstones/lang/all.rb +1 -1
  19. data/lib/gobstones/lang/commands/all.rb +3 -2
  20. data/lib/gobstones/lang/commands/boom_cmd.rb +6 -3
  21. data/lib/gobstones/lang/commands/command_block.rb +1 -1
  22. data/lib/gobstones/lang/commands/conditional_cmd.rb +5 -1
  23. data/lib/gobstones/lang/commands/ir_al_origen_cmd.rb +1 -1
  24. data/lib/gobstones/lang/commands/mover_cmd.rb +4 -2
  25. data/lib/gobstones/lang/commands/multiple_assignment.rb +35 -0
  26. data/lib/gobstones/lang/commands/poner_cmd.rb +8 -4
  27. data/lib/gobstones/lang/commands/procedure_call.rb +1 -9
  28. data/lib/gobstones/lang/commands/repeat_with_cmd.rb +10 -6
  29. data/lib/gobstones/lang/commands/sacar_cmd.rb +9 -7
  30. data/lib/gobstones/lang/commands/{assignments.rb → single_assignment.rb} +5 -3
  31. data/lib/gobstones/lang/commands/skip_cmd.rb +2 -2
  32. data/lib/gobstones/lang/commands/vaciar_tablero_cmd.rb +1 -1
  33. data/lib/gobstones/lang/commands/while_cmd.rb +1 -1
  34. data/lib/gobstones/lang/definitions/all.rb +1 -1
  35. data/lib/gobstones/lang/definitions/definition.rb +47 -5
  36. data/lib/gobstones/lang/definitions/definition_call.rb +17 -5
  37. data/lib/gobstones/lang/definitions/function.rb +9 -0
  38. data/lib/gobstones/lang/definitions/main.rb +1 -1
  39. data/lib/gobstones/lang/definitions/no_return_statement.rb +7 -3
  40. data/lib/gobstones/lang/definitions/procedure.rb +5 -20
  41. data/lib/gobstones/lang/definitions/return_from_function.rb +12 -2
  42. data/lib/gobstones/lang/definitions/return_from_main.rb +5 -1
  43. data/lib/gobstones/lang/definitions/var_tuple.rb +13 -1
  44. data/lib/gobstones/lang/expressions/all.rb +1 -1
  45. data/lib/gobstones/lang/expressions/arithmetic_expressions.rb +1 -1
  46. data/lib/gobstones/lang/expressions/boolean_expressions.rb +3 -2
  47. data/lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb +17 -0
  48. data/lib/gobstones/lang/expressions/function_call.rb +1 -1
  49. data/lib/gobstones/lang/expressions/one_arg_expression.rb +16 -4
  50. data/lib/gobstones/lang/expressions/primitive_functions.rb +18 -12
  51. data/lib/gobstones/lang/expressions/two_arg_expression.rb +7 -3
  52. data/lib/gobstones/lang/expressions/type_bound_functions.rb +1 -1
  53. data/lib/gobstones/lang/expressions/var_name.rb +9 -3
  54. data/lib/gobstones/lang/literals/all.rb +1 -1
  55. data/lib/gobstones/lang/literals/colors.rb +1 -1
  56. data/lib/gobstones/lang/literals/literal.rb +31 -21
  57. data/lib/gobstones/lang/literals/number.rb +1 -1
  58. data/lib/gobstones/lang/program.rb +13 -4
  59. data/lib/gobstones/modules/equal_by_class.rb +1 -1
  60. data/lib/gobstones/parser/ast/ast.rb +12 -8
  61. data/lib/gobstones/parser/grammar/gobstones.treetop +4 -4
  62. data/lib/gobstones/parser/parse_error.rb +1 -1
  63. data/lib/gobstones/runner/all.rb +1 -2
  64. data/lib/gobstones/runner/board.rb +13 -4
  65. data/lib/gobstones/runner/cell.rb +10 -0
  66. data/lib/gobstones/runner/errors/all.rb +1 -1
  67. data/lib/gobstones/runner/errors/definition_not_found_error.rb +1 -1
  68. data/lib/gobstones/runner/execution_context.rb +66 -16
  69. data/lib/gobstones/runner/head.rb +17 -3
  70. data/spec/gobstones_lang_test_objects.rb +75 -0
  71. data/spec/lang/commands/boom_cmd_spec.rb +3 -3
  72. data/spec/lang/commands/cmd_block_spec.rb +14 -14
  73. data/spec/lang/commands/if_cmd_spec.rb +21 -20
  74. data/spec/lang/commands/ir_al_origen_cmd_spec.rb +3 -3
  75. data/spec/lang/commands/mover_cmd_spec.rb +12 -14
  76. data/spec/lang/commands/multiple_assignment_spec.rb +37 -0
  77. data/spec/lang/commands/poner_cmd_spec.rb +13 -14
  78. data/spec/lang/commands/procedure_call_spec.rb +19 -24
  79. data/spec/lang/commands/procedure_spec.rb +32 -36
  80. data/spec/lang/commands/repeat_with_cmd_spec.rb +39 -20
  81. data/spec/lang/commands/sacar_cmd_spec.rb +17 -16
  82. data/spec/lang/commands/single_assignment_spec.rb +13 -0
  83. data/spec/lang/commands/skip_cmd_spec.rb +2 -2
  84. data/spec/lang/commands/vaciar_tablero_cmd_spec.rb +7 -6
  85. data/spec/lang/commands/while_cmd_spec.rb +21 -15
  86. data/spec/lang/definitions/no_return_statement_spec.rb +10 -0
  87. data/spec/lang/definitions/var_tuple_spec.rb +16 -0
  88. data/spec/lang/expressions/arithmetic_expressions_spec.rb +15 -15
  89. data/spec/lang/expressions/boolean_expressions_spec.rb +35 -25
  90. data/spec/lang/expressions/comparison_expressions_spec.rb +25 -28
  91. data/spec/lang/expressions/enclosed_by_parens_expression_spec.rb +11 -0
  92. data/spec/lang/expressions/function_call_spec.rb +29 -0
  93. data/spec/lang/expressions/primitive_functions_spec.rb +60 -62
  94. data/spec/lang/expressions/type_bound_functions_spec.rb +13 -13
  95. data/spec/lang/expressions/var_name_spec.rb +20 -8
  96. data/spec/lang/literals/booleans_spec.rb +5 -7
  97. data/spec/lang/literals/colors_spec.rb +4 -4
  98. data/spec/lang/literals/directions_spec.rb +12 -12
  99. data/spec/lang/literals/numbers_spec.rb +2 -2
  100. data/spec/matchers/parse_matcher.rb +9 -10
  101. data/spec/parser/arithmetic_expressions_spec.rb +19 -19
  102. data/spec/parser/assignments_spec.rb +24 -10
  103. data/spec/parser/boolean_expressions_spec.rb +18 -18
  104. data/spec/parser/command_block_spec.rb +17 -19
  105. data/spec/parser/data_types_spec.rb +23 -23
  106. data/spec/parser/function_calls_spec.rb +13 -12
  107. data/spec/parser/function_definitions_spec.rb +13 -18
  108. data/spec/parser/gobstones_program_spec.rb +15 -15
  109. data/spec/parser/if_command_spec.rb +13 -12
  110. data/spec/parser/main_definition_spec.rb +12 -12
  111. data/spec/parser/nested_expressions_spec.rb +16 -20
  112. data/spec/parser/primitive_expressions_spec.rb +27 -33
  113. data/spec/parser/procedure_calls_spec.rb +12 -12
  114. data/spec/parser/procedure_definitions_spec.rb +10 -16
  115. data/spec/parser/repeat_with_command_spec.rb +7 -10
  116. data/spec/parser/simple_commands_spec.rb +10 -10
  117. data/spec/parser/treetop_parser_spec.rb +11 -10
  118. data/spec/parser/var_tuple_spec.rb +7 -11
  119. data/spec/parser/while_command_spec.rb +9 -9
  120. data/spec/runner/board_spec.rb +23 -27
  121. data/spec/runner/cell_spec.rb +34 -38
  122. data/spec/runner/execution_context_spec.rb +38 -24
  123. data/spec/runner/head_spec.rb +54 -63
  124. data/spec/spec_helper.rb +4 -1
  125. data/spec/type_checker_spec.rb +13 -13
  126. metadata +33 -18
  127. data/lib/gobstones/lang/expressions/parentheses_expression.rb +0 -13
  128. data/spec/lang/commands/assignments_spec.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 826a27b2e6a5676f89fa8c32624c62df0dde077d
4
- data.tar.gz: 17f89df81a1a217fe6b7a493e30fddb6b7c92a4f
3
+ metadata.gz: 03e20b75d2bb5c93639777a71d19068ae2b69984
4
+ data.tar.gz: fb74916def49acc055a0a028546e0e514b2542cb
5
5
  SHA512:
6
- metadata.gz: 6283b4c01c03a10bc7bf264ff84c2ce9c90b38d1feb10b65f1b5e7364e32e336580cfc13a640215b3dc692671b09bfcc4128c77d5b1827c64041ad766d3ac4a2
7
- data.tar.gz: 261974cfa283b2cca01f5c6ad5b2a050cc7d5bf643b4620345e4c246ad0f8722f0bfe4367fe6abdf9f67e8a9d68311daa42141cea22951bbb2c87494baf31955
6
+ metadata.gz: c3f831d15b2ce307ee9f0c5305e51f17ade931bb27b0ca042ea4f8f58316d290cc40966a9b1e76a4baa0e45d791b3a0341fd20e2606f104d965f6741af67ceca
7
+ data.tar.gz: 6ffabbf50a90cddd4d4dfa8c814d234307af73b1e70906613df903264d17f89dd5564e4bbdebbdd928edfa34240ad987d4737ad096f77370a32f25c259527353
data/.gitignore CHANGED
@@ -1,6 +1,4 @@
1
1
  .rvmrc
2
- *.swp
3
- .rake_t_cache
4
2
  coverage/
5
- tags
6
3
  .idea/
4
+ examples/*.test.gbs
@@ -1 +1 @@
1
- 2.0.0-p195
1
+ 2.2.0
@@ -1,4 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
3
+ - 2.2.0
4
4
  - 1.9.3
data/CHANGELOG CHANGED
@@ -1,4 +1,24 @@
1
- v 0.0.1
2
- =======
1
+ v 0.0.2 (2015.01.10)
2
+ ====================
3
+
4
+ New features:
5
+
6
+ * Support evaluation of function calls
7
+ * Support expression between parentheses
8
+ * Add multiple assignment to the language
9
+ * Add some runtime type checks
10
+
11
+ Bug fixes:
12
+
13
+ * repeatWith command issue (f0e5fa00a178ffad825c6cfdafbfbd333e331f9b)
14
+
15
+ Infrastructure:
16
+
17
+ * Support Ruby 2.2.0 and 1.9.3
18
+ * Upgrade dependencies to latest stable versions
19
+ * Lots of refactorings and new specs (now 316)
20
+
21
+ v 0.0.1 (2013.10.26)
22
+ ====================
3
23
 
4
24
  First version.
data/Gemfile CHANGED
@@ -1,12 +1,12 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'treetop', '~> 1.4'
4
- gem 'rake', '~> 10.1'
4
+ gem 'rake', '~> 10.4'
5
5
 
6
6
  group :test do
7
7
  gem 'autotest-standalone', '~> 4.5'
8
- gem 'rspec', '~> 2'
8
+ gem 'rspec', '~> 3.1'
9
9
  gem 'simplecov', '~> 0.7', :require => false
10
10
  end
11
11
 
12
- gem 'coveralls', :require => false
12
+ gem 'coveralls', '~> 0.7', :require => false
@@ -2,46 +2,51 @@ GEM
2
2
  remote: https://rubygems.org/
3
3
  specs:
4
4
  autotest-standalone (4.5.11)
5
- coveralls (0.7.0)
5
+ coveralls (0.7.2)
6
6
  multi_json (~> 1.3)
7
- rest-client
7
+ rest-client (= 1.6.7)
8
8
  simplecov (>= 0.7)
9
- term-ansicolor
10
- thor
11
- diff-lcs (1.2.4)
12
- mime-types (1.25)
13
- multi_json (1.8.2)
14
- polyglot (0.3.3)
15
- rake (10.1.0)
9
+ term-ansicolor (= 1.2.2)
10
+ thor (= 0.18.1)
11
+ diff-lcs (1.2.5)
12
+ docile (1.1.5)
13
+ mime-types (2.4.3)
14
+ multi_json (1.10.1)
15
+ polyglot (0.3.5)
16
+ rake (10.4.2)
16
17
  rest-client (1.6.7)
17
18
  mime-types (>= 1.16)
18
- rspec (2.14.1)
19
- rspec-core (~> 2.14.0)
20
- rspec-expectations (~> 2.14.0)
21
- rspec-mocks (~> 2.14.0)
22
- rspec-core (2.14.6)
23
- rspec-expectations (2.14.3)
24
- diff-lcs (>= 1.1.3, < 2.0)
25
- rspec-mocks (2.14.4)
26
- simplecov (0.7.1)
19
+ rspec (3.1.0)
20
+ rspec-core (~> 3.1.0)
21
+ rspec-expectations (~> 3.1.0)
22
+ rspec-mocks (~> 3.1.0)
23
+ rspec-core (3.1.7)
24
+ rspec-support (~> 3.1.0)
25
+ rspec-expectations (3.1.2)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.1.0)
28
+ rspec-mocks (3.1.3)
29
+ rspec-support (~> 3.1.0)
30
+ rspec-support (3.1.2)
31
+ simplecov (0.9.1)
32
+ docile (~> 1.1.0)
27
33
  multi_json (~> 1.0)
28
- simplecov-html (~> 0.7.1)
29
- simplecov-html (0.7.1)
34
+ simplecov-html (~> 0.8.0)
35
+ simplecov-html (0.8.0)
30
36
  term-ansicolor (1.2.2)
31
37
  tins (~> 0.8)
32
38
  thor (0.18.1)
33
- tins (0.12.0)
34
- treetop (1.4.15)
35
- polyglot
36
- polyglot (>= 0.3.1)
39
+ tins (0.13.2)
40
+ treetop (1.5.3)
41
+ polyglot (~> 0.3)
37
42
 
38
43
  PLATFORMS
39
44
  ruby
40
45
 
41
46
  DEPENDENCIES
42
47
  autotest-standalone (~> 4.5)
43
- coveralls
44
- rake (~> 10.1)
45
- rspec (~> 2)
48
+ coveralls (~> 0.7)
49
+ rake (~> 10.4)
50
+ rspec (~> 3.1)
46
51
  simplecov (~> 0.7)
47
52
  treetop (~> 1.4)
@@ -9,4 +9,4 @@ if gbs_file
9
9
  Gobstones::CLI::Runner.run(gbs_file)
10
10
  else
11
11
  puts 'No Gobstones program specified'
12
- end
12
+ end
File without changes
@@ -3,7 +3,7 @@ $:.unshift lib unless $:.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'gobstones'
6
- spec.version = '0.0.1.1'
6
+ spec.version = '0.0.2'
7
7
  spec.licenses = ['GPLv3']
8
8
  spec.authors = ['Nahuel Garbezza']
9
9
  spec.email = ['n.garbezza@gmail.com']
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.required_ruby_version = '>= 1.9.3'
15
15
  spec.required_rubygems_version = '>= 1.3.6'
16
16
 
17
- spec.add_development_dependency 'rspec', '~> 2'
17
+ spec.add_development_dependency 'rspec', '~> 3'
18
18
 
19
19
  spec.files = `git ls-files`.split $/
20
20
  spec.test_files = spec.files.grep %r{^spec/}
@@ -36,4 +36,4 @@
36
36
  0 | | | | | | | | | | 0
37
37
  | | | | | | | | | |
38
38
  +---------+---------+---------+---------+---------+---------+---------+---------+---------+
39
- 0 1 2 3 4 5 6 7 8
39
+ 0 1 2 3 4 5 6 7 8
@@ -103,4 +103,4 @@ module Gobstones
103
103
 
104
104
  end
105
105
 
106
- end
106
+ end
@@ -23,6 +23,8 @@ module Gobstones
23
23
  print_program_result parse_program.evaluate
24
24
  rescue Gobstones::Parser::ParseError => parse_error
25
25
  handle_parse_error parse_error
26
+ rescue Gobstones::Runner::GobstonesTypeError => type_error
27
+ handle_type_error type_error
26
28
  rescue Exception => e
27
29
  # TODO handle more gobstones exceptions
28
30
  raise e
@@ -35,7 +37,7 @@ module Gobstones
35
37
  end
36
38
 
37
39
  def parse_program
38
- @parser.parse(@code)
40
+ @parser.parse @code
39
41
  end
40
42
 
41
43
  def handle_parse_error(parse_error)
@@ -45,8 +47,12 @@ module Gobstones
45
47
  puts "#{'~' * (parse_error.parser.failure_column - 1)}^"
46
48
  end
47
49
 
50
+ def handle_type_error(type_error)
51
+ puts "Type Error: #{type_error.message} occurred in #{type_error.statement}"
52
+ end
53
+
48
54
  end
49
55
 
50
56
  end
51
57
 
52
- end
58
+ end
@@ -1,2 +1,3 @@
1
+ require 'gobstones/extensions/boolean'
1
2
  require 'gobstones/extensions/fixnum'
2
- require 'gobstones/extensions/boolean'
3
+ require 'gobstones/extensions/string'
@@ -14,4 +14,4 @@ class FalseClass
14
14
  Gobstones::Lang::False.new
15
15
  end
16
16
 
17
- end
17
+ end
@@ -6,4 +6,4 @@ class Fixnum
6
6
  Gobstones::Lang::Number.new self
7
7
  end
8
8
 
9
- end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'gobstones/lang/expressions/var_name'
2
+
3
+ class String
4
+
5
+ def to_var_name
6
+ Gobstones::Lang::VarName.new self
7
+ end
8
+
9
+ end
@@ -2,4 +2,4 @@ require 'gobstones/lang/literals/all'
2
2
  require 'gobstones/lang/expressions/all'
3
3
  require 'gobstones/lang/commands/all'
4
4
  require 'gobstones/lang/definitions/all'
5
- require 'gobstones/lang/program'
5
+ require 'gobstones/lang/program'
@@ -1,13 +1,14 @@
1
- require 'gobstones/lang/commands/assignments'
2
1
  require 'gobstones/lang/commands/boom_cmd'
3
2
  require 'gobstones/lang/commands/command_block'
4
3
  require 'gobstones/lang/commands/if_cmd'
5
4
  require 'gobstones/lang/commands/ir_al_origen_cmd'
6
5
  require 'gobstones/lang/commands/mover_cmd'
6
+ require 'gobstones/lang/commands/multiple_assignment'
7
7
  require 'gobstones/lang/commands/poner_cmd'
8
8
  require 'gobstones/lang/commands/procedure_call'
9
9
  require 'gobstones/lang/commands/repeat_with_cmd'
10
10
  require 'gobstones/lang/commands/sacar_cmd'
11
+ require 'gobstones/lang/commands/single_assignment'
11
12
  require 'gobstones/lang/commands/skip_cmd'
12
13
  require 'gobstones/lang/commands/vaciar_tablero_cmd'
13
- require 'gobstones/lang/commands/while_cmd'
14
+ require 'gobstones/lang/commands/while_cmd'
@@ -1,4 +1,5 @@
1
1
  require 'gobstones/runner/errors/boom_error'
2
+ require 'gobstones/modules/equal_by_class'
2
3
 
3
4
  module Gobstones
4
5
 
@@ -6,6 +7,8 @@ module Gobstones
6
7
 
7
8
  class Boom
8
9
 
10
+ include Gobstones::EqualByClass
11
+
9
12
  attr_reader :message
10
13
 
11
14
  def initialize(message)
@@ -13,11 +16,11 @@ module Gobstones
13
16
  end
14
17
 
15
18
  def ==(other)
16
- self.class == other.class &&
19
+ super(other) &&
17
20
  self.message == other.message
18
21
  end
19
22
 
20
- def evaluate(context=nil)
23
+ def evaluate(context)
21
24
  raise Gobstones::Runner::BoomError, message
22
25
  end
23
26
 
@@ -25,4 +28,4 @@ module Gobstones
25
28
 
26
29
  end
27
30
 
28
- end
31
+ end
@@ -4,7 +4,7 @@ module Gobstones
4
4
 
5
5
  module Lang
6
6
 
7
- class CmdBlock
7
+ class CommandBlock
8
8
 
9
9
  include Gobstones::EqualByClass
10
10
 
@@ -1,9 +1,13 @@
1
+ require 'gobstones/modules/equal_by_class'
2
+
1
3
  module Gobstones
2
4
 
3
5
  module Lang
4
6
 
5
7
  class ConditionalCmd
6
8
 
9
+ include Gobstones::EqualByClass
10
+
7
11
  attr_reader :condition, :then_block
8
12
 
9
13
  def initialize(condition, then_block)
@@ -11,7 +15,7 @@ module Gobstones
11
15
  end
12
16
 
13
17
  def ==(other)
14
- self.class == other.class &&
18
+ super(other) &&
15
19
  self.condition == other.condition &&
16
20
  self.then_block == other.then_block
17
21
  end
@@ -16,4 +16,4 @@ module Gobstones
16
16
 
17
17
  end
18
18
 
19
- end
19
+ end
@@ -7,7 +7,9 @@ module Gobstones
7
7
  class Mover < OneArgExpression
8
8
 
9
9
  def evaluate(context)
10
- context.head.move arg.evaluate(context)
10
+ with_evaluated_argument_in(context) do |result|
11
+ context.head.move result
12
+ end
11
13
  end
12
14
 
13
15
  def undo(context)
@@ -15,7 +17,7 @@ module Gobstones
15
17
  end
16
18
 
17
19
  def opposite
18
- Mover.new arg.opposite
20
+ Mover.new argument.opposite
19
21
  end
20
22
 
21
23
  end
@@ -0,0 +1,35 @@
1
+ require 'gobstones/modules/equal_by_class'
2
+
3
+ module Gobstones
4
+
5
+ module Lang
6
+
7
+ class MultipleAssignment
8
+
9
+ include Gobstones::EqualByClass
10
+
11
+ attr_reader :var_tuple, :expression
12
+
13
+ def initialize(var_tuple, expression)
14
+ @var_tuple, @expression = var_tuple, expression
15
+ end
16
+
17
+ def ==(other)
18
+ super(other) &&
19
+ self.var_tuple == other.var_tuple &&
20
+ self.expression == other.expression
21
+ end
22
+
23
+ def evaluate(context)
24
+ # TODO implement as many simple assignments?
25
+ function_call_result = expression.evaluate(context)
26
+ function_call_result.length.times do |index|
27
+ context.set var_tuple.variable_at(index), function_call_result[index]
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -9,7 +9,9 @@ module Gobstones
9
9
  class Poner < OneArgExpression
10
10
 
11
11
  def evaluate(context)
12
- context.head.put arg.evaluate(context)
12
+ with_evaluated_argument_in(context) do |result|
13
+ context.head.put result
14
+ end
13
15
  rescue RuntimeError => e
14
16
  raise Gobstones::Runner::GobstonesTypeError, e.message
15
17
  end
@@ -17,15 +19,17 @@ module Gobstones
17
19
  def undo(context)
18
20
  # TODO maybe the command should use the original context
19
21
  # instead of this one (when it was executed)
20
- context.head.take_out arg.evaluate(context)
22
+ with_evaluated_argument_in(context) do |result|
23
+ context.head.take_out result
24
+ end
21
25
  end
22
26
 
23
27
  def opposite
24
- Sacar.new arg
28
+ Sacar.new argument
25
29
  end
26
30
 
27
31
  end
28
32
 
29
33
  end
30
34
 
31
- end
35
+ end