rubylisp 0.2.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +129 -2
  3. data/bin/rubylisp +87 -12
  4. data/lib/rubylisp/atom.rb +25 -6
  5. data/lib/rubylisp/boolean.rb +9 -6
  6. data/lib/rubylisp/builtins.rb +19 -18
  7. data/lib/rubylisp/character.rb +14 -275
  8. data/lib/rubylisp/class_object.rb +56 -0
  9. data/lib/rubylisp/cons_cell.rb +56 -25
  10. data/lib/rubylisp/debug.rb +15 -19
  11. data/lib/rubylisp/environment.rb +27 -0
  12. data/lib/rubylisp/environment_frame.rb +31 -6
  13. data/lib/rubylisp/eof_object.rb +26 -0
  14. data/lib/rubylisp/exception.rb +61 -61
  15. data/lib/rubylisp/ext.rb +32 -6
  16. data/lib/rubylisp/ffi_new.rb +2 -1
  17. data/lib/rubylisp/ffi_send.rb +15 -5
  18. data/lib/rubylisp/frame.rb +5 -164
  19. data/lib/rubylisp/function.rb +4 -3
  20. data/lib/rubylisp/macro.rb +13 -8
  21. data/lib/rubylisp/{object.rb → native_object.rb} +0 -15
  22. data/lib/rubylisp/number.rb +5 -0
  23. data/lib/rubylisp/parser.rb +81 -52
  24. data/lib/rubylisp/port.rb +27 -0
  25. data/lib/rubylisp/prim_alist.rb +115 -0
  26. data/lib/rubylisp/prim_assignment.rb +61 -0
  27. data/lib/rubylisp/prim_character.rb +273 -0
  28. data/lib/rubylisp/{ffi_class.rb → prim_class_object.rb} +16 -69
  29. data/lib/rubylisp/prim_environment.rb +203 -0
  30. data/lib/rubylisp/prim_equivalence.rb +93 -0
  31. data/lib/rubylisp/prim_frame.rb +166 -0
  32. data/lib/rubylisp/prim_io.rb +266 -0
  33. data/lib/rubylisp/prim_list_support.rb +496 -0
  34. data/lib/rubylisp/{logical.rb → prim_logical.rb} +9 -14
  35. data/lib/rubylisp/prim_math.rb +397 -0
  36. data/lib/rubylisp/prim_native_object.rb +21 -0
  37. data/lib/rubylisp/prim_relational.rb +42 -0
  38. data/lib/rubylisp/{special_forms.rb → prim_special_forms.rb} +98 -85
  39. data/lib/rubylisp/prim_string.rb +792 -0
  40. data/lib/rubylisp/prim_system.rb +55 -0
  41. data/lib/rubylisp/prim_type_checks.rb +58 -0
  42. data/lib/rubylisp/prim_vector.rb +497 -0
  43. data/lib/rubylisp/primitive.rb +51 -6
  44. data/lib/rubylisp/string.rb +4 -803
  45. data/lib/rubylisp/symbol.rb +0 -1
  46. data/lib/rubylisp/tokenizer.rb +161 -137
  47. data/lib/rubylisp/vector.rb +10 -31
  48. data/lib/rubylisp.rb +1 -0
  49. metadata +46 -17
  50. data/lib/rubylisp/alist.rb +0 -230
  51. data/lib/rubylisp/assignment.rb +0 -65
  52. data/lib/rubylisp/equivalence.rb +0 -118
  53. data/lib/rubylisp/io.rb +0 -74
  54. data/lib/rubylisp/list_support.rb +0 -526
  55. data/lib/rubylisp/math.rb +0 -405
  56. data/lib/rubylisp/relational.rb +0 -46
  57. data/lib/rubylisp/system.rb +0 -20
  58. data/lib/rubylisp/testing.rb +0 -136
  59. data/lib/rubylisp/type_checks.rb +0 -60
@@ -32,7 +32,6 @@ module Lisp
32
32
  def naked?
33
33
  @naked
34
34
  end
35
-
36
35
 
37
36
  def type
38
37
  :symbol
@@ -4,27 +4,60 @@ module Lisp
4
4
 
5
5
  attr_reader :line_number
6
6
 
