include/ruby/ruby.h: import external symbols
properly on MinGW MJIT. test_jit.rb: all MJIT tests are now passing on MinGW. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64964 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1ce45a446e
commit
ad2d2e3f0f
@ -28,6 +28,12 @@ extern "C" {
|
|||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
|
||||||
|
/* For MinGW, we need __declspec(dllimport) for RUBY_EXTERN on MJIT. mswin's RUBY_EXTERN already has that. */
|
||||||
|
#if defined(MJIT_HEADER) && defined(_WIN32) && defined(__GNUC__)
|
||||||
|
# undef RUBY_EXTERN
|
||||||
|
# define RUBY_EXTERN extern __declspec(dllimport)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
/* __builtin_choose_expr and __builtin_types_compatible aren't available
|
/* __builtin_choose_expr and __builtin_types_compatible aren't available
|
||||||
* on C++. See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */
|
* on C++. See https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */
|
||||||
|
@ -77,7 +77,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_blockparam
|
def test_compile_insn_blockparam
|
||||||
skip_on_mingw
|
|
||||||
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '3', success_count: 2, insns: %i[getblockparam setblockparam])
|
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '3', success_count: 2, insns: %i[getblockparam setblockparam])
|
||||||
begin;
|
begin;
|
||||||
def foo(&b)
|
def foo(&b)
|
||||||
@ -164,8 +163,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_putspecialobject_putiseq
|
def test_compile_insn_putspecialobject_putiseq
|
||||||
skip_on_mingw # [Bug #14948]
|
|
||||||
|
|
||||||
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: 'hellohello', success_count: 2, insns: %i[putspecialobject putiseq])
|
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: 'hellohello', success_count: 2, insns: %i[putspecialobject putiseq])
|
||||||
begin;
|
begin;
|
||||||
print 2.times.map {
|
print 2.times.map {
|
||||||
@ -178,7 +175,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_putstring_concatstrings_tostring
|
def test_compile_insn_putstring_concatstrings_tostring
|
||||||
skip_on_mingw
|
|
||||||
assert_compile_once('"a#{}b" + "c"', result_inspect: '"abc"', insns: %i[putstring concatstrings tostring])
|
assert_compile_once('"a#{}b" + "c"', result_inspect: '"abc"', insns: %i[putstring concatstrings tostring])
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -203,7 +199,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_intern_duparray
|
def test_compile_insn_intern_duparray
|
||||||
skip_on_mingw
|
|
||||||
assert_compile_once('[:"#{0}"] + [1,2,3]', result_inspect: '[:"0", 1, 2, 3]', insns: %i[intern duparray])
|
assert_compile_once('[:"#{0}"] + [1,2,3]', result_inspect: '[:"0", 1, 2, 3]', insns: %i[intern duparray])
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -343,7 +338,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_invokesuper
|
def test_compile_insn_invokesuper
|
||||||
skip_on_mingw
|
|
||||||
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '3', success_count: 4, insns: %i[invokesuper])
|
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '3', success_count: 4, insns: %i[invokesuper])
|
||||||
begin;
|
begin;
|
||||||
mod = Module.new {
|
mod = Module.new {
|
||||||
@ -362,7 +356,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_invokeblock_leave
|
def test_compile_insn_invokeblock_leave
|
||||||
skip_on_mingw
|
|
||||||
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '2', success_count: 2, insns: %i[invokeblock leave])
|
assert_eval_with_jit("#{<<~"begin;"}\n#{<<~"end;"}", stdout: '2', success_count: 2, insns: %i[invokeblock leave])
|
||||||
begin;
|
begin;
|
||||||
def foo
|
def foo
|
||||||
@ -430,7 +423,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_once
|
def test_compile_insn_once
|
||||||
skip_on_mingw
|
|
||||||
assert_compile_once('/#{true}/o =~ "true" && $~.to_a', result_inspect: '["true"]', insns: %i[once])
|
assert_compile_once('/#{true}/o =~ "true" && $~.to_a', result_inspect: '["true"]', insns: %i[once])
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -499,12 +491,10 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_opt_aref_with
|
def test_compile_insn_opt_aref_with
|
||||||
skip_on_mingw
|
|
||||||
assert_compile_once("{ '1' => 2 }['1']", result_inspect: '2', insns: %i[opt_aref_with])
|
assert_compile_once("{ '1' => 2 }['1']", result_inspect: '2', insns: %i[opt_aref_with])
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_compile_insn_opt_aset
|
def test_compile_insn_opt_aset
|
||||||
skip_on_mingw
|
|
||||||
assert_compile_once("#{<<~"begin;"}\n#{<<~"end;"}", result_inspect: '5', insns: %i[opt_aset opt_aset_with])
|
assert_compile_once("#{<<~"begin;"}\n#{<<~"end;"}", result_inspect: '5', insns: %i[opt_aset opt_aset_with])
|
||||||
begin;
|
begin;
|
||||||
hash = { '1' => 2 }
|
hash = { '1' => 2 }
|
||||||
@ -807,12 +797,6 @@ class TestJIT < Test::Unit::TestCase
|
|||||||
ENV['APPVEYOR'] == 'True' && RUBY_PLATFORM.match?(/mswin/)
|
ENV['APPVEYOR'] == 'True' && RUBY_PLATFORM.match?(/mswin/)
|
||||||
end
|
end
|
||||||
|
|
||||||
def skip_on_mingw
|
|
||||||
if RUBY_PLATFORM.match?(/mingw/)
|
|
||||||
skip 'This test does not succeed on mingw yet.'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# The shortest way to test one proc
|
# The shortest way to test one proc
|
||||||
def assert_compile_once(script, result_inspect:, insns: [])
|
def assert_compile_once(script, result_inspect:, insns: [])
|
||||||
if script.match?(/\A\n.+\n\z/m)
|
if script.match?(/\A\n.+\n\z/m)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user