gobstones 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gobstones
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nahuel Garbezza
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-10 00:00:00.000000000 Z
11
+ date: 2020-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: treetop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.6'
27
41
  description: Ruby implementation of the Gobstones programming language
28
42
  email:
29
43
  - n.garbezza@gmail.com
@@ -34,8 +48,10 @@ extra_rdoc_files: []
34
48
  files:
35
49
  - ".gitignore"
36
50
  - ".rspec"
37
- - ".ruby-version"
51
+ - ".rubocop.yml"
52
+ - ".rubocop_todo.yml"
38
53
  - ".simplecov"
54
+ - ".tool-versions"
39
55
  - ".travis.yml"
40
56
  - CHANGELOG
41
57
  - Gemfile
@@ -51,25 +67,26 @@ files:
51
67
  - lib/gobstones/cli/runner.rb
52
68
  - lib/gobstones/extensions/all.rb
53
69
  - lib/gobstones/extensions/boolean.rb
54
- - lib/gobstones/extensions/fixnum.rb
70
+ - lib/gobstones/extensions/integer.rb
55
71
  - lib/gobstones/extensions/string.rb
56
72
  - lib/gobstones/lang/all.rb
57
73
  - lib/gobstones/lang/commands/all.rb
58
- - lib/gobstones/lang/commands/boom_cmd.rb
74
+ - lib/gobstones/lang/commands/boom.rb
59
75
  - lib/gobstones/lang/commands/command_block.rb
60
- - lib/gobstones/lang/commands/conditional_cmd.rb
61
- - lib/gobstones/lang/commands/if_cmd.rb
62
- - lib/gobstones/lang/commands/ir_al_origen_cmd.rb
63
- - lib/gobstones/lang/commands/mover_cmd.rb
76
+ - lib/gobstones/lang/commands/conditional.rb
77
+ - lib/gobstones/lang/commands/if.rb
78
+ - lib/gobstones/lang/commands/if_then_else.rb
79
+ - lib/gobstones/lang/commands/ir_al_origen.rb
80
+ - lib/gobstones/lang/commands/mover.rb
64
81
  - lib/gobstones/lang/commands/multiple_assignment.rb
65
- - lib/gobstones/lang/commands/poner_cmd.rb
82
+ - lib/gobstones/lang/commands/poner.rb
66
83
  - lib/gobstones/lang/commands/procedure_call.rb
67
- - lib/gobstones/lang/commands/repeat_with_cmd.rb
68
- - lib/gobstones/lang/commands/sacar_cmd.rb
84
+ - lib/gobstones/lang/commands/repeat_with.rb
85
+ - lib/gobstones/lang/commands/sacar.rb
69
86
  - lib/gobstones/lang/commands/single_assignment.rb
70
- - lib/gobstones/lang/commands/skip_cmd.rb
71
- - lib/gobstones/lang/commands/vaciar_tablero_cmd.rb
72
- - lib/gobstones/lang/commands/while_cmd.rb
87
+ - lib/gobstones/lang/commands/skip.rb
88
+ - lib/gobstones/lang/commands/vaciar_tablero.rb
89
+ - lib/gobstones/lang/commands/while.rb
73
90
  - lib/gobstones/lang/definitions/all.rb
74
91
  - lib/gobstones/lang/definitions/definition.rb
75
92
  - lib/gobstones/lang/definitions/definition_call.rb
@@ -85,6 +102,7 @@ files:
85
102
  - lib/gobstones/lang/expressions/boolean_expressions.rb
86
103
  - lib/gobstones/lang/expressions/comparison_expressions.rb
87
104
  - lib/gobstones/lang/expressions/enclosed_by_parens_expression.rb
105
+ - lib/gobstones/lang/expressions/expression.rb
88
106
  - lib/gobstones/lang/expressions/function_call.rb
89
107
  - lib/gobstones/lang/expressions/one_arg_expression.rb
90
108
  - lib/gobstones/lang/expressions/primitive_functions.rb
@@ -92,13 +110,13 @@ files:
92
110
  - lib/gobstones/lang/expressions/type_bound_functions.rb
