rb-scheme 0.3.5

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.
@@ -0,0 +1,17 @@
1
+ module RbScheme
2
+ class VM
3
+ class Box
4
+ def initialize(val)
5
+ @value = val
6
+ end
7
+
8
+ def set_box!(val)
9
+ @value = val
10
+ end
11
+
12
+ def unbox
13
+ @value
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ module RbScheme
2
+ class VM
3
+ class Stack
4
+
5
+ def initialize
6
+ @stack ||= Array.new(1000)
7
+ end
8
+
9
+ def push(val, stack_p)
10
+ @stack[stack_p] = val
11
+ stack_p + 1
12
+ end
13
+
14
+ OFFSET = 1
15
+
16
+ def index(stack_p, i)
17
+ @stack[stack_p - (i + OFFSET)]
18
+ end
19
+
20
+ def index_set!(stack_p, i, val)
21
+ @stack[stack_p - (i + OFFSET)] = val
22
+ end
23
+
24
+ def save_stack(stack_p)
25
+ v = Array.new(stack_p)
26
+ i = 0
27
+ until i == stack_p
28
+ v[i] = @stack[i]
29
+ i += 1
30
+ end
31
+ v
32
+ end
33
+
34
+ def restore_stack(saved_stack)
35
+ s = saved_stack.length
36
+ i = 0
37
+ until i == s do
38
+ @stack[i] = saved_stack[i]
39
+ i += 1
40
+ end
41
+ s
42
+ end
43
+ end # Stack
44
+ end # VM
45
+ end # RbScheme
data/rb-scheme.gemspec ADDED
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rb-scheme/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rb-scheme"
8
+ spec.version = RbScheme::VERSION
9
+ spec.authors = ["tkhsh"]
10
+ spec.email = ["uki.thashi@gmail.com"]
11
+
12
+ spec.summary = %q{An implementation of Scheme written in Ruby.}
13
+ spec.description = %q{An implementation of Scheme subset written in Ruby. It's based on the Stack-Based model introduced in Three Implementation Models for Scheme(http://www.cs.indiana.edu/~dyb/papers/3imp.pdf) by R. Kent Dybvig. The model is implemented by a compiler and virtual machine.}
14
+ spec.homepage = "https://github.com/tkhsh/rb-scheme"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.13"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "minitest", "~> 5.10"
27
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rb-scheme
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.5
5
+ platform: ruby
6
+ authors:
7
+ - tkhsh
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-06-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.10'
55
+ description: An implementation of Scheme subset written in Ruby. It's based on the
56
+ Stack-Based model introduced in Three Implementation Models for Scheme(http://www.cs.indiana.edu/~dyb/papers/3imp.pdf)
57
+ by R. Kent Dybvig. The model is implemented by a compiler and virtual machine.
58
+ email:
59
+ - uki.thashi@gmail.com
60
+ executables:
61
+ - rb-scheme
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - ".gitignore"
66
+ - Gemfile
67
+ - Gemfile.lock
68
+ - LICENSE.txt
69
+ - README.md
70
+ - Rakefile
71
+ - circle.yml
72
+ - examples/nqueen.scm
73
+ - examples/y_combinator.scm
74
+ - exe/rb-scheme
75
+ - lib/rb-scheme.rb
76
+ - lib/rb-scheme/compiler.rb
77
+ - lib/rb-scheme/evaluator.rb
78
+ - lib/rb-scheme/executer.rb
79
+ - lib/rb-scheme/extension.rb
80
+ - lib/rb-scheme/extension/procedures.scm
81
+ - lib/rb-scheme/global.rb
82
+ - lib/rb-scheme/helpers.rb
83
+ - lib/rb-scheme/lisp-objects.rb
84
+ - lib/rb-scheme/parser.rb
85
+ - lib/rb-scheme/primitive.rb
86
+ - lib/rb-scheme/primitive/procedure.rb
87
+ - lib/rb-scheme/printer.rb
88
+ - lib/rb-scheme/symbol.rb
89
+ - lib/rb-scheme/version.rb
90
+ - lib/rb-scheme/vm.rb
91
+ - lib/rb-scheme/vm/box.rb
92
+ - lib/rb-scheme/vm/stack.rb
93
+ - rb-scheme.gemspec
94
+ homepage: https://github.com/tkhsh/rb-scheme
95
+ licenses:
96
+ - MIT
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.4.5.2
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: An implementation of Scheme written in Ruby.
118
+ test_files: []