apricot 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +1 -0
- data/Gemfile.lock +229 -11
- data/README.md +46 -29
- data/Rakefile +1 -1
- data/apricot.gemspec +7 -3
- data/benchmarks/factorial.rb +51 -0
- data/benchmarks/interpolate.rb +20 -0
- data/bin/apricot +5 -23
- data/examples/bot.apr +1 -4
- data/examples/cinch-bot.apr +3 -3
- data/examples/sinatra.apr +9 -0
- data/kernel/core.apr +124 -75
- data/kernel/repl.apr +37 -0
- data/lib/apricot.rb +7 -26
- data/lib/apricot/boot.rb +24 -0
- data/lib/apricot/code_loader.rb +108 -0
- data/lib/apricot/compiler.rb +265 -32
- data/lib/apricot/generator.rb +10 -3
- data/lib/apricot/identifier.rb +25 -10
- data/lib/apricot/list.rb +28 -41
- data/lib/apricot/macroexpand.rb +14 -8
- data/lib/apricot/misc.rb +2 -1
- data/lib/apricot/namespace.rb +20 -3
- data/lib/apricot/{parser.rb → reader.rb} +221 -194
- data/lib/apricot/repl.rb +67 -24
- data/lib/apricot/ruby_ext.rb +27 -16
- data/lib/apricot/scopes.rb +159 -0
- data/lib/apricot/seq.rb +43 -1
- data/lib/apricot/special_forms.rb +16 -695
- data/lib/apricot/special_forms/def.rb +32 -0
- data/lib/apricot/special_forms/do.rb +23 -0
- data/lib/apricot/special_forms/dot.rb +112 -0
- data/lib/apricot/special_forms/fn.rb +342 -0
- data/lib/apricot/special_forms/if.rb +31 -0
- data/lib/apricot/special_forms/let.rb +8 -0
- data/lib/apricot/special_forms/loop.rb +10 -0
- data/lib/apricot/special_forms/quote.rb +9 -0
- data/lib/apricot/special_forms/recur.rb +26 -0
- data/lib/apricot/special_forms/try.rb +146 -0
- data/lib/apricot/variables.rb +65 -0
- data/lib/apricot/version.rb +1 -1
- data/spec/compiler_spec.rb +53 -450
- data/spec/fn_spec.rb +206 -0
- data/spec/list_spec.rb +1 -1
- data/spec/reader_spec.rb +349 -0
- data/spec/spec_helper.rb +40 -4
- data/spec/special_forms_spec.rb +203 -0
- metadata +99 -133
- data/lib/apricot/ast.rb +0 -3
- data/lib/apricot/ast/identifier.rb +0 -111
- data/lib/apricot/ast/list.rb +0 -99
- data/lib/apricot/ast/literals.rb +0 -240
- data/lib/apricot/ast/node.rb +0 -45
- data/lib/apricot/ast/scopes.rb +0 -147
- data/lib/apricot/ast/toplevel.rb +0 -66
- data/lib/apricot/ast/variables.rb +0 -64
- data/lib/apricot/printers.rb +0 -12
- data/lib/apricot/stages.rb +0 -60
- data/spec/parser_spec.rb +0 -312
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,46 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'rspec'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
-
|
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-
|
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:
|
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:
|
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:
|
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:
|
44
|
-
|
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
|
-
-
|
53
|
-
YXByaWNvdA==
|
61
|
+
- apricot
|
54
62
|
extensions: []
|
55
63
|
extra_rdoc_files: []
|
56
64
|
files:
|
57
|
-
-
|
58
|
-
|
59
|
-
-
|
60
|
-
|
61
|
-
-
|
62
|
-
|
63
|
-
-
|
64
|
-
|
65
|
-
-
|
66
|
-
|
67
|
-
-
|
68
|
-
|
69
|
-
-
|
70
|
-
|
71
|
-
-
|
72
|
-
|
73
|
-
-
|
74
|
-
|
75
|
-
-
|
76
|
-
|
77
|
-
-
|
78
|
-
|
79
|
-
-
|
80
|
-
|
81
|
-
-
|
82
|
-
|
83
|
-
-
|
84
|
-
|
85
|
-
-
|
86
|
-
|
87
|
-
-
|
88
|
-
|
89
|
-
-
|
90
|
-
|
91
|
-
-
|
92
|
-
|
93
|
-
-
|
94
|
-
|
95
|
-
-
|
96
|
-
|
97
|
-
-
|
98
|
-
|
99
|
-
-
|
100
|
-
|
101
|
-
-
|
102
|
-
|
103
|
-
-
|
104
|
-
|
105
|
-
-
|
106
|
-
|
107
|
-
-
|
108
|
-
|
109
|
-
-
|
110
|
-
|
111
|
-
-
|
112
|
-
|
113
|
-
-
|
114
|
-
|
115
|
-
-
|
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.
|
143
|
+
rubygems_version: 2.1.5
|
175
144
|
signing_key:
|
176
|
-
specification_version:
|
145
|
+
specification_version: 4
|
177
146
|
summary: A Clojure-like programming language on Rubinius
|
178
147
|
test_files:
|
179
|
-
-
|
180
|
-
|
181
|
-
-
|
182
|
-
|
183
|
-
-
|
184
|
-
|
185
|
-
-
|
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
|