93
111
  - lib/gobstones/lang/expressions/var_name.rb
94
112
  - lib/gobstones/lang/literals/all.rb
95
- - lib/gobstones/lang/literals/booleans.rb
96
- - lib/gobstones/lang/literals/colors.rb
97
- - lib/gobstones/lang/literals/directions.rb
113
+ - lib/gobstones/lang/literals/boolean.rb
114
+ - lib/gobstones/lang/literals/color.rb
115
+ - lib/gobstones/lang/literals/direction.rb
98
116
  - lib/gobstones/lang/literals/literal.rb
99
117
  - lib/gobstones/lang/literals/number.rb
100
118
  - lib/gobstones/lang/program.rb
101
- - lib/gobstones/modules/equal_by_class.rb
119
+ - lib/gobstones/modules/equality_definition.rb
102
120
  - lib/gobstones/parser/ast/ast.rb
103
121
  - lib/gobstones/parser/grammar/gobstones.treetop
104
122
  - lib/gobstones/parser/parse_error.rb
@@ -117,23 +135,25 @@ files:
117
135
  - lib/gobstones/runner/errors/wrong_arguments_error.rb
118
136
  - lib/gobstones/runner/execution_context.rb
119
137
  - lib/gobstones/runner/head.rb
138
+ - lib/gobstones/runner/program_result.rb
120
139
  - lib/gobstones/type_check_result.rb
121
- - spec/gobstones_lang_test_objects.rb
122
- - spec/lang/commands/boom_cmd_spec.rb
123
- - spec/lang/commands/cmd_block_spec.rb
124
- - spec/lang/commands/if_cmd_spec.rb
125
- - spec/lang/commands/ir_al_origen_cmd_spec.rb
126
- - spec/lang/commands/mover_cmd_spec.rb
140
+ - spec/lang/commands/boom_spec.rb
141
+ - spec/lang/commands/command_block_spec.rb
142
+ - spec/lang/commands/if_spec.rb
143
+ - spec/lang/commands/if_then_else_spec.rb
144
+ - spec/lang/commands/ir_al_origen_spec.rb
145
+ - spec/lang/commands/mover_spec.rb
127
146
  - spec/lang/commands/multiple_assignment_spec.rb
128
- - spec/lang/commands/poner_cmd_spec.rb
147
+ - spec/lang/commands/poner_spec.rb
129
148
  - spec/lang/commands/procedure_call_spec.rb
130
149
  - spec/lang/commands/procedure_spec.rb
131
- - spec/lang/commands/repeat_with_cmd_spec.rb
132
- - spec/lang/commands/sacar_cmd_spec.rb
150
+ - spec/lang/commands/repeat_with_spec.rb
151
+ - spec/lang/commands/sacar_spec.rb
133
152
  - spec/lang/commands/single_assignment_spec.rb
134
- - spec/lang/commands/skip_cmd_spec.rb
135
- - spec/lang/commands/vaciar_tablero_cmd_spec.rb
136
- - spec/lang/commands/while_cmd_spec.rb
153
+ - spec/lang/commands/skip_spec.rb
154
+ - spec/lang/commands/vaciar_tablero_spec.rb
155
+ - spec/lang/commands/while_spec.rb
156
+ - spec/lang/definitions/main_spec.rb
137
157
  - spec/lang/definitions/no_return_statement_spec.rb
138
158
  - spec/lang/definitions/var_tuple_spec.rb
139
159
  - spec/lang/expressions/arithmetic_expressions_spec.rb
@@ -144,10 +164,10 @@ files:
144
164
  - spec/lang/expressions/primitive_functions_spec.rb
145
165
  - spec/lang/expressions/type_bound_functions_spec.rb
146
166
  - spec/lang/expressions/var_name_spec.rb
147
- - spec/lang/literals/booleans_spec.rb
148
- - spec/lang/literals/colors_spec.rb
149
- - spec/lang/literals/directions_spec.rb
150
- - spec/lang/literals/numbers_spec.rb
167
+ - spec/lang/literals/boolean_spec.rb
168
+ - spec/lang/literals/color_spec.rb
169
+ - spec/lang/literals/direction_spec.rb
170
+ - spec/lang/literals/number_spec.rb
151
171
  - spec/matchers/parse_matcher.rb