7
+ def self.from_string(str)
8
+ self.new(StringIO.new(str, "r"))
9
+ end
10
+
11
+ def self.from_file(f)
12
+ self.new(f)
13
+ end
14
+
7
15
  def initialize(src)
8
- @lookahead_token = 0
9
- @lookahead_literal = ''
10
16
  @source = src
11
- @position = 0
17
+ @lookahead_token = nil
18
+ @lookahead_literal = ''
19
+ @eof = false
20
+ @almost_eof = false
21
+ @curent_ch = nil
22
+ @next_ch = nil
23
+ @next_next_ch = nil
24
+ init
12
25
  end
13
26
 
27
+ def advance
28
+ if @source.eof?
29
+ @eof = true
30
+ @almost_eof = true
31
+ @current_ch = nil
32
+ @next_ch = nil
33
+ else
34
+ @current_ch = @source.readchar
35
+ if @source.eof?
36
+ @almost_eof = true
37
+ @next_ch = nil
38
+ else
39
+ @next_ch = @source.readchar
40
+ if @source.eof?
41
+ @next_next_ch = nil
42
+ else
43
+ @next_next_ch = @source.readchar
44
+ @source.ungetc(@next_next_ch)
45
+ end
46
+ @source.ungetc(@next_ch)
47
+ end
48
+ end
49
+ end
50
+
14
51
  def next_token
15
52
  return @lookahead_token, @lookahead_literal
16
53
  end
17
54
 
18
55
  def eof?
19
- @position >= @source.length
56
+ @eof
20
57
  end
21
58
 
22
59
  def almost_eof?
23
- @position == @source.length - 1
24
- end
25
-
26
- def next_char
27
- almost_eof? ? nil : @source[@position + 1]
60
+ @almost_eof
28
61
  end
29
62
 
30
63
  def letter?(ch)
@@ -40,7 +73,7 @@ module Lisp
40
73
  end
41
74
 
42
75
  def number?(ch)
43
- digit?(ch) || (ch == '-' && digit?(next_char))
76
+ digit?(ch) || (ch == '-' && digit?(@next_ch))
44
77
  end
45
78
 
46
79
 
@@ -49,50 +82,55 @@ module Lisp
49
82
  end
50
83
 
51
84
 
85
+ def graph?(ch)
86
+ ch =~ /[[:graph:]]/
87
+ end
88
+
89
+
52
90
  def symbol_character?(ch)
53
- return true if letter?(ch)
54
- return true if (?0..?9).include?(ch)
55
- return "-_?!:*=<>".include?(ch)
91
+ graph?(ch) && !("();\"'`|[]{}#,.".include?(ch))
56
92
  end
57
93
 
58
94
  def read_symbol
59
- start = @position
95
+ lit = ""
60
96
  tok = nil
61
- if @source[@position] == '.'
62
- @position += 1
97
+ if @current_ch == '.'
98
+ lit << @current_ch
99
+ advance
63
100
  tok = :FFI_SEND_SYMBOL
64
101
  end
65
102
 
66
- while !eof? && (symbol_character?(@source[@position]) ||
67
- (@source[@position] == '.' && !symbol_character?(@source[@position+1]) && tok.nil?) ||
68
- (@source[@position] == '/' && symbol_character?(@source[@position+1])))
69
- tok ||= :FFI_NEW_SYMBOL if @source[@position] == '.'
70
- tok = :FFI_STATIC_SYMBOL if @source[@position] == '/'
71
- @position += 1
103
+ while !eof? && ((@current_ch == '.' && !symbol_character?(@next_ch) && tok.nil?) ||
104
+ (@current_ch == '/' && symbol_character?(@next_ch)) ||
105
+ (symbol_character?(@current_ch)))
106
+ tok ||= :FFI_NEW_SYMBOL if @current_ch == '.' && !lit.empty?
107
+ tok = :FFI_STATIC_SYMBOL if @current_ch == '/' && !lit.empty?
108
+ lit << @current_ch
109
+ advance
72
110
  end
73
111
 
74
112
  tok ||= :SYMBOL
75
113
  return tok, case tok
76
114
  when :SYMBOL, :FFI_STATIC_SYMBOL
77
- @source[start...@position]
115
+ lit
78
116
  when :FFI_SEND_SYMBOL
79
- @source[start+1...@position]
117
+ lit[1..-1]
80
118
  when :FFI_NEW_SYMBOL
