1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Allow changing conversion macro in MJIT bindgen

This is necessary for object shapes.
This commit is contained in:
Takashi Kokubun 2022-09-24 00:02:19 +09:00
parent 3ddab3a84e
commit 7588f21851
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD

View file

@ -102,16 +102,16 @@ class BindingGenerator
# @param src_path [String] # @param src_path [String]
# @param uses [Array<String>] # @param uses [Array<String>]
# @param ints [Array<String>] # @param values [Hash{ Symbol => Array<String> }]
# @param types [Array<String>] # @param types [Array<String>]
# @param dynamic_types [Array<String>] #ifdef-dependent immediate types, which need Primitive.cexpr! for type detection # @param dynamic_types [Array<String>] #ifdef-dependent immediate types, which need Primitive.cexpr! for type detection
# @param skip_fields [Hash{ Symbol => Array<String> }] Struct fields that are skipped from bindgen # @param skip_fields [Hash{ Symbol => Array<String> }] Struct fields that are skipped from bindgen
# @param ruby_fields [Hash{ Symbol => Array<String> }] Struct VALUE fields that are considered Ruby objects # @param ruby_fields [Hash{ Symbol => Array<String> }] Struct VALUE fields that are considered Ruby objects
def initialize(src_path:, uses:, ints:, types:, dynamic_types:, skip_fields:, ruby_fields:) def initialize(src_path:, uses:, values:, types:, dynamic_types:, skip_fields:, ruby_fields:)
@preamble, @postamble = split_ambles(src_path) @preamble, @postamble = split_ambles(src_path)
@src = String.new @src = String.new
@uses = uses.sort @uses = uses.sort
@ints = ints.sort @values = values.transform_values(&:sort)
@types = types.sort @types = types.sort
@dynamic_types = dynamic_types.sort @dynamic_types = dynamic_types.sort
@skip_fields = skip_fields.transform_keys(&:to_s) @skip_fields = skip_fields.transform_keys(&:to_s)
@ -130,12 +130,14 @@ class BindingGenerator
println println
end end
# Define int macros/enums # Define macros/enums
@ints.each do |int| @values.each do |type, values|
println " def C.#{int}" values.each do |value|
println " Primitive.cexpr! %q{ INT2NUM(#{int}) }" println " def C.#{value}"
println " end" println " Primitive.cexpr! %q{ #{type}2NUM(#{value}) }"
println println " end"
println
end
end end
# TODO: Support nested declarations # TODO: Support nested declarations
@ -329,15 +331,17 @@ generator = BindingGenerator.new(
USE_LAZY_LOAD USE_LAZY_LOAD
USE_RVARGC USE_RVARGC
], ],
ints: %w[ values: {
NOT_COMPILED_STACK_SIZE INT: %w[
VM_CALL_KW_SPLAT NOT_COMPILED_STACK_SIZE
VM_CALL_KW_SPLAT_bit VM_CALL_KW_SPLAT
VM_CALL_TAILCALL VM_CALL_KW_SPLAT_bit
VM_CALL_TAILCALL_bit VM_CALL_TAILCALL
VM_METHOD_TYPE_CFUNC VM_CALL_TAILCALL_bit
VM_METHOD_TYPE_ISEQ VM_METHOD_TYPE_CFUNC
], VM_METHOD_TYPE_ISEQ
],
},
types: %w[ types: %w[
CALL_DATA CALL_DATA
IC IC