Skip to content

Commit 56e1285

Browse files
authored
Merge pull request #135 from sue445/fix_generated_code
Fix ruby_h_to_go
2 parents 0584da0 + 924e5ef commit 56e1285

File tree

12 files changed

+66
-27
lines changed

12 files changed

+66
-27
lines changed

.rubocop.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ AllCops:
1818
Gemspec/RequireMFA:
1919
Enabled: false
2020

21+
Layout/DotPosition:
22+
EnforcedStyle: trailing
23+
2124
Layout/HashAlignment:
2225
EnforcedColonStyle: table
2326
EnforcedHashRocketStyle: table

_tools/ruby_h_to_go/lib/ruby_h_to_go.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
require_relative "ruby_header_parser"
66

7-
require_relative "ruby_h_to_go/helper"
7+
require_relative "ruby_h_to_go/generator_helper"
88
require_relative "ruby_h_to_go/argument_definition"
99
require_relative "ruby_h_to_go/cli"
1010
require_relative "ruby_h_to_go/function_definition"

_tools/ruby_h_to_go/lib/ruby_h_to_go/argument_definition.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,22 @@ class ArgumentDefinition
77

88
def_delegators :@definition, :==, :type, :type=, :name, :name=, :pointer, :pointer=, :pointer?, :length, :length=
99

10-
include Helper
10+
include GeneratorHelper
1111

1212
# @param definition [RubyHeaderParser::ArgumentDefinition]
1313
def initialize(definition)
1414
@definition = definition
1515
end
1616

17-
# These are reserved in Go
1817
C_NAME_TO_GO_NAME = {
18+
# These are reserved in Go
1919
"var" => "v",
2020
"func" => "fun",
2121
"range" => "r",
2222
"type" => "r",
23+
24+
# Can't use "_" as a value
25+
"_" => "arg",
2326
}.freeze
2427

2528
# @return [String] Variable name available in Go

_tools/ruby_h_to_go/lib/ruby_h_to_go/function_definition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class FunctionDefinition
77

88
def_delegators :@definition, :==, :name, :name=, :definition, :definition=, :filepath, :filepath=
99

10-
include Helper
10+
include GeneratorHelper
1111

1212
# @param definition [RubyHeaderParser::FunctionDefinition]
1313
def initialize(definition)

_tools/ruby_h_to_go/lib/ruby_h_to_go/helper.rb renamed to _tools/ruby_h_to_go/lib/ruby_h_to_go/generator_helper.rb

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# frozen_string_literal: true
22

33
module RubyHToGo
4-
# helper methods for generating go coce
5-
module Helper
4+
# helper methods for generating go code
5+
module GeneratorHelper
66
# @param header_dir [String]
77
# @param ruby_header_file [String]
88
# @return [String]
99
def go_file_name(header_dir:, ruby_header_file:)
10-
ruby_header_file.delete_prefix(header_dir + File::SEPARATOR).gsub(File::SEPARATOR, "-").gsub(/\.h$/, ".go")
10+
ruby_header_file.delete_prefix(header_dir + File::SEPARATOR).gsub(File::SEPARATOR, "_").
11+
gsub(/\.h$/, "_generated.go")
1112
end
1213

1314
# @param str [String]
@@ -24,6 +25,11 @@ def generate_initial_go_file(go_file_path)
2425
return if File.exist?(go_file_path)
2526

