apricot 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +1 -0
  5. data/Gemfile.lock +229 -11
  6. data/README.md +46 -29
  7. data/Rakefile +1 -1
  8. data/apricot.gemspec +7 -3
  9. data/benchmarks/factorial.rb +51 -0
  10. data/benchmarks/interpolate.rb +20 -0
  11. data/bin/apricot +5 -23
  12. data/examples/bot.apr +1 -4
  13. data/examples/cinch-bot.apr +3 -3
  14. data/examples/sinatra.apr +9 -0
  15. data/kernel/core.apr +124 -75
  16. data/kernel/repl.apr +37 -0
  17. data/lib/apricot.rb +7 -26
  18. data/lib/apricot/boot.rb +24 -0
  19. data/lib/apricot/code_loader.rb +108 -0
  20. data/lib/apricot/compiler.rb +265 -32
  21. data/lib/apricot/generator.rb +10 -3
  22. data/lib/apricot/identifier.rb +25 -10
  23. data/lib/apricot/list.rb +28 -41
  24. data/lib/apricot/macroexpand.rb +14 -8
  25. data/lib/apricot/misc.rb +2 -1
  26. data/lib/apricot/namespace.rb +20 -3
  27. data/lib/apricot/{parser.rb → reader.rb} +221 -194
  28. data/lib/apricot/repl.rb +67 -24
  29. data/lib/apricot/ruby_ext.rb +27 -16
  30. data/lib/apricot/scopes.rb +159 -0
  31. data/lib/apricot/seq.rb +43 -1
  32. data/lib/apricot/special_forms.rb +16 -695
  33. data/lib/apricot/special_forms/def.rb +32 -0
  34. data/lib/apricot/special_forms/do.rb +23 -0
  35. data/lib/apricot/special_forms/dot.rb +112 -0
  36. data/lib/apricot/special_forms/fn.rb +342 -0
  37. data/lib/apricot/special_forms/if.rb +31 -0
  38. data/lib/apricot/special_forms/let.rb +8 -0
  39. data/lib/apricot/special_forms/loop.rb +10 -0
  40. data/lib/apricot/special_forms/quote.rb +9 -0
  41. data/lib/apricot/special_forms/recur.rb +26 -0
  42. data/lib/apricot/special_forms/try.rb +146 -0
  43. data/lib/apricot/variables.rb +65 -0
  44. data/lib/apricot/version.rb +1 -1
  45. data/spec/compiler_spec.rb +53 -450
  46. data/spec/fn_spec.rb +206 -0
  47. data/spec/list_spec.rb +1 -1
  48. data/spec/reader_spec.rb +349 -0
  49. data/spec/spec_helper.rb +40 -4
  50. data/spec/special_forms_spec.rb +203 -0
  51. metadata +99 -133
  52. data/lib/apricot/ast.rb +0 -3
  53. data/lib/apricot/ast/identifier.rb +0 -111
  54. data/lib/apricot/ast/list.rb +0 -99
  55. data/lib/apricot/ast/literals.rb +0 -240
  56. data/lib/apricot/ast/node.rb +0 -45
  57. data/lib/apricot/ast/scopes.rb +0 -147
  58. data/lib/apricot/ast/toplevel.rb +0 -66
  59. data/lib/apricot/ast/variables.rb +0 -64
  60. data/lib/apricot/printers.rb +0 -12
  61. data/lib/apricot/stages.rb +0 -60
  62. data/spec/parser_spec.rb +0 -312
@@ -1,10 +1,46 @@
1
1
  require 'bundler/setup'
2
2
  require 'rspec'
3
3
 
