jit_buffer 1.0.3 → 1.0.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -2
  3. data/lib/jit_buffer.rb +15 -10
  4. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 042d1a4c8ee681237a3829d1ae950a726558383b26262d828aab558e6bb51bfa
4
- data.tar.gz: 7ef264b37a228f8845938c7d10162bb4b39aee153dd8f8a11b59774a1688423b
3
+ metadata.gz: 83c506373263745dc1425c011b5c87fb19e09056aa15193397e7a947490c6f69
4
+ data.tar.gz: 1b0b9ae7fba8f3a3da5eb92cd426e411cfdce42c7e6142c9b42308dd59e61cc8
5
5
  SHA512:
6
- metadata.gz: 5c3eb5c03d5c91ed27cb1dd13448e6a5ef95ade94388e9fd0f50c6bcda6d7d449432b0d1c06425ca5c795f9df74e19465ca6823f6d34a18023557437ae3e7bc3
7
- data.tar.gz: c57d3e2fc3c0102b3de9a9f6a132b11d3b77d0d57653845ede834035b8fdff95ea2e633e140240fab56e01e50cef99d385c97eea0241d4ab2a219a737efb3d93
6
+ metadata.gz: ab2ec25089b2a6037ca5c266e2cd51dc1228ab224c0662a768d7692491d9178d9d5491750c184090e9ec892d6dead2cca23dae89093cd90ec829262d1a3287ac
7
+ data.tar.gz: 3ca332072bdb7fecd76b5978ac6d39058f509ae61ab05a4539c1ba1548bea0d81a3fadac5e48c8b622a348a6f6931362f511f79f8611a4283f6e9e8882077066
data/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  This is a general purpose JIT Buffer object for building JITs in Ruby.
4
4
 
5
- Currently only works on macOS though I'll make it work on Linux too.
6
-
7
5
  ## Usage
8
6
 
9
7
  Create a JIT Buffer, then specify the size. The JIT Buffer can only be
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.3'
11
+ VERSION = '1.0.5'
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/
@@ -69,22 +70,22 @@ class JITBuffer
69
70
 
70
71
  if respond_to?(:pthread_jit_write_protect_np)
71
72
  # MacOS
72
- def self.set_writeable ptr
73
+ def self.set_writeable ptr, _
73
74
  MMAP.pthread_jit_write_protect_np 0
74
75
  end
75
76
 
76
- def self.set_executable ptr
77
+ def self.set_executable ptr, size
77
78
  MMAP.pthread_jit_write_protect_np 1
78
- MMAP.sys_icache_invalidate ptr, ptr.size
79
+ MMAP.sys_icache_invalidate ptr, size
79
80
  end
80
81
  else
81
82
  # Linux
82
- def self.set_writeable ptr
83
- MMAP.mprotect ptr, ptr.size, PROT_READ | PROT_WRITE
83
+ def self.set_writeable ptr, size
84
+ MMAP.mprotect ptr, size, PROT_READ | PROT_WRITE
84
85
  end
85
86
 
86
- def self.set_executable ptr
87
- MMAP.mprotect ptr, ptr.size, PROT_READ | PROT_EXEC
87
+ def self.set_executable ptr, size
88
+ MMAP.mprotect ptr, size, PROT_READ | PROT_EXEC
88
89
  end
89
90
  end
90
91
  end
@@ -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
@@ -140,12 +145,12 @@ class JITBuffer
140
145
  end
141
146
 
142
147
  def executable!
143
- MMAP.set_executable @memory.to_i
148
+ MMAP.set_executable @memory.to_i, @size
144
149
  @writeable = false
145
150
  end
146
151
 
147
152
  def writeable!
148
- MMAP.set_writeable @memory.to_i
153
+ MMAP.set_writeable @memory.to_i, @size
149
154
  @writeable = true
150
155
  end
151
156
 
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.3
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-01 00:00:00.000000000 Z
11
+ date: 2023-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  requirements: []
90
- rubygems_version: 3.4.0.dev
90
+ rubygems_version: 3.5.0.dev
91
91
  signing_key:
92
92
  specification_version: 4
93
93
  summary: A JIT Buffer object for Ruby.