relaton-un 2.1.0 → 2.2.0.pre.alpha.1
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.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +1 -1
- data/Gemfile +9 -0
- data/lib/relaton/un/token_generator.rb +25 -79
- data/lib/relaton/un/version.rb +1 -1
- data/lib/relaton/un/wasm/decoder.rb +434 -0
- data/lib/relaton/un/wasm/instance.rb +101 -0
- data/lib/relaton/un/wasm/interpreter.rb +613 -0
- data/lib/relaton/un/wasm/memory.rb +112 -0
- data/lib/relaton/un/wasm/module.rb +47 -0
- data/lib/relaton/un/wasm.rb +17 -0
- data/relaton-un.gemspec +3 -4
- metadata +13 -27
- data/.rubocop.yml +0 -12
- data/grammars/basicdoc.rng +0 -2140
- data/grammars/biblio-standoc.rng +0 -268
- data/grammars/biblio.rng +0 -2125
- data/grammars/relaton-un-compile.rng +0 -11
- data/grammars/relaton-un.rng +0 -122
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Un
|
|
5
|
+
module Wasm
|
|
6
|
+
class Memory
|
|
7
|
+
PAGE = 65_536
|
|
8
|
+
|
|
9
|
+
attr_reader :max_pages
|
|
10
|
+
|
|
11
|
+
def initialize(initial_pages:, max_pages: nil)
|
|
12
|
+
@pages = initial_pages
|
|
13
|
+
@max_pages = max_pages
|
|
14
|
+
@buf = String.new("\x00".b * (initial_pages * PAGE), encoding: Encoding::ASCII_8BIT)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def size_pages
|
|
18
|
+
@pages
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def grow(delta)
|
|
22
|
+
new_pages = @pages + delta
|
|
23
|
+
return -1 if @max_pages && new_pages > @max_pages
|
|
24
|
+
|
|
25
|
+
old = @pages
|
|
26
|
+
@pages = new_pages
|
|
27
|
+
@buf << ("\x00".b * (delta * PAGE))
|
|
28
|
+
old
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def read(addr, len)
|
|
32
|
+
bounds!(addr, len)
|
|
33
|
+
@buf.byteslice(addr, len)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def write(addr, bytes)
|
|
37
|
+
bytes = bytes.b
|
|
38
|
+
bounds!(addr, bytes.bytesize)
|
|
39
|
+
@buf.bytesplice(addr, bytes.bytesize, bytes)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def load_u8(addr)
|
|
43
|
+
bounds!(addr, 1)
|
|
44
|
+
@buf.getbyte(addr)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def load_i8(addr)
|
|
48
|
+
v = load_u8(addr)
|
|
49
|
+
v >= 0x80 ? v - 0x100 : v
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def load_u16(addr)
|
|
53
|
+
bounds!(addr, 2)
|
|
54
|
+
@buf.byteslice(addr, 2).unpack1("v")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def load_i16(addr)
|
|
58
|
+
v = load_u16(addr)
|
|
59
|
+
v >= 0x8000 ? v - 0x10000 : v
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def load_u32(addr)
|
|
63
|
+
bounds!(addr, 4)
|
|
64
|
+
@buf.byteslice(addr, 4).unpack1("V")
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def load_i32(addr)
|
|
68
|
+
v = load_u32(addr)
|
|
69
|
+
v >= 0x8000_0000 ? v - 0x1_0000_0000 : v
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def load_u64(addr)
|
|
73
|
+
bounds!(addr, 8)
|
|
74
|
+
@buf.byteslice(addr, 8).unpack1("Q<")
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def load_i64(addr)
|
|
78
|
+
v = load_u64(addr)
|
|
79
|
+
v >= 0x8000_0000_0000_0000 ? v - 0x1_0000_0000_0000_0000 : v
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def store_u8(addr, val)
|
|
83
|
+
bounds!(addr, 1)
|
|
84
|
+
@buf.setbyte(addr, val & 0xff)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def store_u16(addr, val)
|
|
88
|
+
bounds!(addr, 2)
|
|
89
|
+
@buf.bytesplice(addr, 2, [val & 0xffff].pack("v"))
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def store_u32(addr, val)
|
|
93
|
+
bounds!(addr, 4)
|
|
94
|
+
@buf.bytesplice(addr, 4, [val & 0xffff_ffff].pack("V"))
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def store_u64(addr, val)
|
|
98
|
+
bounds!(addr, 8)
|
|
99
|
+
@buf.bytesplice(addr, 8, [val & 0xffff_ffff_ffff_ffff].pack("Q<"))
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
private
|
|
103
|
+
|
|
104
|
+
def bounds!(addr, len)
|
|
105
|
+
return if addr >= 0 && addr + len <= @buf.bytesize
|
|
106
|
+
|
|
107
|
+
raise Trap, "out of bounds memory access (addr=#{addr}, len=#{len}, size=#{@buf.bytesize})"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Un
|
|
5
|
+
module Wasm
|
|
6
|
+
FuncType = Struct.new(:params, :results)
|
|
7
|
+
Import = Struct.new(:mod, :field, :kind, :desc)
|
|
8
|
+
Export = Struct.new(:name, :kind, :index)
|
|
9
|
+
Global = Struct.new(:type, :mutable, :init_expr)
|
|
10
|
+
Element = Struct.new(:table_idx, :offset_expr, :func_indices)
|
|
11
|
+
Data = Struct.new(:mem_idx, :offset_expr, :bytes)
|
|
12
|
+
Code = Struct.new(:locals, :body)
|
|
13
|
+
|
|
14
|
+
MemoryType = Struct.new(:initial, :max)
|
|
15
|
+
TableType = Struct.new(:elem_type, :initial, :max)
|
|
16
|
+
|
|
17
|
+
class Module
|
|
18
|
+
attr_reader :types, :imports, :function_type_indices, :tables, :memories,
|
|
19
|
+
:globals, :exports, :elements, :code, :data, :start
|
|
20
|
+
|
|
21
|
+
def initialize
|
|
22
|
+
@types = []
|
|
23
|
+
@imports = []
|
|
24
|
+
@function_type_indices = []
|
|
25
|
+
@tables = []
|
|
26
|
+
@memories = []
|
|
27
|
+
@globals = []
|
|
28
|
+
@exports = []
|
|
29
|
+
@elements = []
|
|
30
|
+
@code = []
|
|
31
|
+
@data = []
|
|
32
|
+
@start = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.parse(bytes)
|
|
36
|
+
Decoder.new(bytes).decode
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Number of imported functions (they precede module-defined functions
|
|
40
|
+
# in the funcidx space).
|
|
41
|
+
def imported_function_count
|
|
42
|
+
@imports.count { |i| i.kind == :func }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Relaton
|
|
4
|
+
module Un
|
|
5
|
+
module Wasm
|
|
6
|
+
class Trap < StandardError; end
|
|
7
|
+
class DecodeError < StandardError; end
|
|
8
|
+
class LinkError < StandardError; end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
require_relative "wasm/memory"
|
|
14
|
+
require_relative "wasm/decoder"
|
|
15
|
+
require_relative "wasm/module"
|
|
16
|
+
require_relative "wasm/interpreter"
|
|
17
|
+
require_relative "wasm/instance"
|
data/relaton-un.gemspec
CHANGED
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
|
15
15
|
"use using the IsoBibliographicItem model"
|
|
16
16
|
spec.homepage = "https://github.com/relaton/relaton-un"
|
|
17
17
|
spec.license = "BSD-2-Clause"
|
|
18
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 3.
|
|
18
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 3.3.0")
|
|
19
19
|
|
|
20
20
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
21
21
|
spec.metadata["source_code_uri"] = spec.homepage
|
|
@@ -34,8 +34,7 @@ Gem::Specification.new do |spec|
|
|
|
34
34
|
|
|
35
35
|
spec.add_dependency "addressable", "~> 2.8"
|
|
36
36
|
spec.add_dependency "faraday", "~> 2.7"
|
|
37
|
-
spec.add_dependency "relaton-bib", "~> 2.
|
|
38
|
-
spec.add_dependency "relaton-core", "~>
|
|
39
|
-
spec.add_dependency "wasmtime", "~> 41.0"
|
|
37
|
+
spec.add_dependency "relaton-bib", "~> 2.2.0.pre.alpha.1"
|
|
38
|
+
spec.add_dependency "relaton-core", "~> 2.2.0.pre.alpha.1"
|
|
40
39
|
end
|
|
41
40
|
# rubocop:enable Metrics/BlockLength
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: relaton-un
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.2.0.pre.alpha.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: addressable
|
|
@@ -44,42 +44,28 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 2.
|
|
47
|
+
version: 2.2.0.pre.alpha.1
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 2.
|
|
54
|
+
version: 2.2.0.pre.alpha.1
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: relaton-core
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
61
|
+
version: 2.2.0.pre.alpha.1
|
|
62
62
|
type: :runtime
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: wasmtime
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '41.0'
|
|
76
|
-
type: :runtime
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '41.0'
|
|
68
|
+
version: 2.2.0.pre.alpha.1
|
|
83
69
|
description: 'Relaton::Un: retrieve CC Standards for bibliographic use using the IsoBibliographicItem
|
|
84
70
|
model'
|
|
85
71
|
email:
|
|
@@ -92,7 +78,6 @@ files:
|
|
|
92
78
|
- ".github/workflows/release.yml"
|
|
93
79
|
- ".gitignore"
|
|
94
80
|
- ".rspec"
|
|
95
|
-
- ".rubocop.yml"
|
|
96
81
|
- CLAUDE.md
|
|
97
82
|
- Gemfile
|
|
98
83
|
- LICENSE.txt
|
|
@@ -101,11 +86,6 @@ files:
|
|
|
101
86
|
- bin/console
|
|
102
87
|
- bin/rspec
|
|
103
88
|
- bin/setup
|
|
104
|
-
- grammars/basicdoc.rng
|
|
105
|
-
- grammars/biblio-standoc.rng
|
|
106
|
-
- grammars/biblio.rng
|
|
107
|
-
- grammars/relaton-un-compile.rng
|
|
108
|
-
- grammars/relaton-un.rng
|
|
109
89
|
- lib/relaton/un.rb
|
|
110
90
|
- lib/relaton/un/bibdata.rb
|
|
111
91
|
- lib/relaton/un/bibitem.rb
|
|
@@ -122,6 +102,12 @@ files:
|
|
|
122
102
|
- lib/relaton/un/token_generator.rb
|
|
123
103
|
- lib/relaton/un/util.rb
|
|
124
104
|
- lib/relaton/un/version.rb
|
|
105
|
+
- lib/relaton/un/wasm.rb
|
|
106
|
+
- lib/relaton/un/wasm/decoder.rb
|
|
107
|
+
- lib/relaton/un/wasm/instance.rb
|
|
108
|
+
- lib/relaton/un/wasm/interpreter.rb
|
|
109
|
+
- lib/relaton/un/wasm/memory.rb
|
|
110
|
+
- lib/relaton/un/wasm/module.rb
|
|
125
111
|
- lib/relaton/un/wasm_v_bg.wasm
|
|
126
112
|
- relaton-un.gemspec
|
|
127
113
|
- resp.html
|
|
@@ -139,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
139
125
|
requirements:
|
|
140
126
|
- - ">="
|
|
141
127
|
- !ruby/object:Gem::Version
|
|
142
|
-
version: 3.
|
|
128
|
+
version: 3.3.0
|
|
143
129
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
144
130
|
requirements:
|
|
145
131
|
- - ">="
|
data/.rubocop.yml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# This project follows the Ribose OSS style guide.
|
|
2
|
-
# https://github.com/riboseinc/oss-guides
|
|
3
|
-
# All project-specific additions and overrides should be specified in this file.
|
|
4
|
-
|
|
5
|
-
require: rubocop-rails
|
|
6
|
-
|
|
7
|
-
inherit_from:
|
|
8
|
-
- https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
|
|
9
|
-
AllCops:
|
|
10
|
-
TargetRubyVersion: 3.2
|
|
11
|
-
Rails:
|
|
12
|
-
Enabled: false
|