4
- unless Rubinius.ruby19?
5
- puts "Error: Apricot must be run in Ruby 1.9 mode"
6
- exit 1
7
- end
4
+ # require 'simplecov'
5
+
6
+ # SimpleCov.configure do
7
+ # add_filter 'spec/'
8
+ # add_filter 'kernel/' # SimpleCov doesn't understand Apricot code
9
+
10
+ # add_group 'Compiler' do |src|
11
+ # ['code_loader.rb',
12
+ # 'compiler.rb',
13
+ # 'errors.rb',
14
+ # 'generator.rb',
15
+ # 'scopes.rb',
16
+ # 'variables.rb',
17
+ # 'reader.rb'].any? {|f| src.filename.end_with? "apricot/#{f}" }
18
+ # end
19
+ # add_group 'Special Forms', 'special_forms'
20
+ # add_group 'Runtime' do |src|
21
+ # ['boot.rb',
22
+ # 'cons.rb',
23
+ # 'identifier.rb',
24
+ # 'list.rb',
25
+ # 'macroexpand.rb',
26
+ # 'misc.rb',
27
+ # 'namespace.rb',
28
+ # 'ruby_ext.rb',
29
+ # 'seq.rb'].any? {|f| src.filename.end_with? "apricot/#{f}" }
30
+ # end
31
+ # end
32
+ # SimpleCov.start unless ENV['TRAVIS']
8
33
 
9
34
  require 'apricot'
10
35
  include Apricot