81
- @source[start...@position-1]
119
+ lit[0..-2]
82
120
  end
83
121
  end
84
122
 
85
- def read_number
86
- start = @position
87
- @position += 1 if @source[@position] == '-'
88
- hex = @source[@position, 2] == "#x"
123
+ def read_number(hex)
124
+ lit = ""
125
+ if @current_ch == '-'
126
+ lit << @current_ch
127
+ advance
128
+ end
89
129
  is_float = false
90
- @position += 2 if hex
91
- ch = @source[@position]
92
- while !eof? && (digit?(ch) || (hex && hex?(ch)) || (!hex && !is_float && ch == ?.))
93
- is_float ||= (ch == ?.)
94
- @position += 1
95
- ch = @source[@position]
130
+ while !eof? && (digit?(@current_ch) || (hex && hex?(@current_ch)) || (!hex && !is_float && @current_ch == '.'))
131
+ is_float ||= !hex && (@current_ch == '.')
132
+ lit << @current_ch
133
+ advance
96
134
  end
97
135
 
98
136
  tok = if hex
@@ -103,7 +141,7 @@ module Lisp
103
141
  :NUMBER
104
142
  end
105
143
 
106
- return tok, @source[start...@position]
144
+ return tok, lit
107
145
  end
108
146
 
109
147
 
@@ -111,15 +149,15 @@ module Lisp
111
149
  i = 0
112
150
  processed_str = ""
113
151
  while i < str.length
114
- if str[i] == ?\\
152
+ if str[i] == '\\'
115
153
  processed_str << if i < (str.length - 1)
116
154
  i += 1
117
155
  case (str[i])
118
- when ?n
156
+ when 'n'
119
157
  "\n"
120
- when ?t
158
+ when 't'
121
159
  "\t"
122
- when ?\\
160
+ when '\\'
123
161
  "\\"
124
162
  else
125
163
  "\\#{str[i]}"
@@ -137,15 +175,15 @@ module Lisp
137
175
 
138
176
 
139
177
  def read_string
140
- start = @position
141
- @position += 1
142
- while !eof? && @source[@position] != ?"
143
- @position += 1
178
+ lit = ""
179
+ while !eof? && @current_ch != '"'
180
+ lit << @current_ch
181
+ advance
144
182
  end
145
183
 
146
184
  return :EOF, '' if eof?
147
- @position += 1
148
- return :STRING, process_escapes(@source[start...@position])
185
+ advance
186
+ return :STRING, process_escapes(lit)
149
187
  end
150
188
 
151
189
 
@@ -155,135 +193,121 @@ module Lisp
155
193
 
156
194
 
157
195
  def read_character
158
- @position += 2
159
- start = @position
160
- @position += 1
161
- while !eof? && !divider?(@source[@position])
162
- @position += 1
196
+ lit = ""
197
+ lit << @current_ch
198
+ advance
199
+ while !eof? && !divider?(@current_ch)
200
+ lit << @current_ch
201
+ advance
163
202
  end
164
203
 
165
- return :CHARACTER, @source[start...@position]
204
+ return :CHARACTER, lit
166
205
  end
167
206
 
168
207
 
169
208
  def read_next_token
170
209
  return :EOF, '' if eof?
171
210
 
172
- while space?(@source[@position])
173
- @line_number += 1 if @source[@position] == ?\n
174
- @position += 1
211
+ while space?(@current_ch)
212
+ @line_number += 1 if @current_ch == "\n"
213
+ advance
175
214
  return :EOF, '' if eof?
176
215
  end
177
216
 
178
- current_ch = @source[@position]
179
- next_ch = @source[@position + 1] unless almost_eof?
180
-
181
- if letter?(current_ch) || ('*._'.include?(current_ch) && letter?(next_ch))
182
- return read_symbol
183
- elsif number?(current_ch)
184
- return read_number
185
- elsif current_ch == ?- && number?(next_ch)
186
- return read_number
187
- elsif current_ch == ?# && next_ch == ?x
188
- return read_number
189
- elsif current_ch == ?"
217
+ if number?(@current_ch)
218
+ return read_number(false)
219
+ elsif @current_ch == '-' && number?(@next_ch)
220
+ return read_number(false)
221
+ elsif @current_ch == '#' && @next_ch == 'x'
222
+ advance
223
+ advance
224
+ return read_number(true)
225
+ elsif @current_ch == '"'
226
+ advance
190
227
  return read_string
