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