mapleseed 0.1.0
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/.document +5 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +20 -0
- data/README.rdoc +38 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/bin/mapleseed +39 -0
- data/lib/mapleseed.rb +28 -0
- data/lib/mapleseed/interpreter.rb +63 -0
- data/lib/mapleseed/memory.rb +28 -0
- data/lib/mapleseed/ring.rb +212 -0
- data/mapleseed.gemspec +67 -0
- data/test/helper.rb +18 -0
- data/test/test_mapleseed.rb +7 -0
- metadata +112 -0
data/.document
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "shoulda", ">= 0"
|
10
|
+
gem "bundler", "~> 1.0.0"
|
11
|
+
gem "jeweler", "~> 1.5.2"
|
12
|
+
gem "rcov", ">= 0"
|
13
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
git (1.2.5)
|
5
|
+
jeweler (1.5.2)
|
6
|
+
bundler (~> 1.0.0)
|
7
|
+
git (>= 1.2.5)
|
8
|
+
rake
|
9
|
+
rake (0.8.7)
|
10
|
+
rcov (0.9.9)
|
11
|
+
shoulda (2.11.3)
|
12
|
+
|
13
|
+
PLATFORMS
|
14
|
+
x86-mingw32
|
15
|
+
|
16
|
+
DEPENDENCIES
|
17
|
+
bundler (~> 1.0.0)
|
18
|
+
jeweler (~> 1.5.2)
|
19
|
+
rcov
|
20
|
+
shoulda
|
data/README.rdoc
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
= Mapleseed
|
2
|
+
|
3
|
+
Mapleseed is a simple {Whirl}[http://www.bigzaphod.org/whirl/] interpreter written in Ruby.
|
4
|
+
Yes, I know I've been on a bit of an esoteric language interpreter kick. They're fun little toys.
|
5
|
+
|
6
|
+
== Usage
|
7
|
+
|
8
|
+
To install Mapleseed:
|
9
|
+
|
10
|
+
% gem install mapleseed
|
11
|
+
|
12
|
+
Once Mapleseed is installed, you can use it to interpret your Whirl code.
|
13
|
+
|
14
|
+
You can pass code directly into it, using the -c parameter.
|
15
|
+
|
16
|
+
% mapleseed -c "011000011110000111111"
|
17
|
+
|
18
|
+
Or, you can specify a file with the -f parameter:
|
19
|
+
|
20
|
+
% mapleseed -f test.wrl
|
21
|
+
|
22
|
+
You can also start an interactive interpreter by running Mapleseed without any parameters
|
23
|
+
|
24
|
+
% mapleseed
|
25
|
+
|
26
|
+
The list of options is viewable from the command line using the -h parameter.
|
27
|
+
|
28
|
+
% mapleseed -h
|
29
|
+
|
30
|
+
== Things That Might Get Done Eventually
|
31
|
+
|
32
|
+
* REPL
|
33
|
+
* File minimizer (turn whirl code into binary files and vice versa)
|
34
|
+
* Unit testing
|
35
|
+
|
36
|
+
== History
|
37
|
+
|
38
|
+
* 0.1.0 - Initial release. Allows running code passed in or from a file.
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
15
|
+
gem.name = "mapleseed"
|
16
|
+
gem.homepage = "http://github.com/ctoneal/mapleseed"
|
17
|
+
gem.license = "MIT"
|
18
|
+
gem.summary = %Q{A Whirl interpreter in Ruby}
|
19
|
+
gem.description = %Q{A simple Whirl interpreter}
|
20
|
+
gem.email = "ctoneal@gmail.com"
|
21
|
+
gem.authors = ["Chris ONeal"]
|
22
|
+
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
23
|
+
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
24
|
+
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
25
|
+
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
26
|
+
end
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
28
|
+
|
29
|
+
require 'rake/testtask'
|
30
|
+
Rake::TestTask.new(:test) do |test|
|
31
|
+
test.libs << 'lib' << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
|
36
|
+
require 'rcov/rcovtask'
|
37
|
+
Rcov::RcovTask.new do |test|
|
38
|
+
test.libs << 'test'
|
39
|
+
test.pattern = 'test/**/test_*.rb'
|
40
|
+
test.verbose = true
|
41
|
+
end
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "mapleseed #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/bin/mapleseed
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "mapleseed.rb"))
|
4
|
+
|
5
|
+
options = { :mode => :repl }
|
6
|
+
op = OptionParser.new do |x|
|
7
|
+
x.banner = "mapleseed <options>"
|
8
|
+
x.separator "\nUsing no options will start the interactive interpreter."
|
9
|
+
x.on("-f <file_path>", String, "Open a given file") do |f|
|
10
|
+
options[:mode] = :file
|
11
|
+
options[:file] = f
|
12
|
+
end
|
13
|
+
x.on("-c <code>", String, "Perform the given code") do |c|
|
14
|
+
options[:mode] = :code
|
15
|
+
options[:code] = c
|
16
|
+
end
|
17
|
+
x.on("-h", "Show this message") do
|
18
|
+
puts op
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
end
|
22
|
+
begin
|
23
|
+
op.parse!(ARGV)
|
24
|
+
rescue
|
25
|
+
puts "Could not parse command line arguments."
|
26
|
+
end
|
27
|
+
|
28
|
+
ms = Mapleseed::Base.new
|
29
|
+
case options[:mode]
|
30
|
+
when :repl
|
31
|
+
# puts "Starting interactive interpreter..."
|
32
|
+
# ms.repl
|
33
|
+
when :file
|
34
|
+
puts "Running file..."
|
35
|
+
ms.load_file(options[:file])
|
36
|
+
when :code
|
37
|
+
puts "Interpreting code..."
|
38
|
+
ms.run(options[:code])
|
39
|
+
end
|
data/lib/mapleseed.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "mapleseed", "interpreter.rb"))
|
2
|
+
|
3
|
+
module Mapleseed
|
4
|
+
# loads and interprets Whirl code
|
5
|
+
class Base
|
6
|
+
|
7
|
+
# initialize the interpreter
|
8
|
+
def initialize
|
9
|
+
@interpreter = Interpreter.new
|
10
|
+
end
|
11
|
+
|
12
|
+
# run the given code
|
13
|
+
def run(code)
|
14
|
+
@interpreter.run(code)
|
15
|
+
end
|
16
|
+
|
17
|
+
# load code from a file and run it
|
18
|
+
def load_file(file_path)
|
19
|
+
code = File.open(file_path) { |f| f.read }
|
20
|
+
run(code)
|
21
|
+
end
|
22
|
+
|
23
|
+
# interactive read-evaluate-print loop
|
24
|
+
def repl
|
25
|
+
throw "Unimplemented"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "memory.rb"))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "ring.rb"))
|
3
|
+
|
4
|
+
module Mapleseed
|
5
|
+
#interprets Whirl code
|
6
|
+
class Interpreter
|
7
|
+
attr_reader :memory
|
8
|
+
attr_accessor :memory_position, :program_position,
|
9
|
+
:input_stream, :output_stream
|
10
|
+
|
11
|
+
# initializes the interpreter
|
12
|
+
def initialize
|
13
|
+
@memory = Memory.new
|
14
|
+
@input_stream = $stdin
|
15
|
+
@output_stream = $stdout
|
16
|
+
initialize_environment
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize_environment
|
20
|
+
@memory.clear
|
21
|
+
@op_ring = OpRing.new(self)
|
22
|
+
@math_ring = MathRing.new(self)
|
23
|
+
@memory_position = 0
|
24
|
+
@program_position = 0
|
25
|
+
@code = ""
|
26
|
+
@execute = false
|
27
|
+
@current_ring = @op_ring
|
28
|
+
end
|
29
|
+
|
30
|
+
# run a given piece of code
|
31
|
+
def run(code)
|
32
|
+
@code += code.delete "^01"
|
33
|
+
catch :quit do
|
34
|
+
evaluate_code
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# evaluate each instruction in the current code
|
39
|
+
def evaluate_code
|
40
|
+
while ((0 <= @program_position) and (@program_position < @code.length))
|
41
|
+
evaluate_instruction(@code[@program_position])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# evaluate an individual instruction
|
46
|
+
def evaluate_instruction(instruction)
|
47
|
+
if instruction == "0"
|
48
|
+
@current_ring.switch_direction
|
49
|
+
if @execute
|
50
|
+
@current_ring.execute
|
51
|
+
@current_ring == @op_ring ? @current_ring = @math_ring : @current_ring = @op_ring
|
52
|
+
@execute = false
|
53
|
+
else
|
54
|
+
@execute = true
|
55
|
+
end
|
56
|
+
elsif instruction == "1"
|
57
|
+
@current_ring.rotate
|
58
|
+
@execute = false
|
59
|
+
end
|
60
|
+
@program_position += 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Mapleseed
|
2
|
+
# memory for Whirl interpreter
|
3
|
+
class Memory
|
4
|
+
|
5
|
+
# initialize the memory
|
6
|
+
def initialize
|
7
|
+
clear
|
8
|
+
end
|
9
|
+
|
10
|
+
# get the value at the given address
|
11
|
+
def get(address)
|
12
|
+
unless @mem.has_key?(address)
|
13
|
+
set(address, 0)
|
14
|
+
end
|
15
|
+
return @mem[address]
|
16
|
+
end
|
17
|
+
|
18
|
+
# set the given address to a certain value
|
19
|
+
def set(address, value)
|
20
|
+
@mem[address] = value
|
21
|
+
end
|
22
|
+
|
23
|
+
# clear the memory
|
24
|
+
def clear
|
25
|
+
@mem = {}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
module Mapleseed
|
2
|
+
# base class for whirl command rings
|
3
|
+
class Ring
|
4
|
+
|
5
|
+
# initialize the ring
|
6
|
+
def initialize(interpreter)
|
7
|
+
@position = 0
|
8
|
+
@value = 0
|
9
|
+
@direction = 1
|
10
|
+
@commands = []
|
11
|
+
@interpreter = interpreter
|
12
|
+
end
|
13
|
+
|
14
|
+
# change the direction of the ring
|
15
|
+
def switch_direction
|
16
|
+
@direction *= -1
|
17
|
+
end
|
18
|
+
|
19
|
+
# rotate the ring in the given direction
|
20
|
+
def rotate
|
21
|
+
@position += @direction
|
22
|
+
if @position == @commands.length
|
23
|
+
@position = 0
|
24
|
+
elsif @position == -1
|
25
|
+
@position = @commands.length - 1
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute
|
30
|
+
if @position < @commands.length
|
31
|
+
send @commands[@position]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# command ring for whirl operations
|
37
|
+
class OpRing < Ring
|
38
|
+
|
39
|
+
# initialize commands for operation ring
|
40
|
+
def initialize(interpreter)
|
41
|
+
super(interpreter)
|
42
|
+
@commands = [:noop, :exit, :one, :zero, :load, :store, :p_add, :d_add, :logic, :if, :int_io, :asc_io]
|
43
|
+
end
|
44
|
+
|
45
|
+
# do nothing
|
46
|
+
def noop
|
47
|
+
#...
|
48
|
+
end
|
49
|
+
|
50
|
+
# exit the program
|
51
|
+
def exit
|
52
|
+
throw :quit
|
53
|
+
end
|
54
|
+
|
55
|
+
# set the ring value to 1
|
56
|
+
def one
|
57
|
+
@value = 1
|
58
|
+
end
|
59
|
+
|
60
|
+
# set the ring value to 0
|
61
|
+
def zero
|
62
|
+
@value = 0
|
63
|
+
end
|
64
|
+
|
65
|
+
# set the ring value to the current memory value
|
66
|
+
def load
|
67
|
+
@value = @interpreter.memory.get(@interpreter.memory_position)
|
68
|
+
end
|
69
|
+
|
70
|
+
# set the current value in memory to the ring value
|
71
|
+
def store
|
72
|
+
@interpreter.memory.set(@interpreter.memory_position, @value)
|
73
|
+
end
|
74
|
+
|
75
|
+
# change location in the program
|
76
|
+
def p_add
|
77
|
+
@interpreter.program_position += @value - 1
|
78
|
+
if @interpreter.program_position < 0
|
79
|
+
@interpreter.program_position = 0
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# change location in memory
|
84
|
+
def d_add
|
85
|
+
@interpreter.memory_position += @value
|
86
|
+
end
|
87
|
+
|
88
|
+
# logical AND
|
89
|
+
def logic
|
90
|
+
if @interpreter.memory.get(@interpreter.memory_position) != 0 and @value != 0
|
91
|
+
@value = 1
|
92
|
+
else
|
93
|
+
@value = 0
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# if value in memory is not 0, add ring value to program position
|
98
|
+
def if
|
99
|
+
if @interpreter.memory.get(@interpreter.memory_position) != 0
|
100
|
+
p_add
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# if ring value is 0, set memory value to integer input, otherwise
|
105
|
+
# print memory value as an integer
|
106
|
+
def int_io
|
107
|
+
if @value == 0
|
108
|
+
str = @interpreter.input_stream.gets.chomp
|
109
|
+
@interpreter.memory.set(@interpreter.memory_position, str.to_i)
|
110
|
+
else
|
111
|
+
@interpreter.output_stream.print @interpreter.memory.get(@interpreter.memory_position)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# if ring value is 0, set memory value to character input, otherwise
|
116
|
+
# print memory value as an character
|
117
|
+
def asc_io
|
118
|
+
if @value == 0
|
119
|
+
str = @interpreter.input_stream.getc
|
120
|
+
@interpreter.memory.set(@interpreter.memory_position, str)
|
121
|
+
else
|
122
|
+
@interpreter.output_stream.putc @interpreter.memory.get(@interpreter.memory_position)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# command ring for whirl math operations
|
128
|
+
class MathRing < Ring
|
129
|
+
|
130
|
+
# initialize commands for math ring
|
131
|
+
def initialize(interpreter)
|
132
|
+
super(interpreter)
|
133
|
+
@commands = [:noop, :load, :store, :add, :mult, :div, :zero, :lt, :gt, :equal, :not, :neg]
|
134
|
+
end
|
135
|
+
|
136
|
+
# do nothing
|
137
|
+
def noop
|
138
|
+
#...
|
139
|
+
end
|
140
|
+
|
141
|
+
# set the ring value to the current memory value
|
142
|
+
def load
|
143
|
+
@value = @interpreter.memory.get(@interpreter.memory_position)
|
144
|
+
end
|
145
|
+
|
146
|
+
# set the current value in memory to the ring value
|
147
|
+
def store
|
148
|
+
@interpreter.memory.set(@interpreter.memory_position, @value)
|
149
|
+
end
|
150
|
+
|
151
|
+
# set ring value += memory value
|
152
|
+
def add
|
153
|
+
@value += @interpreter.memory.get(@interpreter.memory_position)
|
154
|
+
end
|
155
|
+
|
156
|
+
# set ring value *= memory value
|
157
|
+
def mult
|
158
|
+
@value *= @interpreter.memory.get(@interpreter.memory_position)
|
159
|
+
end
|
160
|
+
|
161
|
+
# set ring value /= memory value
|
162
|
+
def div
|
163
|
+
@value /= @interpreter.memory.get(@interpreter.memory_position)
|
164
|
+
end
|
165
|
+
|
166
|
+
# set ring value to 0
|
167
|
+
def zero
|
168
|
+
@value = 0
|
169
|
+
end
|
170
|
+
|
171
|
+
# if ring value is less than memory value, set value to 1, otherwise 0
|
172
|
+
def lt
|
173
|
+
if @value < @interpreter.memory.get(@interpreter.memory_position)
|
174
|
+
@value = 1
|
175
|
+
else
|
176
|
+
@value = 0
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
# if ring value is greater than memory value, set value to 1, otherwise 0
|
181
|
+
def gt
|
182
|
+
if @value > @interpreter.memory.get(@interpreter.memory_position)
|
183
|
+
@value = 1
|
184
|
+
else
|
185
|
+
@value = 0
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# if ring value is equal to memory value, set value to 1, otherwise 0
|
190
|
+
def equal
|
191
|
+
if @value == @interpreter.memory.get(@interpreter.memory_position)
|
192
|
+
@value = 1
|
193
|
+
else
|
194
|
+
@value = 0
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# if ring value is not 0, set value to 1, otherwise 0
|
199
|
+
def not
|
200
|
+
if @value == 0
|
201
|
+
@value = 1
|
202
|
+
else
|
203
|
+
@value = 0
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# inverse ring value
|
208
|
+
def neg
|
209
|
+
@value *= -1
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
data/mapleseed.gemspec
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{mapleseed}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Chris ONeal"]
|
12
|
+
s.date = %q{2011-06-09}
|
13
|
+
s.default_executable = %q{mapleseed}
|
14
|
+
s.description = %q{A simple Whirl interpreter}
|
15
|
+
s.email = %q{ctoneal@gmail.com}
|
16
|
+
s.executables = ["mapleseed"]
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
"Gemfile",
|
23
|
+
"Gemfile.lock",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"bin/mapleseed",
|
28
|
+
"lib/mapleseed.rb",
|
29
|
+
"lib/mapleseed/interpreter.rb",
|
30
|
+
"lib/mapleseed/memory.rb",
|
31
|
+
"lib/mapleseed/ring.rb",
|
32
|
+
"mapleseed.gemspec",
|
33
|
+
"test/helper.rb",
|
34
|
+
"test/test_mapleseed.rb"
|
35
|
+
]
|
36
|
+
s.homepage = %q{http://github.com/ctoneal/mapleseed}
|
37
|
+
s.licenses = ["MIT"]
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = %q{1.6.2}
|
40
|
+
s.summary = %q{A Whirl interpreter in Ruby}
|
41
|
+
s.test_files = [
|
42
|
+
"test/helper.rb",
|
43
|
+
"test/test_mapleseed.rb"
|
44
|
+
]
|
45
|
+
|
46
|
+
if s.respond_to? :specification_version then
|
47
|
+
s.specification_version = 3
|
48
|
+
|
49
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
51
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
52
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
53
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
54
|
+
else
|
55
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
56
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
57
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
58
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
59
|
+
end
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
62
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
63
|
+
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
64
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'test/unit'
|
11
|
+
require 'shoulda'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
|
+
require 'mapleseed'
|
16
|
+
|
17
|
+
class Test::Unit::TestCase
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mapleseed
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Chris ONeal
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-06-09 00:00:00.000000000 -05:00
|
13
|
+
default_executable: mapleseed
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: shoulda
|
17
|
+
requirement: &7584708 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *7584708
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: bundler
|
28
|
+
requirement: &7583712 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *7583712
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: jeweler
|
39
|
+
requirement: &7579488 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.5.2
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *7579488
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rcov
|
50
|
+
requirement: &7578780 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *7578780
|
59
|
+
description: A simple Whirl interpreter
|
60
|
+
email: ctoneal@gmail.com
|
61
|
+
executables:
|
62
|
+
- mapleseed
|
63
|
+
extensions: []
|
64
|
+
extra_rdoc_files:
|
65
|
+
- README.rdoc
|
66
|
+
files:
|
67
|
+
- .document
|
68
|
+
- Gemfile
|
69
|
+
- Gemfile.lock
|
70
|
+
- README.rdoc
|
71
|
+
- Rakefile
|
72
|
+
- VERSION
|
73
|
+
- bin/mapleseed
|
74
|
+
- lib/mapleseed.rb
|
75
|
+
- lib/mapleseed/interpreter.rb
|
76
|
+
- lib/mapleseed/memory.rb
|
77
|
+
- lib/mapleseed/ring.rb
|
78
|
+
- mapleseed.gemspec
|
79
|
+
- test/helper.rb
|
80
|
+
- test/test_mapleseed.rb
|
81
|
+
has_rdoc: true
|
82
|
+
homepage: http://github.com/ctoneal/mapleseed
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
segments:
|
96
|
+
- 0
|
97
|
+
hash: -565126381
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 1.6.2
|
107
|
+
signing_key:
|
108
|
+
specification_version: 3
|
109
|
+
summary: A Whirl interpreter in Ruby
|
110
|
+
test_files:
|
111
|
+
- test/helper.rb
|
112
|
+
- test/test_mapleseed.rb
|