Class: AsmJIT::CodeHolder
- Inherits:
-
Object
- Object
- AsmJIT::CodeHolder
- Defined in:
- lib/asmjit.rb,
ext/asmjit/asmjit.cc
Instance Method Summary collapse
- #assembler ⇒ Object
- #binary ⇒ Object
- #def_class(arity, method_name: :call) ⇒ Object
- #def_method(mod, name, arity_val) ⇒ Object
- #def_module(arity, method_name: :call) ⇒ Object
- #initialize ⇒ Object constructor
- #logger ⇒ Object
- #logger=(object) ⇒ Object
- #to_fiddle(inputs: nil, output: nil) ⇒ Object
- #to_ptr ⇒ Object
Constructor Details
#initialize ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'ext/asmjit/asmjit.cc', line 108 VALUE code_holder_initialize(VALUE self) { CodeHolderWrapper *wrapper; TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper); CodeHolder *code = wrapper->code; code->init(jit_runtime.environment()); return self; } |
Instance Method Details
#assembler ⇒ Object
14 15 16 |
# File 'lib/asmjit.rb', line 14 def assembler X86::Assembler.new(self) end |
#binary ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'ext/asmjit/asmjit.cc', line 151 VALUE code_holder_binary(VALUE self) { CodeHolderWrapper *wrapper; TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper); CodeHolder *code = wrapper->code; CodeBuffer buffer = code->sectionById(0)->buffer(); return rb_str_new( reinterpret_cast<const char *>(buffer.data()), buffer.size() ); } |
#def_class(arity, method_name: :call) ⇒ Object
34 35 36 37 38 |
# File 'lib/asmjit.rb', line 34 def def_class(arity, method_name: :call) mod = Class.new self.def_method(mod, method_name, arity) mod end |
#def_method(mod, name, arity_val) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'ext/asmjit/asmjit.cc', line 132 VALUE code_holder_define_method(VALUE self, VALUE mod, VALUE name, VALUE arity_val) { CodeHolderWrapper *wrapper; TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper); CodeHolder *code = wrapper->code; int arity = FIX2INT(arity_val); ID id = rb_sym2id(name); VALUE (*fn)(ANYARGS); jit_runtime.add(&fn, code); // avoid cxxanyargs #undef rb_define_method_id rb_define_method_id(mod, id, fn, arity); return name; } |
#def_module(arity, method_name: :call) ⇒ Object
28 29 30 31 32 |
# File 'lib/asmjit.rb', line 28 def def_module(arity, method_name: :call) mod = Module.new self.def_method(mod, method_name, arity) mod end |
#logger ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'ext/asmjit/asmjit.cc', line 97 VALUE code_holder_get_logger(VALUE self) { CodeHolderWrapper *wrapper; TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper); if (wrapper->logger) { return wrapper->logger->obj; } else { return Qnil; } } |
#logger=(object) ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'ext/asmjit/asmjit.cc', line 79 VALUE code_holder_set_logger(VALUE self, VALUE object) { CodeHolderWrapper *wrapper; TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper); if (wrapper->logger) { wrapper->code->resetLogger(); delete wrapper->logger; } if (RTEST(object)) { wrapper->logger = new RubyLogger(object); wrapper->logger->setFlags(FormatFlags::kHexImms); wrapper->code->setLogger(wrapper->logger); } return object; } |
#to_fiddle(inputs: nil, output: nil) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/asmjit.rb', line 18 def to_fiddle(inputs: nil, output: nil) ptr = to_ptr Fiddle::Function.new( ptr, inputs || [], output || Fiddle::TYPE_INT ) end |
#to_ptr ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 |
# File 'ext/asmjit/asmjit.cc', line 118 VALUE code_holder_to_ptr(VALUE self) { CodeHolderWrapper *wrapper; TypedData_Get_Struct(self, CodeHolderWrapper, &code_holder_type, wrapper); CodeHolder *code = wrapper->code; int (*fn)(void); jit_runtime.add(&fn, code); return ULL2NUM(uintptr_t(fn)); } |