rlang 0.4.1 → 0.6.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -3
  3. data/Gemfile.lock +4 -6
  4. data/README +11 -0
  5. data/README.md +18 -10
  6. data/bin/rlang +17 -5
  7. data/docs/RlangCompiler.md +5 -1
  8. data/docs/RlangManual.md +98 -20
  9. data/examples/fib/fib.rb +5 -1
  10. data/lib/builder/rlang/compiler.rb +2 -21
  11. data/lib/rlang/lib/array/array32.rb +59 -0
  12. data/lib/rlang/lib/array/array64.rb +56 -0
  13. data/lib/rlang/lib/array.rb +6 -0
  14. data/lib/rlang/lib/base64.rb +223 -0
  15. data/lib/rlang/lib/io.rb +75 -0
  16. data/lib/rlang/lib/kernel.rb +23 -0
  17. data/lib/rlang/lib/malloc.rb +12 -8
  18. data/lib/rlang/lib/memory.rb +102 -2
  19. data/lib/rlang/lib/object.rb +40 -4
  20. data/lib/rlang/lib/rlang.rb +29 -0
  21. data/lib/rlang/lib/rlang_core.rb +15 -0
  22. data/lib/rlang/lib/string.rb +106 -8
  23. data/lib/rlang/lib/type/i32.rb +43 -0
  24. data/lib/rlang/lib/type/i64.rb +2 -0
  25. data/lib/rlang/lib/unistd.rb +1 -2
  26. data/lib/rlang/lib/wasi.rb +184 -0
  27. data/lib/rlang/parser/attr.rb +9 -13
  28. data/lib/rlang/parser/const.rb +105 -1
  29. data/lib/rlang/parser/cvar.rb +11 -7
  30. data/lib/rlang/parser/data.rb +17 -6
  31. data/lib/rlang/parser/export.rb +4 -3
  32. data/lib/rlang/parser/ext/integer.rb +3 -1
  33. data/lib/rlang/parser/ext/type.rb +30 -1
  34. data/lib/rlang/parser/global.rb +10 -2
  35. data/lib/rlang/parser/ivar.rb +3 -7
  36. data/lib/rlang/parser/klass.rb +8 -35
  37. data/lib/rlang/parser/method.rb +36 -12
  38. data/lib/rlang/parser/module.rb +143 -0
  39. data/lib/rlang/parser/wgenerator.rb +462 -168
  40. data/lib/rlang/parser/wnode.rb +387 -142
  41. data/lib/rlang/parser/wtype.rb +30 -7
  42. data/lib/rlang/parser.rb +506 -231
  43. data/lib/rlang/version.rb +1 -1
  44. data/lib/rlang.rb +3 -0
  45. data/lib/ruby/mirror/rstring.rb +16 -0
  46. data/lib/utils/exceptions.rb +12 -0
  47. data/rlang.gemspec +4 -4
  48. metadata +25 -13
  49. data/lib/rlang/lib.rb +0 -11
data/lib/rlang/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rlang
2
- VERSION = "0.4.1"
2
+ VERSION = "0.6.0"
3
3
  end
data/lib/rlang.rb CHANGED
@@ -2,3 +2,6 @@ require_relative "./rlang/version"
2
2
  require_relative "./utils/log"
3
3
  require_relative "./rlang/parser"
4
4
  require_relative "./builder"
5
+
6
+ # Set up path to this file
7
+ RLANG_BASE_DIR = File.expand_path(File.dirname(__FILE__))
@@ -0,0 +1,16 @@
1
+ # Rlang WebAssembly compiler
2
+ # Copyright (c) 2019-2022, Laurent Julliard and contributors
3
+ # All rights reserved.
4
+
5
+ require 'wasmer'
6
+
7
+ class RString < String
8
+ # Turn a Rlang String object into a Ruby String mirror object
9
+ def initialize(wasm_instance, rlang_obj_addr)
10
+ stg_ptr = wasm_instance.exports.string_i_ptr.call(rlang_obj_addr)
11
+ stg_length = wasm_instance.exports.string_i_length.call(rlang_obj_addr)
12
+ mem8 = wasm_instance.exports.memory.uint8_view stg_ptr
13
+ ruby_stg = 0.upto(stg_length-1).collect {|i| mem8[i].chr}.join('')
14
+ super(ruby_stg)
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # Rubinius WebAssembly VM
2
+ # Copyright (c) 2019, Laurent Julliard and contributors
3
+ # All rights reserved.
4
+ #
5
+ # Rlang exceptions
6
+
7
+ class RlangSyntaxError < StandardError; end
8
+
9
+ def rlse(node, msg)
10
+ msg += "\nline #{node.location.line}: #{node.location.expression.source}"
11
+ raise RlangSyntaxError, msg, []
12
+ end
data/rlang.gemspec CHANGED
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = %q{A (subset of) Ruby to WebAssembly compiler}
12
12
  spec.description = %q{Rlang is meant to create fast and uncluttered WebAssembly code
13
- from the comfort of the Ruby language. It is actually made of two things: a supported
14
- subset of the Ruby language and a compiler transforming this Ruby subset in a valid
13
+ from the comfort of a Ruby-like language. It is actually made of two things: the Rlang
14
+ language that supports a subset of the Ruby language and a compiler transforming this Ruby subset in a valid
15
15
  and fully runnable WebAssembly module.}