152
172
  - spec/parser/arithmetic_expressions_spec.rb
153
173
  - spec/parser/assignments_spec.rb
@@ -173,8 +193,10 @@ files:
173
193
  - spec/runner/execution_context_spec.rb
174
194
  - spec/runner/head_spec.rb
175
195
  - spec/spec_helper.rb
196
+ - spec/support/board_assertions.rb
197
+ - spec/support/gobstones_lang_test_objects.rb
176
198
  - spec/type_checker_spec.rb
177
- homepage: http://nahuelgarbezza.com.ar/gobstones-rb/
199
+ homepage: https://github.com/ngarbezza/gobstones-rb
178
200
  licenses:
179
201
  - GPLv3
180
202
  metadata: {}
@@ -186,35 +208,35 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
208
  requirements:
187
209
  - - ">="
188
210
  - !ruby/object:Gem::Version
189
- version: 1.9.3
211
+ version: 2.5.1
190
212
  required_rubygems_version: !ruby/object:Gem::Requirement
191
213
  requirements:
192
214
  - - ">="
193
215
  - !ruby/object:Gem::Version
194
- version: 1.3.6
216
+ version: 2.7.6
195
217
  requirements: []
196
- rubyforge_project:
197
- rubygems_version: 2.4.5
218
+ rubygems_version: 3.1.2
198
219
  signing_key:
199
220
  specification_version: 4
200
221
  summary: Ruby implementation of the Gobstones programming language
201
222
  test_files:
202
- - spec/gobstones_lang_test_objects.rb
203
- - spec/lang/commands/boom_cmd_spec.rb
204
- - spec/lang/commands/cmd_block_spec.rb
205
- - spec/lang/commands/if_cmd_spec.rb
206
- - spec/lang/commands/ir_al_origen_cmd_spec.rb
207
- - spec/lang/commands/mover_cmd_spec.rb
223
+ - spec/lang/commands/boom_spec.rb
224
+ - spec/lang/commands/command_block_spec.rb
225
+ - spec/lang/commands/if_spec.rb
226
+ - spec/lang/commands/if_then_else_spec.rb
227
+ - spec/lang/commands/ir_al_origen_spec.rb
228
+ - spec/lang/commands/mover_spec.rb
208
229
  - spec/lang/commands/multiple_assignment_spec.rb
209
- - spec/lang/commands/poner_cmd_spec.rb
230
+ - spec/lang/commands/poner_spec.rb
210
231
  - spec/lang/commands/procedure_call_spec.rb
211
232
  - spec/lang/commands/procedure_spec.rb
212
- - spec/lang/commands/repeat_with_cmd_spec.rb
213
- - spec/lang/commands/sacar_cmd_spec.rb
233
+ - spec/lang/commands/repeat_with_spec.rb
234
+ - spec/lang/commands/sacar_spec.rb
214
235
  - spec/lang/commands/single_assignment_spec.rb
215
- - spec/lang/commands/skip_cmd_spec.rb
216
- - spec/lang/commands/vaciar_tablero_cmd_spec.rb
217
- - spec/lang/commands/while_cmd_spec.rb
236
+ - spec/lang/commands/skip_spec.rb
237
+ - spec/lang/commands/vaciar_tablero_spec.rb
238
+ - spec/lang/commands/while_spec.rb
239
+ - spec/lang/definitions/main_spec.rb
218
240
  - spec/lang/definitions/no_return_statement_spec.rb
219
241
  - spec/lang/definitions/var_tuple_spec.rb
220
242
  - spec/lang/expressions/arithmetic_expressions_spec.rb
@@ -225,10 +247,10 @@ test_files:
225
247
  - spec/lang/expressions/primitive_functions_spec.rb
226
248
  - spec/lang/expressions/type_bound_functions_spec.rb
227
249
  - spec/lang/expressions/var_name_spec.rb