36
+
37
+ # Common spec helper functions
38
+ module CompilerSpec
39
+ def apr(code)
40
+ Apricot::Compiler.eval code
41
+ end
42
+
43
+ def bad_apr(code)
44
+ expect { apr(code) }.to raise_error(CompileError)
45
+ end
46
+ end
@@ -0,0 +1,203 @@
1
+ describe 'Apricot' do
2
+ include CompilerSpec
3
+
4
+ it 'compiles def forms' do
5
+ apr('(def A 1)')
6
+ A.should == 1
7
+
8
+ B = Module.new
9
+ apr('(def B::C 1)')
10
+ B::C.should == 1
11
+
12
+ apr('(def a 1)')
13
+ Apricot.current_namespace.get_var(:a).should == 1
14
+ end
15
+
16
+ it 'does not compile invalid def forms' do
17
+ bad_apr '(def)'
18
+ bad_apr '(def A 1 2)'
19
+ bad_apr '(def 1 2)'
20
+ bad_apr '(def self 1)'
21
+ end
22
+
23
+ it 'compiles do forms' do
24
+ apr('(do)').should == nil
25
+ apr('(do 1 2 3)').should == 3
26
+ end
27
+
28
+ it 'compiles send forms' do
29
+ apr('(. 1 class)').should == Fixnum
30
+ apr('(. 1 (class))').should == Fixnum
31
+ apr('(. "foo" append "bar")').should == 'foobar'
32
+ apr('(. "foo" (append "bar"))').should == 'foobar'
33
+ end
34
+
35
+ it 'compiles send forms with block args' do
36
+ apr('(. [1] map | :to_s)').should == ['1']
37
+ apr('(. [1] (map | :to_s))').should == ['1']
38
+ apr('(. [1] map | #(. % to_s))').should == ['1']
39
+ end
40
+
41
+ it 'compiles send forms with splat args' do
42
+ apr('(. "foo bar baz" split & [" " 2])').should == ['foo', 'bar baz']
43
+ apr('(. "foo bar baz" (split & [" " 2]))').should == ['foo', 'bar baz']
44
+ end
45
+
46
+ it 'compiles new send forms' do
47
+ apr('(. Array new 3 1)').should == [1, 1, 1]
48
+ end
49
+
50
+ it 'does not compile invalid send forms' do
51
+ bad_apr '(.)'
52
+ bad_apr '(. 1)'
53
+ bad_apr '(. 1 ())'
54
+ bad_apr '(. 1 1)'
55
+ bad_apr '(. [1] map |)'
56
+ bad_apr '(. "" split &)'
57
+ end
58
+
59
+ it 'compiles shorthand send forms' do
60
+ apr('(.class 1)').should == Fixnum
61
+ apr('(.append "foo" "bar")').should == 'foobar'
62
+ end
63
+
64
+ it 'compiles shorthand send forms with block args' do
65
+ apr('(.map [1] | :to_s)').should == ['1']
66
+ apr('(.map [1] | #(.to_s %))').should == ['1']
67
+ end
68
+
69
+ it 'compiles shorthand send forms with splat args' do
70
+ apr('(.split "foo bar baz" & [" " 2])').should == ['foo', 'bar baz']
71
+ end
72
+
73
+ it 'macroexpands shorthand send forms' do
74
+ form = apr "'(.meth recv arg1 arg2)"
75
+ ex = Apricot.macroexpand(form)
76
+ ex.should == List[*[:'.', :recv, :meth, :arg1, :arg2].map {|x| Identifier.intern(x) }]
77
+ end
78
+
79
+ it 'compiles shorthand new send forms' do
80
+ apr('(Array. 3 1)').should == [1, 1, 1]
81
+ end
82
+
83
+ it 'compiles shorthand new send forms with block args' do
84
+ apr('(Array. 3 | :to_s)').should == ['0', '1', '2']
85
+ apr('(Array. 3 | #(.to_s %))').should == ['0', '1', '2']
86
+ end
87
+
88
+ it 'macroexpands shorthand new send forms' do
89
+ form = apr "'(Klass. arg1 arg2)"
90
+ ex = Apricot.macroexpand(form)
91
+ ex.should == List[*[:'.', :Klass, :new, :arg1, :arg2].map {|x| Identifier.intern(x) }]
92
+ end
93
+
94
+ it 'compiles if forms' do
95
+ apr('(if true 1 2)').should == 1
96
+ apr('(if false 1 2)').should == 2
97
+ apr('(if true 1)').should == 1
98
+ apr('(if false 1)').should == nil
99
+ end
100
+
101
+ it 'does not compile invalid if forms' do
102
+ bad_apr '(if)'
103
+ bad_apr '(if true)'
104
+ bad_apr '(if true 1 2 3)'
105
+ end
106
+
107
+ it 'compiles let forms' do
108
+ apr('(let [])').should == nil
109
+ apr('(let [] 1 2 3)').should == 3
110
+ apr('(let [a 1] a)').should == 1
111
+ apr('(let [a 1 b a] b)').should == 1
112
+ end
113
+
114
+ it 'compiles nested let forms' do
115
+ apr('(let [a 1] (let [a 2] a))').should == 2
116
+ apr('(let [a 1] (let [b 2] a))').should == 1
117
+ apr('(let [a 1] (let [a 2]) a)').should == 1
118
+ apr('(let [a 1] (let [b a] b))').should == 1
119
+ end
120
+
121
+ it 'does not compile invalid let forms' do
122
+ bad_apr '(let)'
123
+ bad_apr '(let 1)'
124
+ bad_apr '(let [a 1 b])'
125
+ bad_apr '(let [1 2])'
126
+ end
127
+
128
+ it 'compiles loop forms' do
129
+ apr('(loop [])').should == nil
130
+ apr('(loop [a 1] a)').should == 1
131
+ apr('(loop [a true] (if a (recur false) 1))').should == 1
132
+ end
133
+
134
+ it 'does not compile invalid loop forms' do
135
+ bad_apr '(loop)'
136
+ bad_apr '(loop 1)'
137
+ bad_apr '(loop [a 1 b])'
138
+ bad_apr '(loop [1 2])'
139
+ end
140
+
141
+ it 'compiles quote forms' do
142
+ apr('(quote quote)').should == Identifier.intern(:quote)
143
+ end
144
+
145
+ it 'does not compile invalid quote forms' do
146
+ bad_apr '(quote)'
147
+ bad_apr '(quote 1 2)'
148
+ end
149
+
150
+ it 'does not compile invalid recur forms' do
151
+ bad_apr '(recur)'
152
+ bad_apr '(loop [] (recur 1))'
153
+ bad_apr '(fn [[x 1]] (recur))'
154
+ bad_apr '(fn [x & y] (recur 1))'
155
+ bad_apr '(fn [x & y] (recur 1 2 3))'
156
+ end
157
+
158
+ it 'compiles try forms' do
159
+ apr('(try)').should == nil
160
+ apr('(try 1 2 3)').should == 3
161
+ apr('(try 1 (rescue e 2))').should == 1
162
+ apr('(try (Kernel/raise "") 1 (rescue e 2))').should == 2
163
+ apr('(try (Kernel/raise "") 1 (rescue [e] 2))').should == 2
164
+ apr('(try (Kernel/raise ArgumentError) 1 (rescue [e TypeError] 2) (rescue [e ArgumentError] 3) (rescue e 4))').should == 3
165
+ apr('(try (Kernel/raise "") 1 (rescue e e))').should be_a(RuntimeError)
166
+ expect { apr '(try (Kernel/raise ""))' }.to raise_error(RuntimeError)
167
+ expect { apr '(try (Kernel/raise ArgumentError) 1 (rescue [e TypeError] 2))' }.to raise_error(ArgumentError)
168
+ end
169
+
170
+ it 'compiles try forms with ensure clauses' do
171
+ apr(<<-CODE).should == []
172
+ (let [a [1]]
173
+ (try
174
+ 2
175
+ (ensure (. a pop)))
176
+ a)
177
+ CODE
178
+ apr(<<-CODE).should == []
179
+ (let [a [1]]
180
+ (try
181
+ (Kernel/raise "")
182
+ (rescue e 2)
183
+ (ensure (. a pop)))
184
+ a)
185
+ CODE
186
+ apr(<<-CODE).should == []
187
+ (let [a [1]]
188
+ (try
189
+ (try
190
+ (Kernel/raise "")
191
+ (ensure (. a pop)))
192
+ (rescue e 2))
193
+ a)
194
+ CODE
195
+ end
196
+
197
+ it 'does not compile invalid try forms' do
198
+ bad_apr '(try (ensure) 1)'
199
+ bad_apr '(try (rescue e e) 1)'
200
+ bad_apr '(try (rescue 1 2))'
201
+ bad_apr '(try (rescue [1] 2))'
202
+ end
203
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apricot
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.0.1
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Curtis McEnroe
@@ -10,179 +9,146 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-04-13 00:00:00.000000000 Z
12
+ date: 2013-10-06 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
15
+ type: :runtime
16
+ name: rubysl
16
17
  prerelease: false
