apricot 0.0.1 → 0.0.2
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.
- 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
|