191
- elsif current_ch == ?# && next_ch == ?\\
228
+ elsif @current_ch == '#' && @next_ch == '\\'
229
+ advance
230
+ advance
192
231
  return read_character
193
- elsif current_ch == ?'
194
- @position += 1
232
+ elsif @current_ch == '\'' && @next_ch == '{'
233
+ advance
234
+ advance
235
+ return :QUOTE_LBRACE, "'{"
236
+ elsif @current_ch == '\'' && @next_ch == '#' && @next_next_ch == '('
237
+ advance
238
+ advance
239
+ advance
240
+ return :QUOTE_HASH_LPAREN, "'#("
241
+ elsif @current_ch == '\''
242
+ advance
195
243
  return :QUOTE, "'"
196
- elsif current_ch == ?`
197
- @position += 1
244
+ elsif @current_ch == '`'
245
+ advance
198
246
  return :BACKQUOTE, "`"
199
- elsif current_ch == ?, && next_ch == ?@
200
- @position += 2
247
+ elsif @current_ch == ',' && @next_ch == '@'
248
+ advance
249
+ advance
201
250
  return :COMMAAT, ",@"
202
- elsif current_ch == ?,
203
- @position += 1
251
+ elsif @current_ch == ','
252
+ advance
204
253
  return :COMMA, ","
205
- elsif current_ch == ?(
206
- @position += 1
254
+ elsif @current_ch == '('
255
+ advance
207
256
  return :LPAREN, "("
208
- elsif current_ch == ?)
209
- @position += 1
257
+ elsif @current_ch == '#' && @next_ch == '('
258
+ advance
259
+ advance
260
+ return :HASH_LPAREN, "#("
261
+ elsif @current_ch == ')'
262
+ advance
210
263
  return :RPAREN, ")"
211
- elsif current_ch == ?{
212
- @position += 1
264
+ elsif @current_ch == '{'
265
+ advance
213
266
  return :LBRACE, "{"
214
- elsif current_ch == ?}
215
- @position += 1
267
+ elsif @current_ch == '}'
268
+ advance
216
269
  return :RBRACE, "}"
217
- elsif current_ch == ?[
218
- @position += 1
270
+ elsif @current_ch == '['
271
+ advance
219
272
  return :LBRACKET, "["
220
- elsif current_ch == ?]
221
- @position += 1
273
+ elsif @current_ch == ']'
274
+ advance
222
275
  return :RBRACKET, "]"
223
- elsif current_ch == ?.
224
- @position += 1
276
+ elsif @current_ch == '.' && space?(@next_ch)
277
+ advance
225
278
  return :PERIOD, "."
226
- elsif current_ch == ?/ && next_ch == ?=
227
- @position += 2
228
- return :SYMBOL, "!="
229
- elsif current_ch == ?- && next_ch == ?>
230
- @position += 2
231
- return :SYMBOL, "->"
232
- elsif current_ch == ?= && next_ch == ?>
233
- @position += 2
234
- return :SYMBOL, "=>"
235
- elsif "+-*/%".include?(current_ch)
236
- @position += 1
237
- return :SYMBOL, current_ch.to_s
238
- elsif current_ch == ?< && next_ch == ?=
239
- @position += 2
240
- return :SYMBOL, "<="
241
- elsif current_ch == ?<
242
- @position += 1
243
- return :SYMBOL, "<"
244
- elsif current_ch == ?> && next_ch == ?=
245
- @position += 2
246
- return :SYMBOL, ">="
247
- elsif current_ch == ?>
248
- @position += 1
249
- return :SYMBOL, ">"
250
- elsif current_ch == ?= && next_ch == ?=
251
- @position += 2
252
- return :SYMBOL, "="
253
- elsif current_ch == ?=
254
- @position += 1
255
- return :SYMBOL, "="
256
- elsif current_ch == ?! && next_ch == ?=
257
- @position += 2
258
- return :SYMBOL, "!="
259
- elsif current_ch == ?!
260
- @position += 1
261
- return :SYMBOL, "!"
262
- elsif current_ch == ?# && next_ch == ?t
263
- @position += 2
279
+ elsif @current_ch == '.' && symbol_character?(@next_ch)
280
+ return read_symbol
281
+ elsif symbol_character?(@current_ch)
282
+ return read_symbol
283
+ elsif @current_ch == '#' && @next_ch == 't'
284
+ advance
285
+ advance
264
286
  return :TRUE, "#t"