17
18
  requirement: !ruby/object:Gem::Requirement
18
19
  requirements:
19
- - - ~>
20
+ - - "~>"
20
21
  - !ruby/object:Gem::Version
21
- version: 10.0.3
22
- none: false
22
+ version: '2.0'
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - ~>
25
+ - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 10.0.3
28
- none: false
29
- name: rake
30
- type: :development
27
+ version: '2.0'
31
28
  - !ruby/object:Gem::Dependency
29
+ type: :development
30
+ name: rake
32
31
  prerelease: false
33
32
  requirement: !ruby/object:Gem::Requirement
34
33
  requirements:
35
- - - ~>
34
+ - - "~>"
36
35
  - !ruby/object:Gem::Version
37
- version: 2.13.0
38
- none: false
36
+ version: 10.1.0
39
37
  version_requirements: !ruby/object:Gem::Requirement
40
38
  requirements:
41
- - - ~>
39
+ - - "~>"
42
40
  - !ruby/object:Gem::Version
43
- version: 2.13.0
44
- none: false
45
- name: rspec
41
+ version: 10.1.0
42
+ - !ruby/object:Gem::Dependency
46
43
  type: :development
44
+ name: rspec
45
+ prerelease: false
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: 2.14.0
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: 2.14.0
47
56
  description: A compiler for a Clojure-like programming language on the Rubinius VM
48
57
  email:
49
58
  - programble@gmail.com
50
59
  - scott@scott-olson.org
51
60
  executables:
52
- - !binary |-
53
- YXByaWNvdA==
61
+ - apricot
54
62
  extensions: []
55
63
  extra_rdoc_files: []
56
64
  files:
