jit_buffer 1.0.3 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
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.