klam 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.
- 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
|