57
- - !binary |-
58
- LmdpdGlnbm9yZQ==
59
- - !binary |-
60
- LnJzcGVj
61
- - !binary |-
62
- LnJ1YnktdmVyc2lvbg==
63
- - !binary |-
64
- LnRyYXZpcy55bWw=
65
- - !binary |-
66
- R2VtZmlsZQ==
67
- - !binary |-
68
- R2VtZmlsZS5sb2Nr
69
- - !binary |-
70
- UkVBRE1FLm1k
71
- - !binary |-
72
- UmFrZWZpbGU=
73
- - !binary |-
74
- YXByaWNvdC5nZW1zcGVj
75
- - !binary |-
76
- YmluL2Fwcmljb3Q=
77
- - !binary |-
78
- ZXhhbXBsZXMvYm90LmFwcg==
79
- - !binary |-
80
- ZXhhbXBsZXMvY2luY2gtYm90LmFwcg==
81
- - !binary |-
82
- ZXhhbXBsZXMvaGFub2kuYXBy
83
- - !binary |-
84
- ZXhhbXBsZXMvaGVsbG8uYXBy
85
- - !binary |-
86
- ZXhhbXBsZXMvcGxvdC5hcHI=
87
- - !binary |-
88
- ZXhhbXBsZXMvcXVpbmUuYXBy
89
- - !binary |-
90
- a2VybmVsL2NvcmUuYXBy
91
- - !binary |-
92
- bGliL2Fwcmljb3QucmI=
93
- - !binary |-
94
- bGliL2Fwcmljb3QvYXN0LnJi
95
- - !binary |-
96
- bGliL2Fwcmljb3QvYXN0L2lkZW50aWZpZXIucmI=
97
- - !binary |-
98
- bGliL2Fwcmljb3QvYXN0L2xpc3QucmI=
99
- - !binary |-
100
- bGliL2Fwcmljb3QvYXN0L2xpdGVyYWxzLnJi
101
- - !binary |-
102
- bGliL2Fwcmljb3QvYXN0L25vZGUucmI=
103
- - !binary |-
104
- bGliL2Fwcmljb3QvYXN0L3Njb3Blcy5yYg==
105
- - !binary |-
106
- bGliL2Fwcmljb3QvYXN0L3RvcGxldmVsLnJi
107
- - !binary |-
108
- bGliL2Fwcmljb3QvYXN0L3ZhcmlhYmxlcy5yYg==
109
- - !binary |-
110
- bGliL2Fwcmljb3QvY29tcGlsZXIucmI=
111
- - !binary |-
112
- bGliL2Fwcmljb3QvY29ucy5yYg==
113
- - !binary |-
114
- bGliL2Fwcmljb3QvZXJyb3JzLnJi
115
- - !binary |-
116
- bGliL2Fwcmljb3QvZ2VuZXJhdG9yLnJi
117
- - !binary |-
118
- bGliL2Fwcmljb3QvaWRlbnRpZmllci5yYg==
119
- - !binary |-
120
- bGliL2Fwcmljb3QvbGlzdC5yYg==
121
- - !binary |-
122
- bGliL2Fwcmljb3QvbWFjcm9leHBhbmQucmI=
123
- - !binary |-
124
- bGliL2Fwcmljb3QvbWlzYy5yYg==
125
- - !binary |-
126
- bGliL2Fwcmljb3QvbmFtZXNwYWNlLnJi
127
- - !binary |-
128
- bGliL2Fwcmljb3QvcGFyc2VyLnJi
129
- - !binary |-
130
- bGliL2Fwcmljb3QvcHJpbnRlcnMucmI=
131
- - !binary |-
132
- bGliL2Fwcmljb3QvcmVwbC5yYg==
133
- - !binary |-
134
- bGliL2Fwcmljb3QvcnVieV9leHQucmI=
135
- - !binary |-
136
- bGliL2Fwcmljb3Qvc2VxLnJi
137
- - !binary |-
138
- bGliL2Fwcmljb3Qvc3BlY2lhbF9mb3Jtcy5yYg==
139
- - !binary |-
140
- bGliL2Fwcmljb3Qvc3RhZ2VzLnJi
141
- - !binary |-
142
- bGliL2Fwcmljb3QvdmVyc2lvbi5yYg==
143
- - !binary |-
144
- c3BlYy9jb21waWxlcl9zcGVjLnJi
145
- - !binary |-
146
- c3BlYy9pZGVudGlmaWVyX3NwZWMucmI=
147
- - !binary |-
148
- c3BlYy9saXN0X3NwZWMucmI=
149
- - !binary |-
150
- c3BlYy9wYXJzZXJfc3BlYy5yYg==
151
- - !binary |-
152
- c3BlYy9zcGVjX2hlbHBlci5yYg==
153
- homepage: https://github.com/programble/apricot
65
+ - ".gitignore"
66
+ - ".rspec"
67
+ - ".ruby-version"
68
+ - ".travis.yml"
69
+ - Gemfile
70
+ - Gemfile.lock
71
+ - README.md
72
+ - Rakefile
73
+ - apricot.gemspec
74
+ - benchmarks/factorial.rb
75
+ - benchmarks/interpolate.rb
76
+ - bin/apricot
77
+ - examples/bot.apr
78
+ - examples/cinch-bot.apr
79
+ - examples/hanoi.apr
80
+ - examples/hello.apr
81
+ - examples/plot.apr
82
+ - examples/quine.apr
83
+ - examples/sinatra.apr
84
+ - kernel/core.apr
85
+ - kernel/repl.apr
86
+ - lib/apricot.rb
87
+ - lib/apricot/boot.rb
88
+ - lib/apricot/code_loader.rb
89
+ - lib/apricot/compiler.rb
90
+ - lib/apricot/cons.rb
91
+ - lib/apricot/errors.rb
92
+ - lib/apricot/generator.rb
93
+ - lib/apricot/identifier.rb
94
+ - lib/apricot/list.rb
95
+ - lib/apricot/macroexpand.rb
96
+ - lib/apricot/misc.rb
97
+ - lib/apricot/namespace.rb
98
+ - lib/apricot/reader.rb
99
+ - lib/apricot/repl.rb
100
+ - lib/apricot/ruby_ext.rb
101
+ - lib/apricot/scopes.rb
102
+ - lib/apricot/seq.rb
103
+ - lib/apricot/special_forms.rb
104
+ - lib/apricot/special_forms/def.rb
105
+ - lib/apricot/special_forms/do.rb
106
+ - lib/apricot/special_forms/dot.rb
107
+ - lib/apricot/special_forms/fn.rb
108
+ - lib/apricot/special_forms/if.rb
109
+ - lib/apricot/special_forms/let.rb
110
+ - lib/apricot/special_forms/loop.rb
111
+ - lib/apricot/special_forms/quote.rb
112
+ - lib/apricot/special_forms/recur.rb
113
+ - lib/apricot/special_forms/try.rb
114
+ - lib/apricot/variables.rb
115
+ - lib/apricot/version.rb
116
+ - spec/compiler_spec.rb
117
+ - spec/fn_spec.rb
118
+ - spec/identifier_spec.rb
119
+ - spec/list_spec.rb
120
+ - spec/reader_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/special_forms_spec.rb
123
+ homepage: https://github.com/apricot-lang/apricot
154
124
  licenses:
