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 CHANGED
@@ -1 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
1
3
  gemspec
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Greg Spurrier
1
+ Copyright (c) 2014-2015 Greg Spurrier
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
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
@@ -6,6 +6,7 @@ require 'klam/error'
6
6
  require 'klam/template'
7
7
  require 'klam/variable'
8
8
  require 'klam/variable_generator'
9
+ require 'klam/absvector'
9
10
  require 'klam/cons'
10
11
  require 'klam/primitives'
11
12
  require 'klam/converters'
@@ -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, '::Array.new($1)'],
26
- :absvector? => [1, '$1.instance_of?(::Array)'],
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
- ::Array.new(n)
5
+ ::Klam::Absvector.new(n)
6
6
  end
7
7
 
8
8
  def absvec_store(vec, n, val)
9
- vec[n] = val
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?(::Array)
21
+ v.instance_of?(::Klam::Absvector)
23
22
  end
24
23
  end
25
24
  end
data/lib/klam/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Klam
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -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 be_kind_of Array
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.1
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-04 00:00:00.000000000 Z
12
+ date: 2015-01-07 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: rake
15
- version_requirements: !ruby/object:Gem::Requirement
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
- requirement: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
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
- requirement: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
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
- requirement: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
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
- requirement: !ruby/object:Gem::Requirement
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
- prerelease: false
92
- type: :development
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
- metadata: {}
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: 2.1.9
195
- signing_key:
196
- specification_version: 4
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