265
- elsif current_ch == ?# && next_ch == ?f
266
- @position += 2
287
+ elsif @current_ch == '#' && @next_ch == 'f'
288
+ advance
289
+ advance
267
290
  return :FALSE, "#f"
268
- elsif current_ch == ?;
269
- start = @position
291
+ elsif @current_ch == ';'
292
+ lit = ""
270
293
  while true
271
- return :COMMENT, @source[start..-1] if eof?
272
- return :COMMENT, @source[start...@position] if @source[@position] == ?\n
273
- @position += 1
294
+ return :COMMENT, lit if eof? || @current_ch == "\n"
295
+ lit << @current_ch
296
+ advance
274
297
  end
275
298
  else
276
- return :ILLEGAL, ''
299
+ return :ILLEGAL, @current_ch
277
300
  end
278
301
  end
279
302
 
280
303
  def consume_token
281
- @lookahead_token, @lookahead_literal = read_next_token
304
+ @lookahead_token, @lookahead_literal = self.read_next_token
282
305
  consume_token if @lookahead_token == :COMMENT
283
306
  end
284
307
 
285
308
  def init
286
309
  @line_number = 0
310
+ advance
287
311
  consume_token
288
312
  end
289
313
 
@@ -2,31 +2,6 @@ module Lisp
2
2
 
3
3
  class Vector < Atom
4
4
 
5
- def self.register
6
- Primitive.register("make-vector") {|args, env| Lisp::Vector::make_vector_impl(args, env) }
7
- Primitive.register("vector") {|args, env| Lisp::Vector::vector_impl(args, env) }
8
- end
9
-
10
- def self.make_vector_impl(args, env)
11
- c = args
12
- a = []
13
- while !c.nil?
14
- a << c.car.evaluate(env)
15
- c = c.cdr
16
- end
17
-
18
- Lisp::Vector.new(a)
19
- end
20
-
21
-
22
- def self.vector_impl(args, env)
23
- return Lisp::Debug.process_error("vector requires a single list argument.", env) unless args.length == 1
24
-
25
- c = args.car.evaluate(env)
26
- Lisp::Vector.new(c.to_a)
27
- end
28
-
29
-
30
5
  def self.with_array(a)
31
6
  self.new(a)
32
7
  end
@@ -38,6 +13,10 @@ module Lisp
38
13
  end
39
14
 
40
15
 
16
+ def update!(a)
17
+ @value = a
18
+ end
19
+
41
20
  def type
42
21
  :vector
43
22
  end
@@ -70,24 +49,24 @@ module Lisp
70
49
 
71
50
 
72
51
  def to_s
73
- "[#{@value.join(' ')}]"
52
+ "#(#{@value.join(' ')})"
74
53
  end
75
54
 
76
55
 
77
56
  def at(n)
78
- @value[n - 1]
57
+ @value[n]
79
58
  end
80
59
  alias_method :nth, :at
81
60
 
82
61
 
83
62
  def nth_tail(n)
84
63
  return Lisp::Vector.new if n > @value.size
85
- Lisp::Vector.new(@value[(n - 1)..-1])
64
+ Lisp::Vector.new(@value[n..-1])
86
65
  end
87
66
 
88
67
 
89
68
  def at_put(n, d)
90
- @value[n - 1] = d
69
+ @value[n] = d
91
70
  end
92
71
 
93
72
 
@@ -96,11 +75,11 @@ module Lisp
96
75
  end
97
76
 
98
77
 
99
- def eq?(other)
78
+ def equal?(other)
100
79
  return false unless other.vector?
101
80
  return false unless @value.size == other.value.size
102
81
  (0..@value.size).each do |i|
103
- return false unless Lisp::Equivalence.equal_check(other.value[i], value[i]).value
82
+ return false unless other.value[i].equal?(value[i])
104
83
  end
105
84
  true
106
85
  end
data/lib/rubylisp.rb CHANGED
@@ -1,2 +1,3 @@
1
1
  require 'set'
