nil 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -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****