16
16
  spec.homepage = "https://github.com/ljulliar/rlang"
17
17
  spec.license = "MPL-2.0"
@@ -31,11 +31,11 @@ Gem::Specification.new do |spec|
31
31
  spec.executables << "rlang"
32
32
  spec.require_paths = ["lib"]
33
33
 
34
- spec.add_runtime_dependency 'parser'
34
+ spec.add_runtime_dependency 'parser', "~> 3.1"
35
35
 
36
36
  spec.add_development_dependency "bundler", "~> 2.0"
37
37
  spec.add_development_dependency "rake", "~> 12.0"
38
38
  spec.add_development_dependency "minitest", "~> 5.0"
39
- spec.add_development_dependency "wasmer", "~> 0.3"
39
+ spec.add_development_dependency "wasmer", "~> 1.0"
40
40
  spec.add_development_dependency "simplecov", "~> 0.18"
41
41
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rlang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Julliard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-23 00:00:00.000000000 Z
11
+ date: 2022-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '3.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '3.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.3'
75
+ version: '1.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.3'
82
+ version: '1.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,9 +95,9 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0.18'
97
97
  description: "Rlang is meant to create fast and uncluttered WebAssembly code \n from
98
- the comfort of the Ruby language. It is actually made of two things: a supported
99
- \n subset of the Ruby language and a compiler transforming this Ruby subset in
100
- a valid \n and fully runnable WebAssembly module."
98
+ the comfort of a Ruby-like language. It is actually made of two things: the Rlang
99
+ \n language that supports a subset of the Ruby language and a compiler transforming
100
+ this Ruby subset in a valid \n and fully runnable WebAssembly module."
101
101
  email:
102
102
  - laurent@moldus.org
103
103
  executables:
@@ -112,6 +112,7 @@ files:
112
112
  - Gemfile
113
113
  - Gemfile.lock
114
114
  - LICENSE
115
+ - README
115
116
  - README.md
116
117
  - Rakefile
117
118
  - bin/rlang
@@ -130,16 +131,24 @@ files:
130
131
  - lib/builder/wat/builder.rb
131
132
  - lib/builder/wat/renderer.rb
132
133
  - lib/rlang.rb
133
- - lib/rlang/lib.rb
134
+ - lib/rlang/lib/array.rb
135
+ - lib/rlang/lib/array/array32.rb
136
+ - lib/rlang/lib/array/array64.rb
137
+ - lib/rlang/lib/base64.rb
138
+ - lib/rlang/lib/io.rb
139
+ - lib/rlang/lib/kernel.rb
134
140
  - lib/rlang/lib/malloc.c
135
141
  - lib/rlang/lib/malloc.rb
136
142
  - lib/rlang/lib/memory.rb
137
143
  - lib/rlang/lib/object.rb
144
+ - lib/rlang/lib/rlang.rb
145
+ - lib/rlang/lib/rlang_core.rb
138
146
  - lib/rlang/lib/string.rb
139
147
  - lib/rlang/lib/type.rb
140
148
  - lib/rlang/lib/type/i32.rb
141
149
  - lib/rlang/lib/type/i64.rb
142
150
  - lib/rlang/lib/unistd.rb
151
+ - lib/rlang/lib/wasi.rb
143
152
  - lib/rlang/parser.rb
144
153
  - lib/rlang/parser/attr.rb
145
154
  - lib/rlang/parser/const.rb
@@ -155,15 +164,18 @@ files:
155
164
  - lib/rlang/parser/lvar.rb
156
165
  - lib/rlang/parser/marg.rb
157
166
  - lib/rlang/parser/method.rb
167
+ - lib/rlang/parser/module.rb
158
168
  - lib/rlang/parser/wgenerator.rb
159
169
  - lib/rlang/parser/winstruction.rb
160
170
  - lib/rlang/parser/wnode.rb
161
171
  - lib/rlang/parser/wtree.rb
162
172
  - lib/rlang/parser/wtype.rb
163
173
  - lib/rlang/version.rb
174
+ - lib/ruby/mirror/rstring.rb
164
175
  - lib/simul/classes/data.rb
165
176
  - lib/simul/classes/global.rb
166
177
  - lib/simul/classes/memory.rb
178
+ - lib/utils/exceptions.rb
167
179
  - lib/utils/log.rb
168
180
  - rlang.gemspec
169
181
  homepage: https://github.com/ljulliar/rlang
@@ -188,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
200
  - !ruby/object:Gem::Version
189
201
  version: '0'
190
202
  requirements: []
191
- rubygems_version: 3.0.3
203
+ rubygems_version: 3.0.9
192
204
  signing_key:
193
205
  specification_version: 4
194
206
  summary: A (subset of) Ruby to WebAssembly compiler
data/lib/rlang/lib.rb DELETED
@@ -1,11 +0,0 @@
1
- # Rubinius WebAssembly VM
2
- # Copyright (c) 2019-2020, Laurent Julliard and contributors
3
- # All rights reserved.
4
-
5
- # Rlang standard library
6
- require_relative './lib/object'
7
- require_relative './lib/type'
8
- require_relative './lib/memory'
9
- require_relative './lib/unistd'
10
- require_relative './lib/malloc'
11
- require_relative './lib/string'