2
+ require 'stringio'
2
3
  Dir[File.dirname(__FILE__) + '/rubylisp/*.rb'].each {|file| require file }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubylisp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Astels
@@ -9,7 +9,27 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-02-10 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.3'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 4.3.5
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4.3'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 4.3.5
13
33
  description: An embeddable Lisp as an extension language for Ruby
14
34
  email: dastels@icloud.com
15
35
  executables:
@@ -20,42 +40,51 @@ files:
20
40
  - README.md
21
41
  - bin/rubylisp
22
42
  - lib/rubylisp.rb
23
- - lib/rubylisp/alist.rb
24
- - lib/rubylisp/assignment.rb
25
43
  - lib/rubylisp/atom.rb
26
44
  - lib/rubylisp/binding.rb
27
45
  - lib/rubylisp/boolean.rb
28
46
  - lib/rubylisp/builtins.rb
29
47
  - lib/rubylisp/character.rb
48
+ - lib/rubylisp/class_object.rb
30
49
  - lib/rubylisp/cons_cell.rb
31
50
  - lib/rubylisp/debug.rb
51
+ - lib/rubylisp/environment.rb
32
52
  - lib/rubylisp/environment_frame.rb
33
- - lib/rubylisp/equivalence.rb
53
+ - lib/rubylisp/eof_object.rb
34
54
  - lib/rubylisp/exception.rb
35
55
  - lib/rubylisp/ext.rb
36
- - lib/rubylisp/ffi_class.rb
37
56
  - lib/rubylisp/ffi_new.rb
38
57
  - lib/rubylisp/ffi_send.rb
39
58
  - lib/rubylisp/ffi_static.rb
40
59
  - lib/rubylisp/frame.rb
41
60
  - lib/rubylisp/function.rb
42
- - lib/rubylisp/io.rb
43
- - lib/rubylisp/list_support.rb
44
- - lib/rubylisp/logical.rb
45
61
  - lib/rubylisp/macro.rb
46
- - lib/rubylisp/math.rb
62
+ - lib/rubylisp/native_object.rb
47
63
  - lib/rubylisp/number.rb
48
- - lib/rubylisp/object.rb
49
64
  - lib/rubylisp/parser.rb
65
+ - lib/rubylisp/port.rb
66
+ - lib/rubylisp/prim_alist.rb
67
+ - lib/rubylisp/prim_assignment.rb
68
+ - lib/rubylisp/prim_character.rb
69
+ - lib/rubylisp/prim_class_object.rb
70
+ - lib/rubylisp/prim_environment.rb
71
+ - lib/rubylisp/prim_equivalence.rb
72
+ - lib/rubylisp/prim_frame.rb
73
+ - lib/rubylisp/prim_io.rb
74
+ - lib/rubylisp/prim_list_support.rb
75
+ - lib/rubylisp/prim_logical.rb
76
+ - lib/rubylisp/prim_math.rb
77
+ - lib/rubylisp/prim_native_object.rb
78
+ - lib/rubylisp/prim_relational.rb
79
+ - lib/rubylisp/prim_special_forms.rb
80
+ - lib/rubylisp/prim_string.rb
81
+ - lib/rubylisp/prim_system.rb
82
+ - lib/rubylisp/prim_type_checks.rb
83
+ - lib/rubylisp/prim_vector.rb
50
84
  - lib/rubylisp/primitive.rb
51
- - lib/rubylisp/relational.rb
52
- - lib/rubylisp/special_forms.rb
53
85
  - lib/rubylisp/string.rb
54
86
  - lib/rubylisp/symbol.rb
55
- - lib/rubylisp/system.rb
56
- - lib/rubylisp/testing.rb
57
87
  - lib/rubylisp/tokenizer.rb
58
- - lib/rubylisp/type_checks.rb
59
88
  - lib/rubylisp/vector.rb
60
89
  homepage: https://bitbucket.org/dastels/rubylisp
61
90
  licenses:
@@ -77,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
106
  version: '0'
78
107
  requirements: []
79
108
  rubyforge_project:
80
- rubygems_version: 2.2.2
109
+ rubygems_version: 2.5.0
81
110
  signing_key:
82
111
  specification_version: 4
83
112
  summary: Lisp in Ruby