2627
File.binwrite(go_file_path, <<~GO)
28+
// THE AUTOGENERATED LICENSE. ALL THE RIGHTS ARE RESERVED BY ROBOTS.
29+
30+
// WARNING: This file has automatically been generated
31+
// Code generated by ruby_h_to_go. DO NOT EDIT.
32+
2733
package ruby
2834
2935
/*
@@ -44,8 +50,6 @@ def generate_initial_go_file(go_file_path)
4450
# @param pointer [Symbol,nil] Whether pointer hint
4551
# @return [String]
4652
def ruby_c_type_to_go_type(typename, type: nil, pointer: nil)
47-
typename = typename.delete_prefix("struct ").delete_prefix("volatile ")
48-
4953
if pointer
5054
case typename
5155
when "char", "const char"
@@ -79,7 +83,7 @@ def ruby_c_type_to_go_type(typename, type: nil, pointer: nil)
7983
return "Longlong"
8084
when "unsigned LONG_LONG"
8185
return "Ulonglong"
82-
when /^VALUE\s*\(\*func\)\s*\(ANYARGS\)$/
86+
when /^VALUE\s*\(\*func\)\s*\(ANYARGS\)$/, "RUBY_DATA_FUNC"
8387
return "unsafe.Pointer"
8488
when /^[A-Z]+$/, "int"
8589
# e.g. VALUE
@@ -108,7 +112,7 @@ def cast_to_cgo_type(typename)
108112
return "C.Longlong"
109113
when "unsigned LONG_LONG"
110114
return "C.Ulonglong"
111-
when /^VALUE\s*\(\*func\)\s*\(ANYARGS\)$/
115+
when /^VALUE\s*\(\*func\)\s*\(ANYARGS\)$/, "RUBY_DATA_FUNC"
112116
return "toCPointer"
113117
end
114118

_tools/ruby_h_to_go/lib/ruby_h_to_go/struct_definition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class StructDefinition
77

88
def_delegators :@definition, :==, :name, :name=, :filepath, :filepath=
99

10-
include Helper
10+
include GeneratorHelper
1111

1212
# @param definition [RubyHeaderParser::StructDefinition]
1313
def initialize(definition)

_tools/ruby_h_to_go/lib/ruby_h_to_go/type_definition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class TypeDefinition
77

88
def_delegators :@definition, :==, :name, :name=, :filepath, :filepath=
99

10-
include Helper
10+
include GeneratorHelper
1111

1212
# @param definition [RubyHeaderParser::TypeDefinition]
1313
def initialize(definition)

_tools/ruby_h_to_go/lib/ruby_h_to_go/typeref_definition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class TyperefDefinition
77

88
def_delegators :@definition, :==, :type, :type=, :pointer, :pointer=, :pointer?
99

10-
include Helper
10+
include GeneratorHelper
1111

1212
# @param definition [RubyHeaderParser::TyperefDefinition]
1313
def initialize(definition)

_tools/ruby_h_to_go/lib/ruby_header_parser/data.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ def function_arg_pointer_hint(function_name:, index:)
2626
# @param function_name [String]
2727
# @return [Boolean]
2828
def should_generate_function?(function_name)
29-
function_name = function_name.downcase
30-
3129
return false if data["function"]["deny_name"].any? { |format| format === function_name } # rubocop:disable Style/CaseEquality
3230

3331
data["function"]["allow_name"].any? { |format| format === function_name } # rubocop:disable Style/CaseEquality
@@ -37,17 +35,13 @@ def should_generate_function?(function_name)
3735
# @param struct_name [String]
3836
# @return [Boolean]
3937
def should_generate_struct?(struct_name)
40-
struct_name = struct_name.downcase
41-
4238
data["struct"]["allow_name"].any? { |format| format === struct_name } # rubocop:disable Style/CaseEquality
4339
end
4440

4541
# Whether generate C type to go
4642
# @param type_name [String]
4743
# @return [Boolean]
4844
def should_generate_type?(type_name)
49-
type_name = type_name.downcase
50-
5145
data["type"]["allow_name"].any? { |format| format === type_name } # rubocop:disable Style/CaseEquality
5246
end
5347
end

_tools/ruby_h_to_go/lib/ruby_header_parser/data.yml

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
function:
22
allow_name:
3-
- !ruby/regexp /^rb_/
4-
- !ruby/regexp /^rstring_/
3+
- !ruby/regexp /^rb_/i
4+
- !ruby/regexp /^rstring_/i
55

66
deny_name:
77
# deprecated functions
@@ -29,6 +29,11 @@ function:
2929
# internal functions in ruby.h
3030
- rb_scan_args_bad_format
3131

32+
# FIXME: Both `rb_hash` and `rb_Hash` are defined in ruby.h
33+
# Converting to Go function names would result in both being `RbHash`
34+
# Exclude one of the function names because duplicate function names will result in an error.
35+
- rb_Hash
36+
3237
pointer_hint:
3338
rb_funcallv:
3439
3: array
@@ -37,11 +42,14 @@ function:
3742

3843
struct:
3944
allow_name:
40-
- !ruby/regexp /^rb_/
45+
- !ruby/regexp /^rb_/i
46+
- re_registers
4147

4248
type:
4349
allow_name:
44-
- !ruby/regexp /^rb_/
45-
- !ruby/regexp /^st_/
46-
- id
47-
- value
50+
- !ruby/regexp /^rb_/i
51+
- !ruby/regexp /^st_/i
52+
- ID
53+
- VALUE
54+
- regex_t
55+
- OnigPosition

0 commit comments

Comments
 (0)