klam 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/PROGRESS.asciidoc +1 -1
- data/lib/klam.rb +1 -0
- data/lib/klam/absvector.rb +22 -0
- data/lib/klam/compilation_stages/emit_ruby.rb +3 -2
- data/lib/klam/primitives/vectors.rb +3 -4
- data/lib/klam/version.rb +1 -1
- data/spec/unit/klam/primitives/vectors_spec.rb +25 -1
- metadata +48 -36
- checksums.yaml +0 -7
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/PROGRESS.asciidoc
CHANGED
@@ -91,6 +91,7 @@ Primitive Functions of Kl]:
|
|
91
91
|
|
92
92
|
Ruby Interoperation
|
93
93
|
~~~~~~~~~~~~~~~~~~~
|
94
|
+
* Invoking Kl functions from Ruby
|
94
95
|
* Ruby \<\-> Kl converters
|
95
96
|
** Array \<\-> List
|
96
97
|
|
@@ -99,7 +100,6 @@ Not Yet Implemented
|
|
99
100
|
|
100
101
|
Ruby Interoperation
|
101
102
|
~~~~~~~~~~~~~~~~~~~
|
102
|
-
* Invoking Kl functions from Ruby
|
103
103
|
* Invoking Ruby functions from Kl
|
104
104
|
* Ruby \<\-> Kl converters
|
105
105
|
** Array \<\-> Absvector
|
data/lib/klam.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Klam
|
2
|
+
class Absvector < Array
|
3
|
+
def [](i)
|
4
|
+
if i < 0 || i >= size
|
5
|
+
raise Klam::Error, "index out of bounds: #{i}"
|
6
|
+
end
|
7
|
+
super(i)
|
8
|
+
end
|
9
|
+
|
10
|
+
def []=(i, x)
|
11
|
+
if i < 0 || i >= size
|
12
|
+
raise Klam::Error, "index out of bounds: #{i}"
|
13
|
+
end
|
14
|
+
super(i, x)
|
15
|
+
end
|
16
|
+
|
17
|
+
def store(i, x)
|
18
|
+
self[i] = x
|
19
|
+
self
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -22,9 +22,10 @@ module Klam
|
|
22
22
|
:<= => [2, '($1 <= $2)'],
|
23
23
|
:>= => [2, '($1 >= $2)'],
|
24
24
|
:"=" => [2, '($1 == $2)'],
|
25
|
-
:absvector => [1, '::
|
26
|
-
:absvector? => [1, '$1.instance_of?(::
|
25
|
+
:absvector => [1, '::Klam::Absvector.new($1)'],
|
26
|
+
:absvector? => [1, '$1.instance_of?(::Klam::Absvector)'],
|
27
27
|
:"<-address" => [2, '$1[$2]'],
|
28
|
+
:"address->" => [3, '$1.store($2, $3)'],
|
28
29
|
:cons => [2, '::Klam::Cons.new($1, $2)'],
|
29
30
|
:cons? => [1, '$1.instance_of?(::Klam::Cons)'],
|
30
31
|
:hd => [1, '$1.hd'],
|
@@ -2,12 +2,11 @@ module Klam
|
|
2
2
|
module Primitives
|
3
3
|
module Vectors
|
4
4
|
def absvector(n)
|
5
|
-
::
|
5
|
+
::Klam::Absvector.new(n)
|
6
6
|
end
|
7
7
|
|
8
8
|
def absvec_store(vec, n, val)
|
9
|
-
vec
|
10
|
-
vec
|
9
|
+
vec.store(n, val)
|
11
10
|
end
|
12
11
|
alias_method :"address->", :absvec_store
|
13
12
|
remove_method :absvec_store
|
@@ -19,7 +18,7 @@ module Klam
|
|
19
18
|
remove_method :absvec_read
|
20
19
|
|
21
20
|
def absvector?(v)
|
22
|
-
v.instance_of?(::
|
21
|
+
v.instance_of?(::Klam::Absvector)
|
23
22
|
end
|
24
23
|
end
|
25
24
|
end
|
data/lib/klam/version.rb
CHANGED
@@ -6,7 +6,7 @@ describe Klam::Primitives::Vectors do
|
|
6
6
|
describe '(absvector N)' do
|
7
7
|
it 'returns an absvector of size N' do
|
8
8
|
vec = absvector(3)
|
9
|
-
expect(vec).to
|
9
|
+
expect(vec).to be_instance_of Klam::Absvector
|
10
10
|
expect(vec.size).to eq(3)
|
11
11
|
end
|
12
12
|
end
|
@@ -24,6 +24,18 @@ describe Klam::Primitives::Vectors do
|
|
24
24
|
send(:"address->", @vec, 1, :foo)
|
25
25
|
expect(send(:"<-address", @vec, 1)).to eq(:foo)
|
26
26
|
end
|
27
|
+
|
28
|
+
it 'raises an error if N is negative' do
|
29
|
+
expect {
|
30
|
+
send(:"address->", @vec, -1, :foo)
|
31
|
+
}.to raise_error
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'raises an error if N is >= the size of the V' do
|
35
|
+
expect {
|
36
|
+
send(:"address->", @vec, 3, :foo)
|
37
|
+
}.to raise_error
|
38
|
+
end
|
27
39
|
end
|
28
40
|
|
29
41
|
describe '(<-address V N)' do
|
@@ -41,6 +53,18 @@ describe Klam::Primitives::Vectors do
|
|
41
53
|
send(:"<-address", @vec, 1)
|
42
54
|
}.not_to raise_error
|
43
55
|
end
|
56
|
+
|
57
|
+
it 'raises an error if N is negative' do
|
58
|
+
expect {
|
59
|
+
send(:"<-address", @vec, -1)
|
60
|
+
}.to raise_error
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'raises an error if N is >= the size of the V' do
|
64
|
+
expect {
|
65
|
+
send(:"<-address", @vec, 3)
|
66
|
+
}.to raise_error
|
67
|
+
end
|
44
68
|
end
|
45
69
|
|
46
70
|
describe '(absvector? X)' do
|
metadata
CHANGED
@@ -1,96 +1,106 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klam
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Greg Spurrier
|
8
|
-
autorequire:
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
12
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rake
|
15
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '10.4'
|
20
|
-
- - '>='
|
22
|
+
- - ! '>='
|
21
23
|
- !ruby/object:Gem::Version
|
22
24
|
version: '10.4'
|
23
|
-
|
25
|
+
type: :development
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
24
29
|
requirements:
|
25
30
|
- - ~>
|
26
31
|
- !ruby/object:Gem::Version
|
27
32
|
version: '10.4'
|
28
|
-
- - '>='
|
33
|
+
- - ! '>='
|
29
34
|
- !ruby/object:Gem::Version
|
30
35
|
version: '10.4'
|
31
|
-
prerelease: false
|
32
|
-
type: :development
|
33
36
|
- !ruby/object:Gem::Dependency
|
34
37
|
name: rspec
|
35
|
-
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
36
40
|
requirements:
|
37
41
|
- - ~>
|
38
42
|
- !ruby/object:Gem::Version
|
39
43
|
version: '3.1'
|
40
|
-
- - '>='
|
44
|
+
- - ! '>='
|
41
45
|
- !ruby/object:Gem::Version
|
42
46
|
version: 3.1.0
|
43
|
-
|
47
|
+
type: :development
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
44
51
|
requirements:
|
45
52
|
- - ~>
|
46
53
|
- !ruby/object:Gem::Version
|
47
54
|
version: '3.1'
|
48
|
-
- - '>='
|
55
|
+
- - ! '>='
|
49
56
|
- !ruby/object:Gem::Version
|
50
57
|
version: 3.1.0
|
51
|
-
prerelease: false
|
52
|
-
type: :development
|
53
58
|
- !ruby/object:Gem::Dependency
|
54
59
|
name: rspec-autotest
|
55
|
-
|
60
|
+
requirement: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
56
62
|
requirements:
|
57
63
|
- - ~>
|
58
64
|
- !ruby/object:Gem::Version
|
59
65
|
version: '1.0'
|
60
|
-
- - '>='
|
66
|
+
- - ! '>='
|
61
67
|
- !ruby/object:Gem::Version
|
62
68
|
version: 1.0.0
|
63
|
-
|
69
|
+
type: :development
|
70
|
+
prerelease: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
64
73
|
requirements:
|
65
74
|
- - ~>
|
66
75
|
- !ruby/object:Gem::Version
|
67
76
|
version: '1.0'
|
68
|
-
- - '>='
|
77
|
+
- - ! '>='
|
69
78
|
- !ruby/object:Gem::Version
|
70
79
|
version: 1.0.0
|
71
|
-
prerelease: false
|
72
|
-
type: :development
|
73
80
|
- !ruby/object:Gem::Dependency
|
74
81
|
name: ZenTest
|
75
|
-
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
76
84
|
requirements:
|
77
85
|
- - ~>
|
78
86
|
- !ruby/object:Gem::Version
|
79
87
|
version: '4.11'
|
80
|
-
- - '>='
|
88
|
+
- - ! '>='
|
81
89
|
- !ruby/object:Gem::Version
|
82
90
|
version: '4.11'
|
83
|
-
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
84
95
|
requirements:
|
85
96
|
- - ~>
|
86
97
|
- !ruby/object:Gem::Version
|
87
98
|
version: '4.11'
|
88
|
-
- - '>='
|
99
|
+
- - ! '>='
|
89
100
|
- !ruby/object:Gem::Version
|
90
101
|
version: '4.11'
|
91
|
-
|
92
|
-
|
93
|
-
description: Klam is a Ruby implementation of Kl, the small Lisp on top of which the Shen programming language is implemented.
|
102
|
+
description: Klam is a Ruby implementation of Kl, the small Lisp on top of which the
|
103
|
+
Shen programming language is implemented.
|
94
104
|
email:
|
95
105
|
- greg@sourcematters.org
|
96
106
|
executables: []
|
@@ -107,6 +117,7 @@ files:
|
|
107
117
|
- Rakefile
|
108
118
|
- klam.gemspec
|
109
119
|
- lib/klam.rb
|
120
|
+
- lib/klam/absvector.rb
|
110
121
|
- lib/klam/compilation_stages.rb
|
111
122
|
- lib/klam/compilation_stages/convert_freezes_to_lambdas.rb
|
112
123
|
- lib/klam/compilation_stages/convert_lexical_variables.rb
|
@@ -174,26 +185,27 @@ files:
|
|
174
185
|
homepage: https://github.com/gregspurrier/klam
|
175
186
|
licenses:
|
176
187
|
- MIT
|
177
|
-
|
178
|
-
post_install_message:
|
188
|
+
post_install_message:
|
179
189
|
rdoc_options: []
|
180
190
|
require_paths:
|
181
191
|
- lib
|
182
192
|
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
none: false
|
183
194
|
requirements:
|
184
|
-
- - '>='
|
195
|
+
- - ! '>='
|
185
196
|
- !ruby/object:Gem::Version
|
186
197
|
version: 1.9.3
|
187
198
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
|
+
none: false
|
188
200
|
requirements:
|
189
|
-
- - '>='
|
201
|
+
- - ! '>='
|
190
202
|
- !ruby/object:Gem::Version
|
191
203
|
version: '0'
|
192
204
|
requirements: []
|
193
|
-
rubyforge_project:
|
194
|
-
rubygems_version:
|
195
|
-
signing_key:
|
196
|
-
specification_version:
|
205
|
+
rubyforge_project:
|
206
|
+
rubygems_version: 1.8.23
|
207
|
+
signing_key:
|
208
|
+
specification_version: 3
|
197
209
|
summary: Klam is a Ruby implementation of the Kl.
|
198
210
|
test_files:
|
199
211
|
- spec/functional/application_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: d6bfb59d34a33d476f312e82821a8daa9c23a766
|
4
|
-
data.tar.gz: 1e17a5d167569095f128e551504e48ccfc5c3f84
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: f2adf161608625ab5b3a7c7d38cb406df8152d98a55b85fa7d77f338c543f7c21a98df1923d507b52e863a2aeb47f3672dce37b18e3c28cc6226e1664b036b97
|
7
|
-
data.tar.gz: 2949ef6dcb1086f138bdd8059cf8419de98eca82c2054754244050511147c6d1119bda3969397e0b436b8b1a49dde962a470d1d5f299cb1e146b7cdcba9e46cd
|