jit_buffer 1.0.2 → 1.0.4
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/lib/jit_buffer.rb +9 -4
- data/test/jit_buffer_test.rb +44 -1
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e21eec19f328c27e2b584d6c4644d405086e042126be6f295c27e38b2b228429
|
|
4
|
+
data.tar.gz: c5a8593f5f8f800c495af6020e59a356edab4fca5ffbe82b57baef0f7781eb09
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ad0deb2b19ea936057da4c21a2d06f3ccbf9c84204cd51e0776e9d1f93a99417a068836c0a9d595acec5084776e52d685929167021e6182bac275cc0022a5c88
|
|
7
|
+
data.tar.gz: 017c1de99e6be6734445a1ec1474eb3ee640533f7d72906f5838c36724b03b27d183c75037befbd676f1beed065aaf0d3a6334456c92ce58f7ff1860c2f03dcc
|
data/lib/jit_buffer.rb
CHANGED
|
@@ -8,7 +8,7 @@ class Fiddle::Function
|
|
|
8
8
|
end unless Fiddle::Function.method_defined?(:to_proc)
|
|
9
9
|
|
|
10
10
|
class JITBuffer
|
|
11
|
-
VERSION = '1.0.
|
|
11
|
+
VERSION = '1.0.4'
|
|
12
12
|
|
|
13
13
|
class Exception < StandardError
|
|
14
14
|
end
|
|
@@ -26,6 +26,7 @@ class JITBuffer
|
|
|
26
26
|
PROT_WRITE = 0x02
|
|
27
27
|
PROT_EXEC = 0x04
|
|
28
28
|
|
|
29
|
+
MAP_SHARED = 0x01
|
|
29
30
|
MAP_PRIVATE = 0x02
|
|
30
31
|
|
|
31
32
|
if RUBY_PLATFORM =~ /darwin/
|
|
@@ -93,7 +94,7 @@ class JITBuffer
|
|
|
93
94
|
super(MMAP.mmap_buffer(size), size)
|
|
94
95
|
end
|
|
95
96
|
|
|
96
|
-
attr_reader :pos
|
|
97
|
+
attr_reader :pos, :size
|
|
97
98
|
|
|
98
99
|
def initialize memory, size
|
|
99
100
|
@writeable = false
|
|
@@ -103,6 +104,10 @@ class JITBuffer
|
|
|
103
104
|
executable!
|
|
104
105
|
end
|
|
105
106
|
|
|
107
|
+
def [] a, b
|
|
108
|
+
@memory[a, b]
|
|
109
|
+
end
|
|
110
|
+
|
|
106
111
|
def putc byte
|
|
107
112
|
raise(ReadOnlyException, "Buffer is read only!") unless @writeable
|
|
108
113
|
raise(OutOfBoundsException, "Buffer full! #{pos} - #{@size}") if pos >= @size
|
|
@@ -112,7 +117,7 @@ class JITBuffer
|
|
|
112
117
|
|
|
113
118
|
def write bytes
|
|
114
119
|
raise(ReadOnlyException, "Buffer is read only!") unless @writeable
|
|
115
|
-
raise OutOfBoundsException if pos + bytes.bytesize
|
|
120
|
+
raise OutOfBoundsException if pos + bytes.bytesize > @size
|
|
116
121
|
@memory[pos, bytes.length] = bytes
|
|
117
122
|
@pos += bytes.bytesize
|
|
118
123
|
end
|
|
@@ -125,7 +130,7 @@ class JITBuffer
|
|
|
125
130
|
end
|
|
126
131
|
|
|
127
132
|
def read len
|
|
128
|
-
raise(OutOfBoundsException, "You've gone too far!") if pos + len
|
|
133
|
+
raise(OutOfBoundsException, "You've gone too far!") if pos + len > @size
|
|
129
134
|
x = @memory[pos, pos + len]
|
|
130
135
|
@pos += len
|
|
131
136
|
x
|
data/test/jit_buffer_test.rb
CHANGED
|
@@ -2,6 +2,49 @@ require "helper"
|
|
|
2
2
|
require "jit_buffer"
|
|
3
3
|
|
|
4
4
|
class JITBufferTest < Minitest::Test
|
|
5
|
+
def test_fill_buffer_with_putc
|
|
6
|
+
jit = JITBuffer.new 4096
|
|
7
|
+
str = [0xCC] * 4096
|
|
8
|
+
jit.writeable!
|
|
9
|
+
str.each { |c| jit.putc c }
|
|
10
|
+
assert_equal 4096, jit.pos
|
|
11
|
+
jit.seek 0
|
|
12
|
+
|
|
13
|
+
bytes = []
|
|
14
|
+
4096.times { bytes << (jit.getc & 0xFF) }
|
|
15
|
+
assert_equal 4096, jit.pos
|
|
16
|
+
assert_equal str, bytes
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_fill_buffer_read_with_getc
|
|
20
|
+
jit = JITBuffer.new 4096
|
|
21
|
+
str = ([0xCC] * 4096).pack("C*")
|
|
22
|
+
jit.writeable!
|
|
23
|
+
jit.write(str)
|
|
24
|
+
assert_equal 4096, jit.pos
|
|
25
|
+
jit.seek 0
|
|
26
|
+
|
|
27
|
+
bytes = []
|
|
28
|
+
4096.times { bytes << jit.getc }
|
|
29
|
+
assert_equal 4096, jit.pos
|
|
30
|
+
assert_equal str, bytes.pack("C*")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_fill_buffer
|
|
34
|
+
jit = JITBuffer.new 4096
|
|
35
|
+
str = ([0xCC] * 4096).pack("C*")
|
|
36
|
+
jit.writeable!
|
|
37
|
+
jit.write(str)
|
|
38
|
+
assert_equal 4096, jit.pos
|
|
39
|
+
jit.seek 0
|
|
40
|
+
assert_equal str, jit.read(4096)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_size
|
|
44
|
+
jit = JITBuffer.new 4096
|
|
45
|
+
assert_equal 4096, jit.size
|
|
46
|
+
end
|
|
47
|
+
|
|
5
48
|
def test_make_writeable
|
|
6
49
|
jit = JITBuffer.new 4096
|
|
7
50
|
jit.writeable!
|
|
@@ -60,7 +103,7 @@ class JITBufferTest < Minitest::Test
|
|
|
60
103
|
|
|
61
104
|
jit.executable!
|
|
62
105
|
func = Fiddle::Function.new(jit.to_i + 8, [], Fiddle::TYPE_INT)
|
|
63
|
-
assert_equal
|
|
106
|
+
assert_equal 0x2b, func.call
|
|
64
107
|
end
|
|
65
108
|
|
|
66
109
|
def test_invalid_write
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jit_buffer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Aaron Patterson
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-01-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -72,7 +72,7 @@ homepage: https://github.com/tenderlove/jit_buffer
|
|
|
72
72
|
licenses:
|
|
73
73
|
- Apache-2.0
|
|
74
74
|
metadata: {}
|
|
75
|
-
post_install_message:
|
|
75
|
+
post_install_message:
|
|
76
76
|
rdoc_options: []
|
|
77
77
|
require_paths:
|
|
78
78
|
- lib
|
|
@@ -87,8 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
88
|
version: '0'
|
|
89
89
|
requirements: []
|
|
90
|
-
rubygems_version: 3.0.
|
|
91
|
-
signing_key:
|
|
90
|
+
rubygems_version: 3.5.0.dev
|
|
91
|
+
signing_key:
|
|
92
92
|
specification_version: 4
|
|
93
93
|
summary: A JIT Buffer object for Ruby.
|
|
94
94
|
test_files:
|