155
125
  - ISC
126
+ metadata: {}
156
127
  post_install_message:
157
128
  rdoc_options: []
158
129
  require_paths:
159
130
  - lib
160
131
  required_ruby_version: !ruby/object:Gem::Requirement
161
132
  requirements:
162
- - - ! '>='
133
+ - - ">="
163
134
  - !ruby/object:Gem::Version
164
135
  version: '0'
165
- none: false
166
136
  required_rubygems_version: !ruby/object:Gem::Requirement
167
137
  requirements:
168
- - - ! '>='
138
+ - - ">="
169
139
  - !ruby/object:Gem::Version
170
140
  version: '0'
171
- none: false
172
141
  requirements: []
173
142
  rubyforge_project:
174
- rubygems_version: 1.8.25
143
+ rubygems_version: 2.1.5
175
144
  signing_key:
176
- specification_version: 3
145
+ specification_version: 4
177
146
  summary: A Clojure-like programming language on Rubinius
178
147
  test_files:
179
- - !binary |-
180
- c3BlYy9jb21waWxlcl9zcGVjLnJi
181
- - !binary |-
182
- c3BlYy9pZGVudGlmaWVyX3NwZWMucmI=
183
- - !binary |-
184
- c3BlYy9saXN0X3NwZWMucmI=
185
- - !binary |-
186
- c3BlYy9wYXJzZXJfc3BlYy5yYg==
187
- - !binary |-
188
- c3BlYy9zcGVjX2hlbHBlci5yYg==
148
+ - spec/compiler_spec.rb
149
+ - spec/fn_spec.rb
150
+ - spec/identifier_spec.rb
151
+ - spec/list_spec.rb
152
+ - spec/reader_spec.rb
153
+ - spec/spec_helper.rb
154
+ - spec/special_forms_spec.rb