228
- - spec/lang/literals/booleans_spec.rb
229
- - spec/lang/literals/colors_spec.rb
230
- - spec/lang/literals/directions_spec.rb
231
- - spec/lang/literals/numbers_spec.rb
250
+ - spec/lang/literals/boolean_spec.rb
251
+ - spec/lang/literals/color_spec.rb
252
+ - spec/lang/literals/direction_spec.rb
253
+ - spec/lang/literals/number_spec.rb
232
254
  - spec/matchers/parse_matcher.rb
233
255
  - spec/parser/arithmetic_expressions_spec.rb
234
256
  - spec/parser/assignments_spec.rb
@@ -254,4 +276,6 @@ test_files:
254
276
  - spec/runner/execution_context_spec.rb
255
277
  - spec/runner/head_spec.rb
256
278
  - spec/spec_helper.rb
279
+ - spec/support/board_assertions.rb
280
+ - spec/support/gobstones_lang_test_objects.rb
257
281
  - spec/type_checker_spec.rb
@@ -1 +0,0 @@
1
- 2.2.0
@@ -1,31 +0,0 @@
1
- require 'gobstones/runner/errors/boom_error'
2
- require 'gobstones/modules/equal_by_class'
3
-
4
- module Gobstones
5
-
6
- module Lang
7
-
8
- class Boom
9
-
10
- include Gobstones::EqualByClass
11
-
12
- attr_reader :message
13
-
14
- def initialize(message)
15
- @message = message
16
- end
17
-
18
- def ==(other)
19
- super(other) &&
20
- self.message == other.message
21
- end
22
-
23
- def evaluate(context)
24
- raise Gobstones::Runner::BoomError, message
25
- end
26
-
27
- end
28
-
29
- end
30
-
31
- end
@@ -1,31 +0,0 @@
1
- require 'gobstones/modules/equal_by_class'
2
-
3
- module Gobstones
4
-
5
- module Lang
6
-
7
- class ConditionalCmd
8
-
9
- include Gobstones::EqualByClass
10
-
11
- attr_reader :condition, :then_block
12
-
13
- def initialize(condition, then_block)
14
- @condition, @then_block = condition, then_block
15
- end
16
-
17
- def ==(other)
18
- super(other) &&
19
- self.condition == other.condition &&
20
- self.then_block == other.then_block
21
- end
22
-
23
- def evaluate_condition(context)
24
- condition.evaluate context
25
- end
26
-
27
- end
28
-
29
- end
30
-
31
- end
@@ -1,38 +0,0 @@
1
- require 'gobstones/lang/commands/conditional_cmd'
2
-
3
- module Gobstones
4
-
5
- module Lang
6
-
7
- class IfCmd < ConditionalCmd
8
-
9
- def evaluate(context)
10
- evaluate_condition(context).if_true(then_block, context)
11
- end
12
-
13
- end
14
-
15
- class IfElseCmd < IfCmd
16
-
17
- attr_reader :else_block
18
-
19
- def initialize(condition, then_block, else_block)
20
- super(condition, then_block)
21
- @else_block = else_block
22
- end
23
-
24
- def ==(other)
25
- super(other) && self.else_block == other.else_block
26
- end
27
-
28
- def evaluate(context)
29
- cond = evaluate_condition context
30
- cond.if_true then_block, context
31
- cond.if_false else_block, context
32
- end
33
-
34
- end
35
-
36
- end
37
-
38
- end
@@ -1,19 +0,0 @@
1
- require 'gobstones/modules/equal_by_class'
2
-
3
- module Gobstones
4
-
5
- module Lang
6
-
7
- class IrAlOrigen
8
-
9
- include Gobstones::EqualByClass
10
-
11
- def evaluate(context)
12
- context.head.go_to_origin
13
- end
14
-
15
- end
16
-
17
- end
18
-
19
- end
@@ -1,27 +0,0 @@
1
- require 'gobstones/lang/expressions/one_arg_expression'
2
-
3
- module Gobstones
4
-
5
- module Lang
6
-
7
- class Mover < OneArgExpression
8
-
9
- def evaluate(context)
10
- with_evaluated_argument_in(context) do |result|
11
- context.head.move result
12
- end
13
- end
14
-
15
- def undo(context)
16
- opposite.evaluate context
17
- end
18
-
19
- def opposite
20
- Mover.new argument.opposite
21
- end
22
-
23
- end
24
-
25
- end
26
-
27
- end
@@ -1,35 +0,0 @@
1
- require 'gobstones/lang/expressions/one_arg_expression'
2
- require 'gobstones/lang/commands/sacar_cmd'
3
- require 'gobstones/runner/errors/gobstones_type_error'
4
-
5
- module Gobstones
6
-
7
- module Lang
8
-
9
- class Poner < OneArgExpression
10
-
11
- def evaluate(context)
12
- with_evaluated_argument_in(context) do |result|
13
- context.head.put result
14
- end
15
- rescue RuntimeError => e
16
- raise Gobstones::Runner::GobstonesTypeError, e.message
17
- end
18
-
19
- def undo(context)
20
- # TODO maybe the command should use the original context
21
- # instead of this one (when it was executed)
22
- with_evaluated_argument_in(context) do |result|
23
- context.head.take_out result
24
- end
25
- end
26
-
27
- def opposite
28
- Sacar.new argument
29
- end
30
-
31
- end
32
-
33
- end
34
-
35
- end
@@ -1,77 +0,0 @@
1
- require 'gobstones/lang/commands/single_assignment'
2
- require 'gobstones/lang/commands/command_block'
3
- require 'gobstones/lang/commands/while_cmd'
4
- require 'gobstones/lang/expressions/comparison_expressions'
5
- require 'gobstones/lang/expressions/primitive_functions'
6
- require 'gobstones/runner/errors/gobstones_runtime_error'
7
- require 'gobstones/runner/errors/gobstones_type_error'
8
- require 'gobstones/modules/equal_by_class'
9
-
10
- module Gobstones
11
-
12
- module Lang
13
-
14
- class RepeatWithCmd
15
-
16
- include Gobstones::EqualByClass
17
-
18
- attr_reader :var_name, :range_min, :range_max, :cmd_block
19
-
20
- def initialize(var_name, range_min, range_max, cmd_block)
21
- @var_name = var_name
22
- @range_min = range_min
23
- @range_max = range_max
24
- @cmd_block = cmd_block
25
- end
26
-
27
- def ==(other)
28
- super(other) &&
29
- self.var_name == other.var_name &&
30
- self.range_min == other.range_min &&
31
- self.range_max == other.range_max &&
32
- self.cmd_block == other.cmd_block
33
- end
34
-
35
- def evaluate(context)
36
- validate_range_values context
37
- validate_index_variable_not_defined context
38
- while_based_equivalent_cmd.evaluate context
39
- clear_index_variable_from context
40
- end
41
-
42
- private
43
-
44
- def clear_index_variable_from(context)
45
- context.clear var_name
46
- end
47
-
48
- def validate_range_values(context)
49
- raise Gobstones::Runner::GobstonesTypeError, "types don't match in range values" \
50
- unless range_min.evaluate(context).same_type_as(range_max.evaluate(context))
51
- end
52
-
53
- def validate_index_variable_not_defined(context)
54
- raise Gobstones::Runner::GobstonesRuntimeError, "index variable can't be used because it's already defined" \
55
- if context.has_variable_named?(var_name.name)
56
- end
57
-
58
- def while_based_equivalent_cmd
59
- #
60
- # repeatWith var in min..max block
61
- # is equivalent to
62
- # if (min < max) { var := min; while (var < max) { block; var := siguiente(var) }; block }
63
- #
64
- assign_cmd = SingleAssignment.new var_name, range_min
65
- while_cond = LessThan.new var_name, range_max
66
- increment = SingleAssignment.new var_name, Siguiente.new(var_name)
67
- while_block = CommandBlock.new [cmd_block, increment]
68
- while_cmd = WhileCmd.new while_cond, while_block
69
- if_cond = LessThan.new range_min, range_max
70
- IfCmd.new if_cond, CommandBlock.new([assign_cmd, while_cmd, cmd_block])
71
- end
72
-
73
- end
74
-
75
- end
76
-
77
- end