nil 1.0.8 → 1.0.9

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.
@@ -1,3 +1,6 @@
1
+ # 1.0.9
2
+ - Bug fixes
3
+
1
4
  # 1.0.8
2
5
  - Make ASCII mode not output newline by default
3
6
 
data/TODO.md CHANGED
@@ -1,3 +1,7 @@
1
1
  # Future Features
2
2
 
3
3
  - Passing parameters to macros.
4
+
5
+ # Bugs
6
+
7
+ - Input doesn't work
@@ -29,17 +29,33 @@ module Nil
29
29
  when '<'
30
30
  "sp -= #{count}\n"
31
31
  when '['
32
- "while stack[sp] != 0\n"
32
+ s = ""
33
+ count.times do
34
+ s << "while stack[sp] != 0\n"
35
+ end
36
+ s
33
37
  when ']'
34
- "end\n"
38
+ s = ""
39
+ count.times do
40
+ s << "end\n"
41
+ end
42
+ s
35
43
  when '.'
36
- if @@mode == 'num'
37
- "puts stack[sp]\n"
38
- else
39
- "print stack[sp].chr\n"
44
+ s = ""
45
+ count.times do
46
+ if @@mode == 'num'
47
+ s << "puts stack[sp]\n"
48
+ else
49
+ s << "print stack[sp].chr\n"
50
+ end
40
51
  end
52
+ s
41
53
  when ','
42
- "stack[sp] = gets[0]\n"
54
+ s = ""
55
+ count.times do
56
+ s << "stack[sp] = gets[0]\n"
57
+ end
58
+ s
43
59
  end
44
60
  end
45
61
 
@@ -60,6 +60,8 @@ module Nil
60
60
 
61
61
  compiled_code = interpret_mode_definition(compiled_code)
62
62
 
63
+ Nil::Interpreter.mode = @mode
64
+
63
65
  compiled_code = expand_included_files(compiled_code)
64
66
 
65
67
  compiled_code = strip_comments(compiled_code)
@@ -1,3 +1,3 @@
1
1
  module Nil
2
- VERSION = "1.0.8"
2
+ VERSION = "1.0.9"
3
3
  end
@@ -11,20 +11,28 @@ RB
11
11
  context "Interpreter" do
12
12
  setup { Nil::Interpreter.new }
13
13
 
14
- asserts("invalid characters in code cause failure") { topic.compile "a++", 'num' }.raises SyntaxError
14
+ context "General code generation" do
15
+ asserts("invalid characters in code cause failure") { topic.compile "a++", 'num' }.raises SyntaxError
15
16
 
16
- asserts("creates boilerplate code") { topic.compiled_ruby == BOILERPLATE }
17
+ asserts("creates boilerplate code") { topic.compiled_ruby == BOILERPLATE }
18
+ end
17
19
 
18
- asserts("handles . in numerical mode") { topic.compile('.', 'num') == (BOILERPLATE + "puts stack[sp]\n") }
19
- asserts("handles . in ascii mode") { topic.compile('.', 'ascii') == (BOILERPLATE + "puts stack[sp].chr\n") }
20
- asserts("handles ,") { topic.compile(',', 'num') == (BOILERPLATE + "stack[sp] = gets[0]\n") }
21
- asserts("handles >") { topic.compile('>', 'num') == (BOILERPLATE + "sp += 1\n") }
22
- asserts("handles <") { topic.compile('<', 'num') == (BOILERPLATE + "sp -= 1\n") }
23
- asserts("handles +") { topic.compile('+', 'num') == (BOILERPLATE + "stack[sp] += 1\n") }
24
- asserts("handles -") { topic.compile('-', 'num') == (BOILERPLATE + "stack[sp] -= 1\n") }
25
- asserts("handles [") { topic.compile('[', 'num') == (BOILERPLATE + "while stack[sp] != 0\n" ) }
26
- asserts("handles ]") { topic.compile(']', 'num') == (BOILERPLATE + "end\n" ) }
20
+ context "Modes" do
21
+ asserts("handles . in numerical mode") { topic.compile('.', 'num') == (BOILERPLATE + "puts stack[sp]\n") }
22
+ asserts("handles . in ascii mode") { topic.compile('.', 'ascii') == (BOILERPLATE + "print stack[sp].chr\n") }
23
+ end
27
24
 
25
+ context "General operator handling" do
26
+ asserts("handles ,") { topic.compile(',', 'num') == (BOILERPLATE + "stack[sp] = gets[0]\n") }
27
+ asserts("handles >") { topic.compile('>', 'num') == (BOILERPLATE + "sp += 1\n") }
28
+ asserts("handles <") { topic.compile('<', 'num') == (BOILERPLATE + "sp -= 1\n") }
29
+ asserts("handles +") { topic.compile('+', 'num') == (BOILERPLATE + "stack[sp] += 1\n") }
30
+ asserts("handles -") { topic.compile('-', 'num') == (BOILERPLATE + "stack[sp] -= 1\n") }
31
+ asserts("handles [") { topic.compile('[', 'num') == (BOILERPLATE + "while stack[sp] != 0\n" ) }
32
+ asserts("handles ]") { topic.compile(']', 'num') == (BOILERPLATE + "end\n" ) }
33
+ end
34
+
35
+ context "Advanced operator handling" do
28
36
  asserts("handles multiple operators smartly") do
29
37
  code = topic.compile "++++---->>>><<<<", 'num'
30
38
  code == BOILERPLATE + <<CODE
@@ -46,12 +54,15 @@ stack[sp] += 3
46
54
  puts stack[sp]
47
55
  CODE
48
56
  end
57
+ end
49
58
 
50
- denies("error raised when brackets are inside subroutines") do
51
- code = ":sub{+++[-]}sub:"
52
- code = (Nil::MacroParser.new).parse code
53
- topic.compile(code)
54
- end.raises SyntaxError
59
+ context "Bug testing" do
60
+ denies("error raised when brackets are inside subroutines") do
61
+ code = ":sub{+++[-]}sub:"
62
+ code = (Nil::MacroParser.new).parse code
63
+ topic.compile(code)
64
+ end.raises SyntaxError
65
+ end
55
66
 
56
67
  end
57
68
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nil
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-02 00:00:00.000000000 Z
12
+ date: 2012-06-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: trollop
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  version: '0'
73
73
  requirements: []
74
74
  rubyforge_project:
75
- rubygems_version: 1.8.23
75
+ rubygems_version: 1.8.24
76
76
  signing_key:
77
77
  specification_version: 3
78
78
  summary: A macro language/interpreter for brain****