diff options
Diffstat (limited to 'ext')
81 files changed, 3218 insertions, 838 deletions
diff --git a/ext/-test-/abi/depend b/ext/-test-/abi/depend new file mode 100644 index 0000000000..716a7b1356 --- /dev/null +++ b/ext/-test-/abi/depend @@ -0,0 +1,3 @@ +# AUTOGENERATED DEPENDENCIES START +abi.o: abi.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/asan/depend b/ext/-test-/asan/depend new file mode 100644 index 0000000000..b419d5a595 --- /dev/null +++ b/ext/-test-/asan/depend @@ -0,0 +1,161 @@ +# AUTOGENERATED DEPENDENCIES START +asan.o: $(RUBY_EXTCONF_H) +asan.o: $(arch_hdrdir)/ruby/config.h +asan.o: $(hdrdir)/ruby/assert.h +asan.o: $(hdrdir)/ruby/backward.h +asan.o: $(hdrdir)/ruby/backward/2/assume.h +asan.o: $(hdrdir)/ruby/backward/2/attributes.h +asan.o: $(hdrdir)/ruby/backward/2/bool.h +asan.o: $(hdrdir)/ruby/backward/2/inttypes.h +asan.o: $(hdrdir)/ruby/backward/2/limits.h +asan.o: $(hdrdir)/ruby/backward/2/long_long.h +asan.o: $(hdrdir)/ruby/backward/2/stdalign.h +asan.o: $(hdrdir)/ruby/backward/2/stdarg.h +asan.o: $(hdrdir)/ruby/defines.h +asan.o: $(hdrdir)/ruby/intern.h +asan.o: $(hdrdir)/ruby/internal/abi.h +asan.o: $(hdrdir)/ruby/internal/anyargs.h +asan.o: $(hdrdir)/ruby/internal/arithmetic.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/char.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/double.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/int.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/long.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/short.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +asan.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +asan.o: $(hdrdir)/ruby/internal/assume.h +asan.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +asan.o: $(hdrdir)/ruby/internal/attr/artificial.h +asan.o: $(hdrdir)/ruby/internal/attr/cold.h +asan.o: $(hdrdir)/ruby/internal/attr/const.h +asan.o: $(hdrdir)/ruby/internal/attr/constexpr.h +asan.o: $(hdrdir)/ruby/internal/attr/deprecated.h +asan.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +asan.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +asan.o: $(hdrdir)/ruby/internal/attr/error.h +asan.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +asan.o: $(hdrdir)/ruby/internal/attr/forceinline.h +asan.o: $(hdrdir)/ruby/internal/attr/format.h +asan.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +asan.o: $(hdrdir)/ruby/internal/attr/noalias.h +asan.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +asan.o: $(hdrdir)/ruby/internal/attr/noexcept.h +asan.o: $(hdrdir)/ruby/internal/attr/noinline.h +asan.o: $(hdrdir)/ruby/internal/attr/nonnull.h +asan.o: $(hdrdir)/ruby/internal/attr/noreturn.h +asan.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +asan.o: $(hdrdir)/ruby/internal/attr/pure.h +asan.o: $(hdrdir)/ruby/internal/attr/restrict.h +asan.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +asan.o: $(hdrdir)/ruby/internal/attr/warning.h +asan.o: $(hdrdir)/ruby/internal/attr/weakref.h +asan.o: $(hdrdir)/ruby/internal/cast.h +asan.o: $(hdrdir)/ruby/internal/compiler_is.h +asan.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +asan.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +asan.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +asan.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +asan.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +asan.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +asan.o: $(hdrdir)/ruby/internal/compiler_since.h +asan.o: $(hdrdir)/ruby/internal/config.h +asan.o: $(hdrdir)/ruby/internal/constant_p.h +asan.o: $(hdrdir)/ruby/internal/core.h +asan.o: $(hdrdir)/ruby/internal/core/rarray.h +asan.o: $(hdrdir)/ruby/internal/core/rbasic.h +asan.o: $(hdrdir)/ruby/internal/core/rbignum.h +asan.o: $(hdrdir)/ruby/internal/core/rclass.h +asan.o: $(hdrdir)/ruby/internal/core/rdata.h +asan.o: $(hdrdir)/ruby/internal/core/rfile.h +asan.o: $(hdrdir)/ruby/internal/core/rhash.h +asan.o: $(hdrdir)/ruby/internal/core/robject.h +asan.o: $(hdrdir)/ruby/internal/core/rregexp.h +asan.o: $(hdrdir)/ruby/internal/core/rstring.h +asan.o: $(hdrdir)/ruby/internal/core/rstruct.h +asan.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +asan.o: $(hdrdir)/ruby/internal/ctype.h +asan.o: $(hdrdir)/ruby/internal/dllexport.h +asan.o: $(hdrdir)/ruby/internal/dosish.h +asan.o: $(hdrdir)/ruby/internal/error.h +asan.o: $(hdrdir)/ruby/internal/eval.h +asan.o: $(hdrdir)/ruby/internal/event.h +asan.o: $(hdrdir)/ruby/internal/fl_type.h +asan.o: $(hdrdir)/ruby/internal/gc.h +asan.o: $(hdrdir)/ruby/internal/glob.h +asan.o: $(hdrdir)/ruby/internal/globals.h +asan.o: $(hdrdir)/ruby/internal/has/attribute.h +asan.o: $(hdrdir)/ruby/internal/has/builtin.h +asan.o: $(hdrdir)/ruby/internal/has/c_attribute.h +asan.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +asan.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +asan.o: $(hdrdir)/ruby/internal/has/extension.h +asan.o: $(hdrdir)/ruby/internal/has/feature.h +asan.o: $(hdrdir)/ruby/internal/has/warning.h +asan.o: $(hdrdir)/ruby/internal/intern/array.h +asan.o: $(hdrdir)/ruby/internal/intern/bignum.h +asan.o: $(hdrdir)/ruby/internal/intern/class.h +asan.o: $(hdrdir)/ruby/internal/intern/compar.h +asan.o: $(hdrdir)/ruby/internal/intern/complex.h +asan.o: $(hdrdir)/ruby/internal/intern/cont.h +asan.o: $(hdrdir)/ruby/internal/intern/dir.h +asan.o: $(hdrdir)/ruby/internal/intern/enum.h +asan.o: $(hdrdir)/ruby/internal/intern/enumerator.h +asan.o: $(hdrdir)/ruby/internal/intern/error.h +asan.o: $(hdrdir)/ruby/internal/intern/eval.h +asan.o: $(hdrdir)/ruby/internal/intern/file.h +asan.o: $(hdrdir)/ruby/internal/intern/hash.h +asan.o: $(hdrdir)/ruby/internal/intern/io.h +asan.o: $(hdrdir)/ruby/internal/intern/load.h +asan.o: $(hdrdir)/ruby/internal/intern/marshal.h +asan.o: $(hdrdir)/ruby/internal/intern/numeric.h +asan.o: $(hdrdir)/ruby/internal/intern/object.h +asan.o: $(hdrdir)/ruby/internal/intern/parse.h +asan.o: $(hdrdir)/ruby/internal/intern/proc.h +asan.o: $(hdrdir)/ruby/internal/intern/process.h +asan.o: $(hdrdir)/ruby/internal/intern/random.h +asan.o: $(hdrdir)/ruby/internal/intern/range.h +asan.o: $(hdrdir)/ruby/internal/intern/rational.h +asan.o: $(hdrdir)/ruby/internal/intern/re.h +asan.o: $(hdrdir)/ruby/internal/intern/ruby.h +asan.o: $(hdrdir)/ruby/internal/intern/select.h +asan.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +asan.o: $(hdrdir)/ruby/internal/intern/signal.h +asan.o: $(hdrdir)/ruby/internal/intern/sprintf.h +asan.o: $(hdrdir)/ruby/internal/intern/string.h +asan.o: $(hdrdir)/ruby/internal/intern/struct.h +asan.o: $(hdrdir)/ruby/internal/intern/thread.h +asan.o: $(hdrdir)/ruby/internal/intern/time.h +asan.o: $(hdrdir)/ruby/internal/intern/variable.h +asan.o: $(hdrdir)/ruby/internal/intern/vm.h +asan.o: $(hdrdir)/ruby/internal/interpreter.h +asan.o: $(hdrdir)/ruby/internal/iterator.h +asan.o: $(hdrdir)/ruby/internal/memory.h +asan.o: $(hdrdir)/ruby/internal/method.h +asan.o: $(hdrdir)/ruby/internal/module.h +asan.o: $(hdrdir)/ruby/internal/newobj.h +asan.o: $(hdrdir)/ruby/internal/scan_args.h +asan.o: $(hdrdir)/ruby/internal/special_consts.h +asan.o: $(hdrdir)/ruby/internal/static_assert.h +asan.o: $(hdrdir)/ruby/internal/stdalign.h +asan.o: $(hdrdir)/ruby/internal/stdbool.h +asan.o: $(hdrdir)/ruby/internal/stdckdint.h +asan.o: $(hdrdir)/ruby/internal/symbol.h +asan.o: $(hdrdir)/ruby/internal/value.h +asan.o: $(hdrdir)/ruby/internal/value_type.h +asan.o: $(hdrdir)/ruby/internal/variable.h +asan.o: $(hdrdir)/ruby/internal/warning_push.h +asan.o: $(hdrdir)/ruby/internal/xmalloc.h +asan.o: $(hdrdir)/ruby/missing.h +asan.o: $(hdrdir)/ruby/ruby.h +asan.o: $(hdrdir)/ruby/st.h +asan.o: $(hdrdir)/ruby/subst.h +asan.o: asan.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/econv/depend b/ext/-test-/econv/depend new file mode 100644 index 0000000000..7ac60f2962 --- /dev/null +++ b/ext/-test-/econv/depend @@ -0,0 +1,334 @@ +# AUTOGENERATED DEPENDENCIES START +append.o: $(RUBY_EXTCONF_H) +append.o: $(arch_hdrdir)/ruby/config.h +append.o: $(hdrdir)/ruby.h +append.o: $(hdrdir)/ruby/assert.h +append.o: $(hdrdir)/ruby/backward.h +append.o: $(hdrdir)/ruby/backward/2/assume.h +append.o: $(hdrdir)/ruby/backward/2/attributes.h +append.o: $(hdrdir)/ruby/backward/2/bool.h +append.o: $(hdrdir)/ruby/backward/2/inttypes.h +append.o: $(hdrdir)/ruby/backward/2/limits.h +append.o: $(hdrdir)/ruby/backward/2/long_long.h +append.o: $(hdrdir)/ruby/backward/2/stdalign.h +append.o: $(hdrdir)/ruby/backward/2/stdarg.h +append.o: $(hdrdir)/ruby/defines.h +append.o: $(hdrdir)/ruby/encoding.h +append.o: $(hdrdir)/ruby/intern.h +append.o: $(hdrdir)/ruby/internal/abi.h +append.o: $(hdrdir)/ruby/internal/anyargs.h +append.o: $(hdrdir)/ruby/internal/arithmetic.h +append.o: $(hdrdir)/ruby/internal/arithmetic/char.h +append.o: $(hdrdir)/ruby/internal/arithmetic/double.h +append.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +append.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/int.h +append.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/long.h +append.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +append.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/short.h +append.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +append.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +append.o: $(hdrdir)/ruby/internal/assume.h +append.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +append.o: $(hdrdir)/ruby/internal/attr/artificial.h +append.o: $(hdrdir)/ruby/internal/attr/cold.h +append.o: $(hdrdir)/ruby/internal/attr/const.h +append.o: $(hdrdir)/ruby/internal/attr/constexpr.h +append.o: $(hdrdir)/ruby/internal/attr/deprecated.h +append.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +append.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +append.o: $(hdrdir)/ruby/internal/attr/error.h +append.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +append.o: $(hdrdir)/ruby/internal/attr/forceinline.h +append.o: $(hdrdir)/ruby/internal/attr/format.h +append.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +append.o: $(hdrdir)/ruby/internal/attr/noalias.h +append.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +append.o: $(hdrdir)/ruby/internal/attr/noexcept.h +append.o: $(hdrdir)/ruby/internal/attr/noinline.h +append.o: $(hdrdir)/ruby/internal/attr/nonnull.h +append.o: $(hdrdir)/ruby/internal/attr/noreturn.h +append.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +append.o: $(hdrdir)/ruby/internal/attr/pure.h +append.o: $(hdrdir)/ruby/internal/attr/restrict.h +append.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +append.o: $(hdrdir)/ruby/internal/attr/warning.h +append.o: $(hdrdir)/ruby/internal/attr/weakref.h +append.o: $(hdrdir)/ruby/internal/cast.h +append.o: $(hdrdir)/ruby/internal/compiler_is.h +append.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +append.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +append.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +append.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +append.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +append.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +append.o: $(hdrdir)/ruby/internal/compiler_since.h +append.o: $(hdrdir)/ruby/internal/config.h +append.o: $(hdrdir)/ruby/internal/constant_p.h +append.o: $(hdrdir)/ruby/internal/core.h +append.o: $(hdrdir)/ruby/internal/core/rarray.h +append.o: $(hdrdir)/ruby/internal/core/rbasic.h +append.o: $(hdrdir)/ruby/internal/core/rbignum.h +append.o: $(hdrdir)/ruby/internal/core/rclass.h +append.o: $(hdrdir)/ruby/internal/core/rdata.h +append.o: $(hdrdir)/ruby/internal/core/rfile.h +append.o: $(hdrdir)/ruby/internal/core/rhash.h +append.o: $(hdrdir)/ruby/internal/core/robject.h +append.o: $(hdrdir)/ruby/internal/core/rregexp.h +append.o: $(hdrdir)/ruby/internal/core/rstring.h +append.o: $(hdrdir)/ruby/internal/core/rstruct.h +append.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +append.o: $(hdrdir)/ruby/internal/ctype.h +append.o: $(hdrdir)/ruby/internal/dllexport.h +append.o: $(hdrdir)/ruby/internal/dosish.h +append.o: $(hdrdir)/ruby/internal/encoding/coderange.h +append.o: $(hdrdir)/ruby/internal/encoding/ctype.h +append.o: $(hdrdir)/ruby/internal/encoding/encoding.h +append.o: $(hdrdir)/ruby/internal/encoding/pathname.h +append.o: $(hdrdir)/ruby/internal/encoding/re.h +append.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +append.o: $(hdrdir)/ruby/internal/encoding/string.h +append.o: $(hdrdir)/ruby/internal/encoding/symbol.h +append.o: $(hdrdir)/ruby/internal/encoding/transcode.h +append.o: $(hdrdir)/ruby/internal/error.h +append.o: $(hdrdir)/ruby/internal/eval.h +append.o: $(hdrdir)/ruby/internal/event.h +append.o: $(hdrdir)/ruby/internal/fl_type.h +append.o: $(hdrdir)/ruby/internal/gc.h +append.o: $(hdrdir)/ruby/internal/glob.h +append.o: $(hdrdir)/ruby/internal/globals.h +append.o: $(hdrdir)/ruby/internal/has/attribute.h +append.o: $(hdrdir)/ruby/internal/has/builtin.h +append.o: $(hdrdir)/ruby/internal/has/c_attribute.h +append.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +append.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +append.o: $(hdrdir)/ruby/internal/has/extension.h +append.o: $(hdrdir)/ruby/internal/has/feature.h +append.o: $(hdrdir)/ruby/internal/has/warning.h +append.o: $(hdrdir)/ruby/internal/intern/array.h +append.o: $(hdrdir)/ruby/internal/intern/bignum.h +append.o: $(hdrdir)/ruby/internal/intern/class.h +append.o: $(hdrdir)/ruby/internal/intern/compar.h +append.o: $(hdrdir)/ruby/internal/intern/complex.h +append.o: $(hdrdir)/ruby/internal/intern/cont.h +append.o: $(hdrdir)/ruby/internal/intern/dir.h +append.o: $(hdrdir)/ruby/internal/intern/enum.h +append.o: $(hdrdir)/ruby/internal/intern/enumerator.h +append.o: $(hdrdir)/ruby/internal/intern/error.h +append.o: $(hdrdir)/ruby/internal/intern/eval.h +append.o: $(hdrdir)/ruby/internal/intern/file.h +append.o: $(hdrdir)/ruby/internal/intern/hash.h +append.o: $(hdrdir)/ruby/internal/intern/io.h +append.o: $(hdrdir)/ruby/internal/intern/load.h +append.o: $(hdrdir)/ruby/internal/intern/marshal.h +append.o: $(hdrdir)/ruby/internal/intern/numeric.h +append.o: $(hdrdir)/ruby/internal/intern/object.h +append.o: $(hdrdir)/ruby/internal/intern/parse.h +append.o: $(hdrdir)/ruby/internal/intern/proc.h +append.o: $(hdrdir)/ruby/internal/intern/process.h +append.o: $(hdrdir)/ruby/internal/intern/random.h +append.o: $(hdrdir)/ruby/internal/intern/range.h +append.o: $(hdrdir)/ruby/internal/intern/rational.h +append.o: $(hdrdir)/ruby/internal/intern/re.h +append.o: $(hdrdir)/ruby/internal/intern/ruby.h +append.o: $(hdrdir)/ruby/internal/intern/select.h +append.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +append.o: $(hdrdir)/ruby/internal/intern/signal.h +append.o: $(hdrdir)/ruby/internal/intern/sprintf.h +append.o: $(hdrdir)/ruby/internal/intern/string.h +append.o: $(hdrdir)/ruby/internal/intern/struct.h +append.o: $(hdrdir)/ruby/internal/intern/thread.h +append.o: $(hdrdir)/ruby/internal/intern/time.h +append.o: $(hdrdir)/ruby/internal/intern/variable.h +append.o: $(hdrdir)/ruby/internal/intern/vm.h +append.o: $(hdrdir)/ruby/internal/interpreter.h +append.o: $(hdrdir)/ruby/internal/iterator.h +append.o: $(hdrdir)/ruby/internal/memory.h +append.o: $(hdrdir)/ruby/internal/method.h +append.o: $(hdrdir)/ruby/internal/module.h +append.o: $(hdrdir)/ruby/internal/newobj.h +append.o: $(hdrdir)/ruby/internal/scan_args.h +append.o: $(hdrdir)/ruby/internal/special_consts.h +append.o: $(hdrdir)/ruby/internal/static_assert.h +append.o: $(hdrdir)/ruby/internal/stdalign.h +append.o: $(hdrdir)/ruby/internal/stdbool.h +append.o: $(hdrdir)/ruby/internal/stdckdint.h +append.o: $(hdrdir)/ruby/internal/symbol.h +append.o: $(hdrdir)/ruby/internal/value.h +append.o: $(hdrdir)/ruby/internal/value_type.h +append.o: $(hdrdir)/ruby/internal/variable.h +append.o: $(hdrdir)/ruby/internal/warning_push.h +append.o: $(hdrdir)/ruby/internal/xmalloc.h +append.o: $(hdrdir)/ruby/missing.h +append.o: $(hdrdir)/ruby/onigmo.h +append.o: $(hdrdir)/ruby/oniguruma.h +append.o: $(hdrdir)/ruby/ruby.h +append.o: $(hdrdir)/ruby/st.h +append.o: $(hdrdir)/ruby/subst.h +append.o: append.c +init.o: $(RUBY_EXTCONF_H) +init.o: $(arch_hdrdir)/ruby/config.h +init.o: $(hdrdir)/ruby.h +init.o: $(hdrdir)/ruby/assert.h +init.o: $(hdrdir)/ruby/backward.h +init.o: $(hdrdir)/ruby/backward/2/assume.h +init.o: $(hdrdir)/ruby/backward/2/attributes.h +init.o: $(hdrdir)/ruby/backward/2/bool.h +init.o: $(hdrdir)/ruby/backward/2/inttypes.h +init.o: $(hdrdir)/ruby/backward/2/limits.h +init.o: $(hdrdir)/ruby/backward/2/long_long.h +init.o: $(hdrdir)/ruby/backward/2/stdalign.h +init.o: $(hdrdir)/ruby/backward/2/stdarg.h +init.o: $(hdrdir)/ruby/defines.h +init.o: $(hdrdir)/ruby/intern.h +init.o: $(hdrdir)/ruby/internal/abi.h +init.o: $(hdrdir)/ruby/internal/anyargs.h +init.o: $(hdrdir)/ruby/internal/arithmetic.h +init.o: $(hdrdir)/ruby/internal/arithmetic/char.h +init.o: $(hdrdir)/ruby/internal/arithmetic/double.h +init.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +init.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/int.h +init.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +init.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/short.h +init.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +init.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +init.o: $(hdrdir)/ruby/internal/assume.h +init.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +init.o: $(hdrdir)/ruby/internal/attr/artificial.h +init.o: $(hdrdir)/ruby/internal/attr/cold.h +init.o: $(hdrdir)/ruby/internal/attr/const.h +init.o: $(hdrdir)/ruby/internal/attr/constexpr.h +init.o: $(hdrdir)/ruby/internal/attr/deprecated.h +init.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +init.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +init.o: $(hdrdir)/ruby/internal/attr/error.h +init.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +init.o: $(hdrdir)/ruby/internal/attr/forceinline.h +init.o: $(hdrdir)/ruby/internal/attr/format.h +init.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +init.o: $(hdrdir)/ruby/internal/attr/noalias.h +init.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +init.o: $(hdrdir)/ruby/internal/attr/noexcept.h +init.o: $(hdrdir)/ruby/internal/attr/noinline.h +init.o: $(hdrdir)/ruby/internal/attr/nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/noreturn.h +init.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +init.o: $(hdrdir)/ruby/internal/attr/pure.h +init.o: $(hdrdir)/ruby/internal/attr/restrict.h +init.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +init.o: $(hdrdir)/ruby/internal/attr/warning.h +init.o: $(hdrdir)/ruby/internal/attr/weakref.h +init.o: $(hdrdir)/ruby/internal/cast.h +init.o: $(hdrdir)/ruby/internal/compiler_is.h +init.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +init.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +init.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +init.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +init.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +init.o: $(hdrdir)/ruby/internal/compiler_since.h +init.o: $(hdrdir)/ruby/internal/config.h +init.o: $(hdrdir)/ruby/internal/constant_p.h +init.o: $(hdrdir)/ruby/internal/core.h +init.o: $(hdrdir)/ruby/internal/core/rarray.h +init.o: $(hdrdir)/ruby/internal/core/rbasic.h +init.o: $(hdrdir)/ruby/internal/core/rbignum.h +init.o: $(hdrdir)/ruby/internal/core/rclass.h +init.o: $(hdrdir)/ruby/internal/core/rdata.h +init.o: $(hdrdir)/ruby/internal/core/rfile.h +init.o: $(hdrdir)/ruby/internal/core/rhash.h +init.o: $(hdrdir)/ruby/internal/core/robject.h +init.o: $(hdrdir)/ruby/internal/core/rregexp.h +init.o: $(hdrdir)/ruby/internal/core/rstring.h +init.o: $(hdrdir)/ruby/internal/core/rstruct.h +init.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +init.o: $(hdrdir)/ruby/internal/ctype.h +init.o: $(hdrdir)/ruby/internal/dllexport.h +init.o: $(hdrdir)/ruby/internal/dosish.h +init.o: $(hdrdir)/ruby/internal/error.h +init.o: $(hdrdir)/ruby/internal/eval.h +init.o: $(hdrdir)/ruby/internal/event.h +init.o: $(hdrdir)/ruby/internal/fl_type.h +init.o: $(hdrdir)/ruby/internal/gc.h +init.o: $(hdrdir)/ruby/internal/glob.h +init.o: $(hdrdir)/ruby/internal/globals.h +init.o: $(hdrdir)/ruby/internal/has/attribute.h +init.o: $(hdrdir)/ruby/internal/has/builtin.h +init.o: $(hdrdir)/ruby/internal/has/c_attribute.h +init.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +init.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +init.o: $(hdrdir)/ruby/internal/has/extension.h +init.o: $(hdrdir)/ruby/internal/has/feature.h +init.o: $(hdrdir)/ruby/internal/has/warning.h +init.o: $(hdrdir)/ruby/internal/intern/array.h +init.o: $(hdrdir)/ruby/internal/intern/bignum.h +init.o: $(hdrdir)/ruby/internal/intern/class.h +init.o: $(hdrdir)/ruby/internal/intern/compar.h +init.o: $(hdrdir)/ruby/internal/intern/complex.h +init.o: $(hdrdir)/ruby/internal/intern/cont.h +init.o: $(hdrdir)/ruby/internal/intern/dir.h +init.o: $(hdrdir)/ruby/internal/intern/enum.h +init.o: $(hdrdir)/ruby/internal/intern/enumerator.h +init.o: $(hdrdir)/ruby/internal/intern/error.h +init.o: $(hdrdir)/ruby/internal/intern/eval.h +init.o: $(hdrdir)/ruby/internal/intern/file.h +init.o: $(hdrdir)/ruby/internal/intern/hash.h +init.o: $(hdrdir)/ruby/internal/intern/io.h +init.o: $(hdrdir)/ruby/internal/intern/load.h +init.o: $(hdrdir)/ruby/internal/intern/marshal.h +init.o: $(hdrdir)/ruby/internal/intern/numeric.h +init.o: $(hdrdir)/ruby/internal/intern/object.h +init.o: $(hdrdir)/ruby/internal/intern/parse.h +init.o: $(hdrdir)/ruby/internal/intern/proc.h +init.o: $(hdrdir)/ruby/internal/intern/process.h +init.o: $(hdrdir)/ruby/internal/intern/random.h +init.o: $(hdrdir)/ruby/internal/intern/range.h +init.o: $(hdrdir)/ruby/internal/intern/rational.h +init.o: $(hdrdir)/ruby/internal/intern/re.h +init.o: $(hdrdir)/ruby/internal/intern/ruby.h +init.o: $(hdrdir)/ruby/internal/intern/select.h +init.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +init.o: $(hdrdir)/ruby/internal/intern/signal.h +init.o: $(hdrdir)/ruby/internal/intern/sprintf.h +init.o: $(hdrdir)/ruby/internal/intern/string.h +init.o: $(hdrdir)/ruby/internal/intern/struct.h +init.o: $(hdrdir)/ruby/internal/intern/thread.h +init.o: $(hdrdir)/ruby/internal/intern/time.h +init.o: $(hdrdir)/ruby/internal/intern/variable.h +init.o: $(hdrdir)/ruby/internal/intern/vm.h +init.o: $(hdrdir)/ruby/internal/interpreter.h +init.o: $(hdrdir)/ruby/internal/iterator.h +init.o: $(hdrdir)/ruby/internal/memory.h +init.o: $(hdrdir)/ruby/internal/method.h +init.o: $(hdrdir)/ruby/internal/module.h +init.o: $(hdrdir)/ruby/internal/newobj.h +init.o: $(hdrdir)/ruby/internal/scan_args.h +init.o: $(hdrdir)/ruby/internal/special_consts.h +init.o: $(hdrdir)/ruby/internal/static_assert.h +init.o: $(hdrdir)/ruby/internal/stdalign.h +init.o: $(hdrdir)/ruby/internal/stdbool.h +init.o: $(hdrdir)/ruby/internal/stdckdint.h +init.o: $(hdrdir)/ruby/internal/symbol.h +init.o: $(hdrdir)/ruby/internal/value.h +init.o: $(hdrdir)/ruby/internal/value_type.h +init.o: $(hdrdir)/ruby/internal/variable.h +init.o: $(hdrdir)/ruby/internal/warning_push.h +init.o: $(hdrdir)/ruby/internal/xmalloc.h +init.o: $(hdrdir)/ruby/missing.h +init.o: $(hdrdir)/ruby/ruby.h +init.o: $(hdrdir)/ruby/st.h +init.o: $(hdrdir)/ruby/subst.h +init.o: init.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/ensure_and_callcc/depend b/ext/-test-/ensure_and_callcc/depend new file mode 100644 index 0000000000..773538eaa5 --- /dev/null +++ b/ext/-test-/ensure_and_callcc/depend @@ -0,0 +1,162 @@ +# AUTOGENERATED DEPENDENCIES START +ensure_and_callcc.o: $(RUBY_EXTCONF_H) +ensure_and_callcc.o: $(arch_hdrdir)/ruby/config.h +ensure_and_callcc.o: $(hdrdir)/ruby.h +ensure_and_callcc.o: $(hdrdir)/ruby/assert.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/assume.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/attributes.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/bool.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/inttypes.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/limits.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/long_long.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/stdalign.h +ensure_and_callcc.o: $(hdrdir)/ruby/backward/2/stdarg.h +ensure_and_callcc.o: $(hdrdir)/ruby/defines.h +ensure_and_callcc.o: $(hdrdir)/ruby/intern.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/abi.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/anyargs.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/char.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/double.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/int.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/long.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/short.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/assume.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/artificial.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/cold.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/const.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/constexpr.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/deprecated.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/error.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/forceinline.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/format.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/noalias.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/noexcept.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/noinline.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/nonnull.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/noreturn.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/pure.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/restrict.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/warning.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/attr/weakref.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/cast.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/compiler_since.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/config.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/constant_p.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rarray.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rbasic.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rbignum.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rclass.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rdata.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rfile.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rhash.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/robject.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rregexp.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rstring.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rstruct.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/ctype.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/dllexport.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/dosish.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/error.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/eval.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/event.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/fl_type.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/gc.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/glob.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/globals.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/attribute.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/builtin.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/c_attribute.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/extension.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/feature.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/has/warning.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/array.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/bignum.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/class.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/compar.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/complex.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/cont.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/dir.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/enum.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/enumerator.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/error.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/eval.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/file.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/hash.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/io.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/load.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/marshal.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/numeric.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/object.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/parse.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/proc.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/process.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/random.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/range.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/rational.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/re.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/ruby.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/select.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/signal.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/sprintf.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/string.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/struct.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/thread.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/time.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/variable.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/intern/vm.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/interpreter.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/iterator.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/memory.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/method.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/module.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/newobj.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/scan_args.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/special_consts.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/static_assert.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/stdalign.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/stdbool.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/stdckdint.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/symbol.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/value.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/value_type.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/variable.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/warning_push.h +ensure_and_callcc.o: $(hdrdir)/ruby/internal/xmalloc.h +ensure_and_callcc.o: $(hdrdir)/ruby/missing.h +ensure_and_callcc.o: $(hdrdir)/ruby/ruby.h +ensure_and_callcc.o: $(hdrdir)/ruby/st.h +ensure_and_callcc.o: $(hdrdir)/ruby/subst.h +ensure_and_callcc.o: ensure_and_callcc.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/eval/depend b/ext/-test-/eval/depend new file mode 100644 index 0000000000..9daa2f5688 --- /dev/null +++ b/ext/-test-/eval/depend @@ -0,0 +1,161 @@ +# AUTOGENERATED DEPENDENCIES START +eval.o: $(RUBY_EXTCONF_H) +eval.o: $(arch_hdrdir)/ruby/config.h +eval.o: $(hdrdir)/ruby/assert.h +eval.o: $(hdrdir)/ruby/backward.h +eval.o: $(hdrdir)/ruby/backward/2/assume.h +eval.o: $(hdrdir)/ruby/backward/2/attributes.h +eval.o: $(hdrdir)/ruby/backward/2/bool.h +eval.o: $(hdrdir)/ruby/backward/2/inttypes.h +eval.o: $(hdrdir)/ruby/backward/2/limits.h +eval.o: $(hdrdir)/ruby/backward/2/long_long.h +eval.o: $(hdrdir)/ruby/backward/2/stdalign.h +eval.o: $(hdrdir)/ruby/backward/2/stdarg.h +eval.o: $(hdrdir)/ruby/defines.h +eval.o: $(hdrdir)/ruby/intern.h +eval.o: $(hdrdir)/ruby/internal/abi.h +eval.o: $(hdrdir)/ruby/internal/anyargs.h +eval.o: $(hdrdir)/ruby/internal/arithmetic.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/char.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/double.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/int.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/long.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/short.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +eval.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +eval.o: $(hdrdir)/ruby/internal/assume.h +eval.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +eval.o: $(hdrdir)/ruby/internal/attr/artificial.h +eval.o: $(hdrdir)/ruby/internal/attr/cold.h +eval.o: $(hdrdir)/ruby/internal/attr/const.h +eval.o: $(hdrdir)/ruby/internal/attr/constexpr.h +eval.o: $(hdrdir)/ruby/internal/attr/deprecated.h +eval.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +eval.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +eval.o: $(hdrdir)/ruby/internal/attr/error.h +eval.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +eval.o: $(hdrdir)/ruby/internal/attr/forceinline.h +eval.o: $(hdrdir)/ruby/internal/attr/format.h +eval.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +eval.o: $(hdrdir)/ruby/internal/attr/noalias.h +eval.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +eval.o: $(hdrdir)/ruby/internal/attr/noexcept.h +eval.o: $(hdrdir)/ruby/internal/attr/noinline.h +eval.o: $(hdrdir)/ruby/internal/attr/nonnull.h +eval.o: $(hdrdir)/ruby/internal/attr/noreturn.h +eval.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +eval.o: $(hdrdir)/ruby/internal/attr/pure.h +eval.o: $(hdrdir)/ruby/internal/attr/restrict.h +eval.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +eval.o: $(hdrdir)/ruby/internal/attr/warning.h +eval.o: $(hdrdir)/ruby/internal/attr/weakref.h +eval.o: $(hdrdir)/ruby/internal/cast.h +eval.o: $(hdrdir)/ruby/internal/compiler_is.h +eval.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +eval.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +eval.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +eval.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +eval.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +eval.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +eval.o: $(hdrdir)/ruby/internal/compiler_since.h +eval.o: $(hdrdir)/ruby/internal/config.h +eval.o: $(hdrdir)/ruby/internal/constant_p.h +eval.o: $(hdrdir)/ruby/internal/core.h +eval.o: $(hdrdir)/ruby/internal/core/rarray.h +eval.o: $(hdrdir)/ruby/internal/core/rbasic.h +eval.o: $(hdrdir)/ruby/internal/core/rbignum.h +eval.o: $(hdrdir)/ruby/internal/core/rclass.h +eval.o: $(hdrdir)/ruby/internal/core/rdata.h +eval.o: $(hdrdir)/ruby/internal/core/rfile.h +eval.o: $(hdrdir)/ruby/internal/core/rhash.h +eval.o: $(hdrdir)/ruby/internal/core/robject.h +eval.o: $(hdrdir)/ruby/internal/core/rregexp.h +eval.o: $(hdrdir)/ruby/internal/core/rstring.h +eval.o: $(hdrdir)/ruby/internal/core/rstruct.h +eval.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +eval.o: $(hdrdir)/ruby/internal/ctype.h +eval.o: $(hdrdir)/ruby/internal/dllexport.h +eval.o: $(hdrdir)/ruby/internal/dosish.h +eval.o: $(hdrdir)/ruby/internal/error.h +eval.o: $(hdrdir)/ruby/internal/eval.h +eval.o: $(hdrdir)/ruby/internal/event.h +eval.o: $(hdrdir)/ruby/internal/fl_type.h +eval.o: $(hdrdir)/ruby/internal/gc.h +eval.o: $(hdrdir)/ruby/internal/glob.h +eval.o: $(hdrdir)/ruby/internal/globals.h +eval.o: $(hdrdir)/ruby/internal/has/attribute.h +eval.o: $(hdrdir)/ruby/internal/has/builtin.h +eval.o: $(hdrdir)/ruby/internal/has/c_attribute.h +eval.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +eval.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +eval.o: $(hdrdir)/ruby/internal/has/extension.h +eval.o: $(hdrdir)/ruby/internal/has/feature.h +eval.o: $(hdrdir)/ruby/internal/has/warning.h +eval.o: $(hdrdir)/ruby/internal/intern/array.h +eval.o: $(hdrdir)/ruby/internal/intern/bignum.h +eval.o: $(hdrdir)/ruby/internal/intern/class.h +eval.o: $(hdrdir)/ruby/internal/intern/compar.h +eval.o: $(hdrdir)/ruby/internal/intern/complex.h +eval.o: $(hdrdir)/ruby/internal/intern/cont.h +eval.o: $(hdrdir)/ruby/internal/intern/dir.h +eval.o: $(hdrdir)/ruby/internal/intern/enum.h +eval.o: $(hdrdir)/ruby/internal/intern/enumerator.h +eval.o: $(hdrdir)/ruby/internal/intern/error.h +eval.o: $(hdrdir)/ruby/internal/intern/eval.h +eval.o: $(hdrdir)/ruby/internal/intern/file.h +eval.o: $(hdrdir)/ruby/internal/intern/hash.h +eval.o: $(hdrdir)/ruby/internal/intern/io.h +eval.o: $(hdrdir)/ruby/internal/intern/load.h +eval.o: $(hdrdir)/ruby/internal/intern/marshal.h +eval.o: $(hdrdir)/ruby/internal/intern/numeric.h +eval.o: $(hdrdir)/ruby/internal/intern/object.h +eval.o: $(hdrdir)/ruby/internal/intern/parse.h +eval.o: $(hdrdir)/ruby/internal/intern/proc.h +eval.o: $(hdrdir)/ruby/internal/intern/process.h +eval.o: $(hdrdir)/ruby/internal/intern/random.h +eval.o: $(hdrdir)/ruby/internal/intern/range.h +eval.o: $(hdrdir)/ruby/internal/intern/rational.h +eval.o: $(hdrdir)/ruby/internal/intern/re.h +eval.o: $(hdrdir)/ruby/internal/intern/ruby.h +eval.o: $(hdrdir)/ruby/internal/intern/select.h +eval.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +eval.o: $(hdrdir)/ruby/internal/intern/signal.h +eval.o: $(hdrdir)/ruby/internal/intern/sprintf.h +eval.o: $(hdrdir)/ruby/internal/intern/string.h +eval.o: $(hdrdir)/ruby/internal/intern/struct.h +eval.o: $(hdrdir)/ruby/internal/intern/thread.h +eval.o: $(hdrdir)/ruby/internal/intern/time.h +eval.o: $(hdrdir)/ruby/internal/intern/variable.h +eval.o: $(hdrdir)/ruby/internal/intern/vm.h +eval.o: $(hdrdir)/ruby/internal/interpreter.h +eval.o: $(hdrdir)/ruby/internal/iterator.h +eval.o: $(hdrdir)/ruby/internal/memory.h +eval.o: $(hdrdir)/ruby/internal/method.h +eval.o: $(hdrdir)/ruby/internal/module.h +eval.o: $(hdrdir)/ruby/internal/newobj.h +eval.o: $(hdrdir)/ruby/internal/scan_args.h +eval.o: $(hdrdir)/ruby/internal/special_consts.h +eval.o: $(hdrdir)/ruby/internal/static_assert.h +eval.o: $(hdrdir)/ruby/internal/stdalign.h +eval.o: $(hdrdir)/ruby/internal/stdbool.h +eval.o: $(hdrdir)/ruby/internal/stdckdint.h +eval.o: $(hdrdir)/ruby/internal/symbol.h +eval.o: $(hdrdir)/ruby/internal/value.h +eval.o: $(hdrdir)/ruby/internal/value_type.h +eval.o: $(hdrdir)/ruby/internal/variable.h +eval.o: $(hdrdir)/ruby/internal/warning_push.h +eval.o: $(hdrdir)/ruby/internal/xmalloc.h +eval.o: $(hdrdir)/ruby/missing.h +eval.o: $(hdrdir)/ruby/ruby.h +eval.o: $(hdrdir)/ruby/st.h +eval.o: $(hdrdir)/ruby/subst.h +eval.o: eval.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/load/resolve_symbol_resolver/depend b/ext/-test-/load/resolve_symbol_resolver/depend new file mode 100644 index 0000000000..0849e79060 --- /dev/null +++ b/ext/-test-/load/resolve_symbol_resolver/depend @@ -0,0 +1,162 @@ +# AUTOGENERATED DEPENDENCIES START +resolve_symbol_resolver.o: $(RUBY_EXTCONF_H) +resolve_symbol_resolver.o: $(arch_hdrdir)/ruby/config.h +resolve_symbol_resolver.o: $(hdrdir)/ruby.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/assert.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/assume.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/attributes.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/bool.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/inttypes.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/limits.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/long_long.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/stdalign.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/backward/2/stdarg.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/defines.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/intern.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/abi.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/anyargs.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/char.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/double.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/int.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/long.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/short.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/assume.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/artificial.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/cold.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/const.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/constexpr.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/deprecated.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/error.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/forceinline.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/format.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/noalias.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/noexcept.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/noinline.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/nonnull.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/noreturn.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/pure.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/restrict.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/warning.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/attr/weakref.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/cast.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/compiler_since.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/config.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/constant_p.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rarray.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rbasic.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rbignum.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rclass.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rdata.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rfile.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rhash.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/robject.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rregexp.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rstring.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rstruct.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/ctype.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/dllexport.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/dosish.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/error.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/eval.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/event.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/fl_type.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/gc.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/glob.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/globals.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/attribute.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/builtin.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/c_attribute.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/extension.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/feature.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/has/warning.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/array.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/bignum.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/class.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/compar.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/complex.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/cont.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/dir.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/enum.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/enumerator.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/error.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/eval.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/file.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/hash.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/io.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/load.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/marshal.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/numeric.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/object.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/parse.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/proc.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/process.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/random.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/range.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/rational.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/re.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/ruby.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/select.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/signal.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/sprintf.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/string.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/struct.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/thread.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/time.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/variable.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/intern/vm.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/interpreter.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/iterator.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/memory.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/method.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/module.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/newobj.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/scan_args.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/special_consts.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/static_assert.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/stdalign.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/stdbool.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/stdckdint.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/symbol.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/value.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/value_type.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/variable.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/warning_push.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/internal/xmalloc.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/missing.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/ruby.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/st.h +resolve_symbol_resolver.o: $(hdrdir)/ruby/subst.h +resolve_symbol_resolver.o: resolve_symbol_resolver.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/load/resolve_symbol_target/depend b/ext/-test-/load/resolve_symbol_target/depend new file mode 100644 index 0000000000..45116b5601 --- /dev/null +++ b/ext/-test-/load/resolve_symbol_target/depend @@ -0,0 +1,163 @@ +# AUTOGENERATED DEPENDENCIES START +resolve_symbol_target.o: $(RUBY_EXTCONF_H) +resolve_symbol_target.o: $(arch_hdrdir)/ruby/config.h +resolve_symbol_target.o: $(hdrdir)/ruby.h +resolve_symbol_target.o: $(hdrdir)/ruby/assert.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/assume.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/attributes.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/bool.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/inttypes.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/limits.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/long_long.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/stdalign.h +resolve_symbol_target.o: $(hdrdir)/ruby/backward/2/stdarg.h +resolve_symbol_target.o: $(hdrdir)/ruby/defines.h +resolve_symbol_target.o: $(hdrdir)/ruby/intern.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/abi.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/anyargs.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/char.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/double.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/int.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/long.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/short.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/assume.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/artificial.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/cold.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/const.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/constexpr.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/deprecated.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/error.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/forceinline.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/format.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/noalias.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/noexcept.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/noinline.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/nonnull.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/noreturn.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/pure.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/restrict.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/warning.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/attr/weakref.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/cast.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/compiler_since.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/config.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/constant_p.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rarray.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rbasic.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rbignum.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rclass.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rdata.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rfile.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rhash.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/robject.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rregexp.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rstring.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rstruct.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/ctype.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/dllexport.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/dosish.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/error.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/eval.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/event.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/fl_type.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/gc.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/glob.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/globals.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/attribute.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/builtin.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/c_attribute.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/extension.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/feature.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/has/warning.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/array.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/bignum.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/class.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/compar.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/complex.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/cont.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/dir.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/enum.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/enumerator.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/error.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/eval.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/file.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/hash.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/io.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/load.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/marshal.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/numeric.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/object.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/parse.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/proc.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/process.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/random.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/range.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/rational.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/re.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/ruby.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/select.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/signal.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/sprintf.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/string.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/struct.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/thread.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/time.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/variable.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/intern/vm.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/interpreter.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/iterator.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/memory.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/method.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/module.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/newobj.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/scan_args.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/special_consts.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/static_assert.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/stdalign.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/stdbool.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/stdckdint.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/symbol.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/value.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/value_type.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/variable.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/warning_push.h +resolve_symbol_target.o: $(hdrdir)/ruby/internal/xmalloc.h +resolve_symbol_target.o: $(hdrdir)/ruby/missing.h +resolve_symbol_target.o: $(hdrdir)/ruby/ruby.h +resolve_symbol_target.o: $(hdrdir)/ruby/st.h +resolve_symbol_target.o: $(hdrdir)/ruby/subst.h +resolve_symbol_target.o: resolve_symbol_target.c +resolve_symbol_target.o: resolve_symbol_target.h +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/load/stringify_symbols/depend b/ext/-test-/load/stringify_symbols/depend new file mode 100644 index 0000000000..fbb5c625c8 --- /dev/null +++ b/ext/-test-/load/stringify_symbols/depend @@ -0,0 +1,163 @@ +# AUTOGENERATED DEPENDENCIES START +stringify_symbols.o: $(RUBY_EXTCONF_H) +stringify_symbols.o: $(arch_hdrdir)/ruby/config.h +stringify_symbols.o: $(hdrdir)/ruby.h +stringify_symbols.o: $(hdrdir)/ruby/assert.h +stringify_symbols.o: $(hdrdir)/ruby/backward.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/assume.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/attributes.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/bool.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/inttypes.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/limits.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/long_long.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/stdalign.h +stringify_symbols.o: $(hdrdir)/ruby/backward/2/stdarg.h +stringify_symbols.o: $(hdrdir)/ruby/defines.h +stringify_symbols.o: $(hdrdir)/ruby/intern.h +stringify_symbols.o: $(hdrdir)/ruby/internal/abi.h +stringify_symbols.o: $(hdrdir)/ruby/internal/anyargs.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/char.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/double.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/int.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/long.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/short.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +stringify_symbols.o: $(hdrdir)/ruby/internal/assume.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/artificial.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/cold.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/const.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/constexpr.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/deprecated.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/error.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/forceinline.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/format.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/noalias.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/noexcept.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/noinline.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/nonnull.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/noreturn.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/pure.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/restrict.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/warning.h +stringify_symbols.o: $(hdrdir)/ruby/internal/attr/weakref.h +stringify_symbols.o: $(hdrdir)/ruby/internal/cast.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +stringify_symbols.o: $(hdrdir)/ruby/internal/compiler_since.h +stringify_symbols.o: $(hdrdir)/ruby/internal/config.h +stringify_symbols.o: $(hdrdir)/ruby/internal/constant_p.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rarray.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rbasic.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rbignum.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rclass.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rdata.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rfile.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rhash.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/robject.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rregexp.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rstring.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rstruct.h +stringify_symbols.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +stringify_symbols.o: $(hdrdir)/ruby/internal/ctype.h +stringify_symbols.o: $(hdrdir)/ruby/internal/dllexport.h +stringify_symbols.o: $(hdrdir)/ruby/internal/dosish.h +stringify_symbols.o: $(hdrdir)/ruby/internal/error.h +stringify_symbols.o: $(hdrdir)/ruby/internal/eval.h +stringify_symbols.o: $(hdrdir)/ruby/internal/event.h +stringify_symbols.o: $(hdrdir)/ruby/internal/fl_type.h +stringify_symbols.o: $(hdrdir)/ruby/internal/gc.h +stringify_symbols.o: $(hdrdir)/ruby/internal/glob.h +stringify_symbols.o: $(hdrdir)/ruby/internal/globals.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/attribute.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/builtin.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/c_attribute.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/extension.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/feature.h +stringify_symbols.o: $(hdrdir)/ruby/internal/has/warning.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/array.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/bignum.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/class.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/compar.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/complex.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/cont.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/dir.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/enum.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/enumerator.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/error.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/eval.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/file.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/hash.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/io.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/load.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/marshal.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/numeric.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/object.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/parse.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/proc.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/process.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/random.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/range.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/rational.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/re.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/ruby.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/select.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/signal.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/sprintf.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/string.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/struct.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/thread.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/time.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/variable.h +stringify_symbols.o: $(hdrdir)/ruby/internal/intern/vm.h +stringify_symbols.o: $(hdrdir)/ruby/internal/interpreter.h +stringify_symbols.o: $(hdrdir)/ruby/internal/iterator.h +stringify_symbols.o: $(hdrdir)/ruby/internal/memory.h +stringify_symbols.o: $(hdrdir)/ruby/internal/method.h +stringify_symbols.o: $(hdrdir)/ruby/internal/module.h +stringify_symbols.o: $(hdrdir)/ruby/internal/newobj.h +stringify_symbols.o: $(hdrdir)/ruby/internal/scan_args.h +stringify_symbols.o: $(hdrdir)/ruby/internal/special_consts.h +stringify_symbols.o: $(hdrdir)/ruby/internal/static_assert.h +stringify_symbols.o: $(hdrdir)/ruby/internal/stdalign.h +stringify_symbols.o: $(hdrdir)/ruby/internal/stdbool.h +stringify_symbols.o: $(hdrdir)/ruby/internal/stdckdint.h +stringify_symbols.o: $(hdrdir)/ruby/internal/symbol.h +stringify_symbols.o: $(hdrdir)/ruby/internal/value.h +stringify_symbols.o: $(hdrdir)/ruby/internal/value_type.h +stringify_symbols.o: $(hdrdir)/ruby/internal/variable.h +stringify_symbols.o: $(hdrdir)/ruby/internal/warning_push.h +stringify_symbols.o: $(hdrdir)/ruby/internal/xmalloc.h +stringify_symbols.o: $(hdrdir)/ruby/missing.h +stringify_symbols.o: $(hdrdir)/ruby/ruby.h +stringify_symbols.o: $(hdrdir)/ruby/st.h +stringify_symbols.o: $(hdrdir)/ruby/subst.h +stringify_symbols.o: $(hdrdir)/ruby/util.h +stringify_symbols.o: stringify_symbols.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/load/stringify_target/depend b/ext/-test-/load/stringify_target/depend new file mode 100644 index 0000000000..949dd853f9 --- /dev/null +++ b/ext/-test-/load/stringify_target/depend @@ -0,0 +1,163 @@ +# AUTOGENERATED DEPENDENCIES START +stringify_target.o: $(RUBY_EXTCONF_H) +stringify_target.o: $(arch_hdrdir)/ruby/config.h +stringify_target.o: $(hdrdir)/ruby.h +stringify_target.o: $(hdrdir)/ruby/assert.h +stringify_target.o: $(hdrdir)/ruby/backward.h +stringify_target.o: $(hdrdir)/ruby/backward/2/assume.h +stringify_target.o: $(hdrdir)/ruby/backward/2/attributes.h +stringify_target.o: $(hdrdir)/ruby/backward/2/bool.h +stringify_target.o: $(hdrdir)/ruby/backward/2/inttypes.h +stringify_target.o: $(hdrdir)/ruby/backward/2/limits.h +stringify_target.o: $(hdrdir)/ruby/backward/2/long_long.h +stringify_target.o: $(hdrdir)/ruby/backward/2/stdalign.h +stringify_target.o: $(hdrdir)/ruby/backward/2/stdarg.h +stringify_target.o: $(hdrdir)/ruby/defines.h +stringify_target.o: $(hdrdir)/ruby/intern.h +stringify_target.o: $(hdrdir)/ruby/internal/abi.h +stringify_target.o: $(hdrdir)/ruby/internal/anyargs.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/char.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/double.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/int.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/long.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/short.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +stringify_target.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +stringify_target.o: $(hdrdir)/ruby/internal/assume.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/artificial.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/cold.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/const.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/constexpr.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/deprecated.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/error.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/forceinline.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/format.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/noalias.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/noexcept.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/noinline.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/nonnull.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/noreturn.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/pure.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/restrict.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/warning.h +stringify_target.o: $(hdrdir)/ruby/internal/attr/weakref.h +stringify_target.o: $(hdrdir)/ruby/internal/cast.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +stringify_target.o: $(hdrdir)/ruby/internal/compiler_since.h +stringify_target.o: $(hdrdir)/ruby/internal/config.h +stringify_target.o: $(hdrdir)/ruby/internal/constant_p.h +stringify_target.o: $(hdrdir)/ruby/internal/core.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rarray.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rbasic.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rbignum.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rclass.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rdata.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rfile.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rhash.h +stringify_target.o: $(hdrdir)/ruby/internal/core/robject.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rregexp.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rstring.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rstruct.h +stringify_target.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +stringify_target.o: $(hdrdir)/ruby/internal/ctype.h +stringify_target.o: $(hdrdir)/ruby/internal/dllexport.h +stringify_target.o: $(hdrdir)/ruby/internal/dosish.h +stringify_target.o: $(hdrdir)/ruby/internal/error.h +stringify_target.o: $(hdrdir)/ruby/internal/eval.h +stringify_target.o: $(hdrdir)/ruby/internal/event.h +stringify_target.o: $(hdrdir)/ruby/internal/fl_type.h +stringify_target.o: $(hdrdir)/ruby/internal/gc.h +stringify_target.o: $(hdrdir)/ruby/internal/glob.h +stringify_target.o: $(hdrdir)/ruby/internal/globals.h +stringify_target.o: $(hdrdir)/ruby/internal/has/attribute.h +stringify_target.o: $(hdrdir)/ruby/internal/has/builtin.h +stringify_target.o: $(hdrdir)/ruby/internal/has/c_attribute.h +stringify_target.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +stringify_target.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +stringify_target.o: $(hdrdir)/ruby/internal/has/extension.h +stringify_target.o: $(hdrdir)/ruby/internal/has/feature.h +stringify_target.o: $(hdrdir)/ruby/internal/has/warning.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/array.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/bignum.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/class.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/compar.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/complex.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/cont.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/dir.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/enum.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/enumerator.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/error.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/eval.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/file.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/hash.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/io.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/load.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/marshal.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/numeric.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/object.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/parse.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/proc.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/process.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/random.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/range.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/rational.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/re.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/ruby.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/select.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/signal.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/sprintf.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/string.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/struct.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/thread.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/time.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/variable.h +stringify_target.o: $(hdrdir)/ruby/internal/intern/vm.h +stringify_target.o: $(hdrdir)/ruby/internal/interpreter.h +stringify_target.o: $(hdrdir)/ruby/internal/iterator.h +stringify_target.o: $(hdrdir)/ruby/internal/memory.h +stringify_target.o: $(hdrdir)/ruby/internal/method.h +stringify_target.o: $(hdrdir)/ruby/internal/module.h +stringify_target.o: $(hdrdir)/ruby/internal/newobj.h +stringify_target.o: $(hdrdir)/ruby/internal/scan_args.h +stringify_target.o: $(hdrdir)/ruby/internal/special_consts.h +stringify_target.o: $(hdrdir)/ruby/internal/static_assert.h +stringify_target.o: $(hdrdir)/ruby/internal/stdalign.h +stringify_target.o: $(hdrdir)/ruby/internal/stdbool.h +stringify_target.o: $(hdrdir)/ruby/internal/stdckdint.h +stringify_target.o: $(hdrdir)/ruby/internal/symbol.h +stringify_target.o: $(hdrdir)/ruby/internal/value.h +stringify_target.o: $(hdrdir)/ruby/internal/value_type.h +stringify_target.o: $(hdrdir)/ruby/internal/variable.h +stringify_target.o: $(hdrdir)/ruby/internal/warning_push.h +stringify_target.o: $(hdrdir)/ruby/internal/xmalloc.h +stringify_target.o: $(hdrdir)/ruby/missing.h +stringify_target.o: $(hdrdir)/ruby/ruby.h +stringify_target.o: $(hdrdir)/ruby/st.h +stringify_target.o: $(hdrdir)/ruby/subst.h +stringify_target.o: stringify_target.c +stringify_target.o: stringify_target.h +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/namespace/yay1/extconf.rb b/ext/-test-/namespace/yay1/extconf.rb new file mode 100644 index 0000000000..539e99ab09 --- /dev/null +++ b/ext/-test-/namespace/yay1/extconf.rb @@ -0,0 +1 @@ +create_makefile('-test-/namespace/yay1') diff --git a/ext/-test-/namespace/yay1/yay1.c b/ext/-test-/namespace/yay1/yay1.c new file mode 100644 index 0000000000..564a221c8c --- /dev/null +++ b/ext/-test-/namespace/yay1/yay1.c @@ -0,0 +1,28 @@ +#include "yay1.h" + +VALUE +yay_value(void) +{ + return rb_str_new_cstr("yay"); +} + +static VALUE +yay1_f_version(VALUE klass) +{ + return rb_str_new_cstr("1.0.0"); +} + +static VALUE +yay1_yay(VALUE klass) +{ + return yay_value(); +} + +void +Init_yay1(void) +{ + VALUE mod = rb_define_module("Yay"); + rb_define_const(mod, "VERSION", rb_str_new_cstr("1.0.0")); + rb_define_singleton_method(mod, "version", yay1_f_version, 0); + rb_define_singleton_method(mod, "yay", yay1_yay, 0); +} diff --git a/ext/-test-/namespace/yay1/yay1.def b/ext/-test-/namespace/yay1/yay1.def new file mode 100644 index 0000000000..edbae87312 --- /dev/null +++ b/ext/-test-/namespace/yay1/yay1.def @@ -0,0 +1,4 @@ +LIBRARY yay1 +EXPORTS + Init_yay1 + yay_value diff --git a/ext/-test-/namespace/yay1/yay1.h b/ext/-test-/namespace/yay1/yay1.h new file mode 100644 index 0000000000..d68f8b5523 --- /dev/null +++ b/ext/-test-/namespace/yay1/yay1.h @@ -0,0 +1,4 @@ +#include <ruby.h> +#include "ruby/internal/dllexport.h" + +RUBY_EXTERN VALUE yay_value(void); diff --git a/ext/-test-/namespace/yay2/extconf.rb b/ext/-test-/namespace/yay2/extconf.rb new file mode 100644 index 0000000000..2027a42860 --- /dev/null +++ b/ext/-test-/namespace/yay2/extconf.rb @@ -0,0 +1 @@ +create_makefile('-test-/namespace/yay2') diff --git a/ext/-test-/namespace/yay2/yay2.c b/ext/-test-/namespace/yay2/yay2.c new file mode 100644 index 0000000000..b632ae8495 --- /dev/null +++ b/ext/-test-/namespace/yay2/yay2.c @@ -0,0 +1,28 @@ +#include "yay2.h" + +VALUE +yay_value(void) +{ + return rb_str_new_cstr("yaaay"); +} + +static VALUE +yay2_f_version(VALUE klass) +{ + return rb_str_new_cstr("2.0.0"); +} + +static VALUE +yay2_yay(VALUE klass) +{ + return yay_value(); +} + +void +Init_yay2(void) +{ + VALUE mod = rb_define_module("Yay"); + rb_define_const(mod, "VERSION", rb_str_new_cstr("2.0.0")); + rb_define_singleton_method(mod, "version", yay2_f_version, 0); + rb_define_singleton_method(mod, "yay", yay2_yay, 0); +} diff --git a/ext/-test-/namespace/yay2/yay2.def b/ext/-test-/namespace/yay2/yay2.def new file mode 100644 index 0000000000..6bb6011f4b --- /dev/null +++ b/ext/-test-/namespace/yay2/yay2.def @@ -0,0 +1,4 @@ +LIBRARY yay2 +EXPORTS + Init_yay2 + yay_value diff --git a/ext/-test-/namespace/yay2/yay2.h b/ext/-test-/namespace/yay2/yay2.h new file mode 100644 index 0000000000..d68f8b5523 --- /dev/null +++ b/ext/-test-/namespace/yay2/yay2.h @@ -0,0 +1,4 @@ +#include <ruby.h> +#include "ruby/internal/dllexport.h" + +RUBY_EXTERN VALUE yay_value(void); diff --git a/ext/-test-/stack/depend b/ext/-test-/stack/depend new file mode 100644 index 0000000000..5b852278f0 --- /dev/null +++ b/ext/-test-/stack/depend @@ -0,0 +1,177 @@ +# AUTOGENERATED DEPENDENCIES START +stack.o: $(RUBY_EXTCONF_H) +stack.o: $(arch_hdrdir)/ruby/config.h +stack.o: $(hdrdir)/ruby.h +stack.o: $(hdrdir)/ruby/assert.h +stack.o: $(hdrdir)/ruby/backward.h +stack.o: $(hdrdir)/ruby/backward/2/assume.h +stack.o: $(hdrdir)/ruby/backward/2/attributes.h +stack.o: $(hdrdir)/ruby/backward/2/bool.h +stack.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h +stack.o: $(hdrdir)/ruby/backward/2/inttypes.h +stack.o: $(hdrdir)/ruby/backward/2/limits.h +stack.o: $(hdrdir)/ruby/backward/2/long_long.h +stack.o: $(hdrdir)/ruby/backward/2/stdalign.h +stack.o: $(hdrdir)/ruby/backward/2/stdarg.h +stack.o: $(hdrdir)/ruby/defines.h +stack.o: $(hdrdir)/ruby/encoding.h +stack.o: $(hdrdir)/ruby/intern.h +stack.o: $(hdrdir)/ruby/internal/abi.h +stack.o: $(hdrdir)/ruby/internal/anyargs.h +stack.o: $(hdrdir)/ruby/internal/arithmetic.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/char.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/double.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/int.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/long.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/short.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +stack.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +stack.o: $(hdrdir)/ruby/internal/assume.h +stack.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +stack.o: $(hdrdir)/ruby/internal/attr/artificial.h +stack.o: $(hdrdir)/ruby/internal/attr/cold.h +stack.o: $(hdrdir)/ruby/internal/attr/const.h +stack.o: $(hdrdir)/ruby/internal/attr/constexpr.h +stack.o: $(hdrdir)/ruby/internal/attr/deprecated.h +stack.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +stack.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +stack.o: $(hdrdir)/ruby/internal/attr/error.h +stack.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +stack.o: $(hdrdir)/ruby/internal/attr/forceinline.h +stack.o: $(hdrdir)/ruby/internal/attr/format.h +stack.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +stack.o: $(hdrdir)/ruby/internal/attr/noalias.h +stack.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +stack.o: $(hdrdir)/ruby/internal/attr/noexcept.h +stack.o: $(hdrdir)/ruby/internal/attr/noinline.h +stack.o: $(hdrdir)/ruby/internal/attr/nonnull.h +stack.o: $(hdrdir)/ruby/internal/attr/noreturn.h +stack.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +stack.o: $(hdrdir)/ruby/internal/attr/pure.h +stack.o: $(hdrdir)/ruby/internal/attr/restrict.h +stack.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +stack.o: $(hdrdir)/ruby/internal/attr/warning.h +stack.o: $(hdrdir)/ruby/internal/attr/weakref.h +stack.o: $(hdrdir)/ruby/internal/cast.h +stack.o: $(hdrdir)/ruby/internal/compiler_is.h +stack.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +stack.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +stack.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +stack.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +stack.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +stack.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +stack.o: $(hdrdir)/ruby/internal/compiler_since.h +stack.o: $(hdrdir)/ruby/internal/config.h +stack.o: $(hdrdir)/ruby/internal/constant_p.h +stack.o: $(hdrdir)/ruby/internal/core.h +stack.o: $(hdrdir)/ruby/internal/core/rarray.h +stack.o: $(hdrdir)/ruby/internal/core/rbasic.h +stack.o: $(hdrdir)/ruby/internal/core/rbignum.h +stack.o: $(hdrdir)/ruby/internal/core/rclass.h +stack.o: $(hdrdir)/ruby/internal/core/rdata.h +stack.o: $(hdrdir)/ruby/internal/core/rfile.h +stack.o: $(hdrdir)/ruby/internal/core/rhash.h +stack.o: $(hdrdir)/ruby/internal/core/robject.h +stack.o: $(hdrdir)/ruby/internal/core/rregexp.h +stack.o: $(hdrdir)/ruby/internal/core/rstring.h +stack.o: $(hdrdir)/ruby/internal/core/rstruct.h +stack.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +stack.o: $(hdrdir)/ruby/internal/ctype.h +stack.o: $(hdrdir)/ruby/internal/dllexport.h +stack.o: $(hdrdir)/ruby/internal/dosish.h +stack.o: $(hdrdir)/ruby/internal/encoding/coderange.h +stack.o: $(hdrdir)/ruby/internal/encoding/ctype.h +stack.o: $(hdrdir)/ruby/internal/encoding/encoding.h +stack.o: $(hdrdir)/ruby/internal/encoding/pathname.h +stack.o: $(hdrdir)/ruby/internal/encoding/re.h +stack.o: $(hdrdir)/ruby/internal/encoding/sprintf.h +stack.o: $(hdrdir)/ruby/internal/encoding/string.h +stack.o: $(hdrdir)/ruby/internal/encoding/symbol.h +stack.o: $(hdrdir)/ruby/internal/encoding/transcode.h +stack.o: $(hdrdir)/ruby/internal/error.h +stack.o: $(hdrdir)/ruby/internal/eval.h +stack.o: $(hdrdir)/ruby/internal/event.h +stack.o: $(hdrdir)/ruby/internal/fl_type.h +stack.o: $(hdrdir)/ruby/internal/gc.h +stack.o: $(hdrdir)/ruby/internal/glob.h +stack.o: $(hdrdir)/ruby/internal/globals.h +stack.o: $(hdrdir)/ruby/internal/has/attribute.h +stack.o: $(hdrdir)/ruby/internal/has/builtin.h +stack.o: $(hdrdir)/ruby/internal/has/c_attribute.h +stack.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +stack.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +stack.o: $(hdrdir)/ruby/internal/has/extension.h +stack.o: $(hdrdir)/ruby/internal/has/feature.h +stack.o: $(hdrdir)/ruby/internal/has/warning.h +stack.o: $(hdrdir)/ruby/internal/intern/array.h +stack.o: $(hdrdir)/ruby/internal/intern/bignum.h +stack.o: $(hdrdir)/ruby/internal/intern/class.h +stack.o: $(hdrdir)/ruby/internal/intern/compar.h +stack.o: $(hdrdir)/ruby/internal/intern/complex.h +stack.o: $(hdrdir)/ruby/internal/intern/cont.h +stack.o: $(hdrdir)/ruby/internal/intern/dir.h +stack.o: $(hdrdir)/ruby/internal/intern/enum.h +stack.o: $(hdrdir)/ruby/internal/intern/enumerator.h +stack.o: $(hdrdir)/ruby/internal/intern/error.h +stack.o: $(hdrdir)/ruby/internal/intern/eval.h +stack.o: $(hdrdir)/ruby/internal/intern/file.h +stack.o: $(hdrdir)/ruby/internal/intern/hash.h +stack.o: $(hdrdir)/ruby/internal/intern/io.h +stack.o: $(hdrdir)/ruby/internal/intern/load.h +stack.o: $(hdrdir)/ruby/internal/intern/marshal.h +stack.o: $(hdrdir)/ruby/internal/intern/numeric.h +stack.o: $(hdrdir)/ruby/internal/intern/object.h +stack.o: $(hdrdir)/ruby/internal/intern/parse.h +stack.o: $(hdrdir)/ruby/internal/intern/proc.h +stack.o: $(hdrdir)/ruby/internal/intern/process.h +stack.o: $(hdrdir)/ruby/internal/intern/random.h +stack.o: $(hdrdir)/ruby/internal/intern/range.h +stack.o: $(hdrdir)/ruby/internal/intern/rational.h +stack.o: $(hdrdir)/ruby/internal/intern/re.h +stack.o: $(hdrdir)/ruby/internal/intern/ruby.h +stack.o: $(hdrdir)/ruby/internal/intern/select.h +stack.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +stack.o: $(hdrdir)/ruby/internal/intern/signal.h +stack.o: $(hdrdir)/ruby/internal/intern/sprintf.h +stack.o: $(hdrdir)/ruby/internal/intern/string.h +stack.o: $(hdrdir)/ruby/internal/intern/struct.h +stack.o: $(hdrdir)/ruby/internal/intern/thread.h +stack.o: $(hdrdir)/ruby/internal/intern/time.h +stack.o: $(hdrdir)/ruby/internal/intern/variable.h +stack.o: $(hdrdir)/ruby/internal/intern/vm.h +stack.o: $(hdrdir)/ruby/internal/interpreter.h +stack.o: $(hdrdir)/ruby/internal/iterator.h +stack.o: $(hdrdir)/ruby/internal/memory.h +stack.o: $(hdrdir)/ruby/internal/method.h +stack.o: $(hdrdir)/ruby/internal/module.h +stack.o: $(hdrdir)/ruby/internal/newobj.h +stack.o: $(hdrdir)/ruby/internal/scan_args.h +stack.o: $(hdrdir)/ruby/internal/special_consts.h +stack.o: $(hdrdir)/ruby/internal/static_assert.h +stack.o: $(hdrdir)/ruby/internal/stdalign.h +stack.o: $(hdrdir)/ruby/internal/stdbool.h +stack.o: $(hdrdir)/ruby/internal/stdckdint.h +stack.o: $(hdrdir)/ruby/internal/symbol.h +stack.o: $(hdrdir)/ruby/internal/value.h +stack.o: $(hdrdir)/ruby/internal/value_type.h +stack.o: $(hdrdir)/ruby/internal/variable.h +stack.o: $(hdrdir)/ruby/internal/warning_push.h +stack.o: $(hdrdir)/ruby/internal/xmalloc.h +stack.o: $(hdrdir)/ruby/missing.h +stack.o: $(hdrdir)/ruby/onigmo.h +stack.o: $(hdrdir)/ruby/oniguruma.h +stack.o: $(hdrdir)/ruby/ruby.h +stack.o: $(hdrdir)/ruby/st.h +stack.o: $(hdrdir)/ruby/subst.h +stack.o: $(top_srcdir)/internal/compilers.h +stack.o: $(top_srcdir)/internal/string.h +stack.o: stack.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/thread/id/depend b/ext/-test-/thread/id/depend new file mode 100644 index 0000000000..ea5661a8ba --- /dev/null +++ b/ext/-test-/thread/id/depend @@ -0,0 +1,162 @@ +# AUTOGENERATED DEPENDENCIES START +id.o: $(RUBY_EXTCONF_H) +id.o: $(arch_hdrdir)/ruby/config.h +id.o: $(hdrdir)/ruby.h +id.o: $(hdrdir)/ruby/assert.h +id.o: $(hdrdir)/ruby/backward.h +id.o: $(hdrdir)/ruby/backward/2/assume.h +id.o: $(hdrdir)/ruby/backward/2/attributes.h +id.o: $(hdrdir)/ruby/backward/2/bool.h +id.o: $(hdrdir)/ruby/backward/2/inttypes.h +id.o: $(hdrdir)/ruby/backward/2/limits.h +id.o: $(hdrdir)/ruby/backward/2/long_long.h +id.o: $(hdrdir)/ruby/backward/2/stdalign.h +id.o: $(hdrdir)/ruby/backward/2/stdarg.h +id.o: $(hdrdir)/ruby/defines.h +id.o: $(hdrdir)/ruby/intern.h +id.o: $(hdrdir)/ruby/internal/abi.h +id.o: $(hdrdir)/ruby/internal/anyargs.h +id.o: $(hdrdir)/ruby/internal/arithmetic.h +id.o: $(hdrdir)/ruby/internal/arithmetic/char.h +id.o: $(hdrdir)/ruby/internal/arithmetic/double.h +id.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +id.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/int.h +id.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/long.h +id.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +id.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/short.h +id.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +id.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +id.o: $(hdrdir)/ruby/internal/assume.h +id.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +id.o: $(hdrdir)/ruby/internal/attr/artificial.h +id.o: $(hdrdir)/ruby/internal/attr/cold.h +id.o: $(hdrdir)/ruby/internal/attr/const.h +id.o: $(hdrdir)/ruby/internal/attr/constexpr.h +id.o: $(hdrdir)/ruby/internal/attr/deprecated.h +id.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +id.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +id.o: $(hdrdir)/ruby/internal/attr/error.h +id.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +id.o: $(hdrdir)/ruby/internal/attr/forceinline.h +id.o: $(hdrdir)/ruby/internal/attr/format.h +id.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +id.o: $(hdrdir)/ruby/internal/attr/noalias.h +id.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +id.o: $(hdrdir)/ruby/internal/attr/noexcept.h +id.o: $(hdrdir)/ruby/internal/attr/noinline.h +id.o: $(hdrdir)/ruby/internal/attr/nonnull.h +id.o: $(hdrdir)/ruby/internal/attr/noreturn.h +id.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +id.o: $(hdrdir)/ruby/internal/attr/pure.h +id.o: $(hdrdir)/ruby/internal/attr/restrict.h +id.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +id.o: $(hdrdir)/ruby/internal/attr/warning.h +id.o: $(hdrdir)/ruby/internal/attr/weakref.h +id.o: $(hdrdir)/ruby/internal/cast.h +id.o: $(hdrdir)/ruby/internal/compiler_is.h +id.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +id.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +id.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +id.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +id.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +id.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +id.o: $(hdrdir)/ruby/internal/compiler_since.h +id.o: $(hdrdir)/ruby/internal/config.h +id.o: $(hdrdir)/ruby/internal/constant_p.h +id.o: $(hdrdir)/ruby/internal/core.h +id.o: $(hdrdir)/ruby/internal/core/rarray.h +id.o: $(hdrdir)/ruby/internal/core/rbasic.h +id.o: $(hdrdir)/ruby/internal/core/rbignum.h +id.o: $(hdrdir)/ruby/internal/core/rclass.h +id.o: $(hdrdir)/ruby/internal/core/rdata.h +id.o: $(hdrdir)/ruby/internal/core/rfile.h +id.o: $(hdrdir)/ruby/internal/core/rhash.h +id.o: $(hdrdir)/ruby/internal/core/robject.h +id.o: $(hdrdir)/ruby/internal/core/rregexp.h +id.o: $(hdrdir)/ruby/internal/core/rstring.h +id.o: $(hdrdir)/ruby/internal/core/rstruct.h +id.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +id.o: $(hdrdir)/ruby/internal/ctype.h +id.o: $(hdrdir)/ruby/internal/dllexport.h +id.o: $(hdrdir)/ruby/internal/dosish.h +id.o: $(hdrdir)/ruby/internal/error.h +id.o: $(hdrdir)/ruby/internal/eval.h +id.o: $(hdrdir)/ruby/internal/event.h +id.o: $(hdrdir)/ruby/internal/fl_type.h +id.o: $(hdrdir)/ruby/internal/gc.h +id.o: $(hdrdir)/ruby/internal/glob.h +id.o: $(hdrdir)/ruby/internal/globals.h +id.o: $(hdrdir)/ruby/internal/has/attribute.h +id.o: $(hdrdir)/ruby/internal/has/builtin.h +id.o: $(hdrdir)/ruby/internal/has/c_attribute.h +id.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +id.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +id.o: $(hdrdir)/ruby/internal/has/extension.h +id.o: $(hdrdir)/ruby/internal/has/feature.h +id.o: $(hdrdir)/ruby/internal/has/warning.h +id.o: $(hdrdir)/ruby/internal/intern/array.h +id.o: $(hdrdir)/ruby/internal/intern/bignum.h +id.o: $(hdrdir)/ruby/internal/intern/class.h +id.o: $(hdrdir)/ruby/internal/intern/compar.h +id.o: $(hdrdir)/ruby/internal/intern/complex.h +id.o: $(hdrdir)/ruby/internal/intern/cont.h +id.o: $(hdrdir)/ruby/internal/intern/dir.h +id.o: $(hdrdir)/ruby/internal/intern/enum.h +id.o: $(hdrdir)/ruby/internal/intern/enumerator.h +id.o: $(hdrdir)/ruby/internal/intern/error.h +id.o: $(hdrdir)/ruby/internal/intern/eval.h +id.o: $(hdrdir)/ruby/internal/intern/file.h +id.o: $(hdrdir)/ruby/internal/intern/hash.h +id.o: $(hdrdir)/ruby/internal/intern/io.h +id.o: $(hdrdir)/ruby/internal/intern/load.h +id.o: $(hdrdir)/ruby/internal/intern/marshal.h +id.o: $(hdrdir)/ruby/internal/intern/numeric.h +id.o: $(hdrdir)/ruby/internal/intern/object.h +id.o: $(hdrdir)/ruby/internal/intern/parse.h +id.o: $(hdrdir)/ruby/internal/intern/proc.h +id.o: $(hdrdir)/ruby/internal/intern/process.h +id.o: $(hdrdir)/ruby/internal/intern/random.h +id.o: $(hdrdir)/ruby/internal/intern/range.h +id.o: $(hdrdir)/ruby/internal/intern/rational.h +id.o: $(hdrdir)/ruby/internal/intern/re.h +id.o: $(hdrdir)/ruby/internal/intern/ruby.h +id.o: $(hdrdir)/ruby/internal/intern/select.h +id.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +id.o: $(hdrdir)/ruby/internal/intern/signal.h +id.o: $(hdrdir)/ruby/internal/intern/sprintf.h +id.o: $(hdrdir)/ruby/internal/intern/string.h +id.o: $(hdrdir)/ruby/internal/intern/struct.h +id.o: $(hdrdir)/ruby/internal/intern/thread.h +id.o: $(hdrdir)/ruby/internal/intern/time.h +id.o: $(hdrdir)/ruby/internal/intern/variable.h +id.o: $(hdrdir)/ruby/internal/intern/vm.h +id.o: $(hdrdir)/ruby/internal/interpreter.h +id.o: $(hdrdir)/ruby/internal/iterator.h +id.o: $(hdrdir)/ruby/internal/memory.h +id.o: $(hdrdir)/ruby/internal/method.h +id.o: $(hdrdir)/ruby/internal/module.h +id.o: $(hdrdir)/ruby/internal/newobj.h +id.o: $(hdrdir)/ruby/internal/scan_args.h +id.o: $(hdrdir)/ruby/internal/special_consts.h +id.o: $(hdrdir)/ruby/internal/static_assert.h +id.o: $(hdrdir)/ruby/internal/stdalign.h +id.o: $(hdrdir)/ruby/internal/stdbool.h +id.o: $(hdrdir)/ruby/internal/stdckdint.h +id.o: $(hdrdir)/ruby/internal/symbol.h +id.o: $(hdrdir)/ruby/internal/value.h +id.o: $(hdrdir)/ruby/internal/value_type.h +id.o: $(hdrdir)/ruby/internal/variable.h +id.o: $(hdrdir)/ruby/internal/warning_push.h +id.o: $(hdrdir)/ruby/internal/xmalloc.h +id.o: $(hdrdir)/ruby/missing.h +id.o: $(hdrdir)/ruby/ruby.h +id.o: $(hdrdir)/ruby/st.h +id.o: $(hdrdir)/ruby/subst.h +id.o: id.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/thread/lock_native_thread/depend b/ext/-test-/thread/lock_native_thread/depend new file mode 100644 index 0000000000..386c95a824 --- /dev/null +++ b/ext/-test-/thread/lock_native_thread/depend @@ -0,0 +1,162 @@ +# AUTOGENERATED DEPENDENCIES START +lock_native_thread.o: $(RUBY_EXTCONF_H) +lock_native_thread.o: $(arch_hdrdir)/ruby/config.h +lock_native_thread.o: $(hdrdir)/ruby/assert.h +lock_native_thread.o: $(hdrdir)/ruby/backward.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/assume.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/attributes.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/bool.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/inttypes.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/limits.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/long_long.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/stdalign.h +lock_native_thread.o: $(hdrdir)/ruby/backward/2/stdarg.h +lock_native_thread.o: $(hdrdir)/ruby/defines.h +lock_native_thread.o: $(hdrdir)/ruby/intern.h +lock_native_thread.o: $(hdrdir)/ruby/internal/abi.h +lock_native_thread.o: $(hdrdir)/ruby/internal/anyargs.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/char.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/double.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/int.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/long.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/short.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h +lock_native_thread.o: $(hdrdir)/ruby/internal/assume.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/alloc_size.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/artificial.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/cold.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/const.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/constexpr.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/deprecated.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/error.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/flag_enum.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/forceinline.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/format.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/noalias.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/nodiscard.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/noexcept.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/noinline.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/nonnull.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/noreturn.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/packed_struct.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/pure.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/restrict.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/warning.h +lock_native_thread.o: $(hdrdir)/ruby/internal/attr/weakref.h +lock_native_thread.o: $(hdrdir)/ruby/internal/cast.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is/apple.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is/clang.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is/intel.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h +lock_native_thread.o: $(hdrdir)/ruby/internal/compiler_since.h +lock_native_thread.o: $(hdrdir)/ruby/internal/config.h +lock_native_thread.o: $(hdrdir)/ruby/internal/constant_p.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rarray.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rbasic.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rbignum.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rclass.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rdata.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rfile.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rhash.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/robject.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rregexp.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rstring.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rstruct.h +lock_native_thread.o: $(hdrdir)/ruby/internal/core/rtypeddata.h +lock_native_thread.o: $(hdrdir)/ruby/internal/ctype.h +lock_native_thread.o: $(hdrdir)/ruby/internal/dllexport.h +lock_native_thread.o: $(hdrdir)/ruby/internal/dosish.h +lock_native_thread.o: $(hdrdir)/ruby/internal/error.h +lock_native_thread.o: $(hdrdir)/ruby/internal/eval.h +lock_native_thread.o: $(hdrdir)/ruby/internal/event.h +lock_native_thread.o: $(hdrdir)/ruby/internal/fl_type.h +lock_native_thread.o: $(hdrdir)/ruby/internal/gc.h +lock_native_thread.o: $(hdrdir)/ruby/internal/glob.h +lock_native_thread.o: $(hdrdir)/ruby/internal/globals.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/attribute.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/builtin.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/c_attribute.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/extension.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/feature.h +lock_native_thread.o: $(hdrdir)/ruby/internal/has/warning.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/array.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/bignum.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/class.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/compar.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/complex.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/cont.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/dir.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/enum.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/enumerator.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/error.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/eval.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/file.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/hash.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/io.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/load.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/marshal.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/numeric.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/object.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/parse.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/proc.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/process.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/random.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/range.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/rational.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/re.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/ruby.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/select.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/select/largesize.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/signal.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/sprintf.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/string.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/struct.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/thread.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/time.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/variable.h +lock_native_thread.o: $(hdrdir)/ruby/internal/intern/vm.h +lock_native_thread.o: $(hdrdir)/ruby/internal/interpreter.h +lock_native_thread.o: $(hdrdir)/ruby/internal/iterator.h +lock_native_thread.o: $(hdrdir)/ruby/internal/memory.h +lock_native_thread.o: $(hdrdir)/ruby/internal/method.h +lock_native_thread.o: $(hdrdir)/ruby/internal/module.h +lock_native_thread.o: $(hdrdir)/ruby/internal/newobj.h +lock_native_thread.o: $(hdrdir)/ruby/internal/scan_args.h +lock_native_thread.o: $(hdrdir)/ruby/internal/special_consts.h +lock_native_thread.o: $(hdrdir)/ruby/internal/static_assert.h +lock_native_thread.o: $(hdrdir)/ruby/internal/stdalign.h +lock_native_thread.o: $(hdrdir)/ruby/internal/stdbool.h +lock_native_thread.o: $(hdrdir)/ruby/internal/stdckdint.h +lock_native_thread.o: $(hdrdir)/ruby/internal/symbol.h +lock_native_thread.o: $(hdrdir)/ruby/internal/value.h +lock_native_thread.o: $(hdrdir)/ruby/internal/value_type.h +lock_native_thread.o: $(hdrdir)/ruby/internal/variable.h +lock_native_thread.o: $(hdrdir)/ruby/internal/warning_push.h +lock_native_thread.o: $(hdrdir)/ruby/internal/xmalloc.h +lock_native_thread.o: $(hdrdir)/ruby/missing.h +lock_native_thread.o: $(hdrdir)/ruby/ruby.h +lock_native_thread.o: $(hdrdir)/ruby/st.h +lock_native_thread.o: $(hdrdir)/ruby/subst.h +lock_native_thread.o: $(hdrdir)/ruby/thread.h +lock_native_thread.o: lock_native_thread.c +# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/thread_fd/depend b/ext/-test-/thread_fd/depend deleted file mode 100644 index 0fda9f6dbf..0000000000 --- a/ext/-test-/thread_fd/depend +++ /dev/null @@ -1,161 +0,0 @@ -# AUTOGENERATED DEPENDENCIES START -thread_fd.o: $(RUBY_EXTCONF_H) -thread_fd.o: $(arch_hdrdir)/ruby/config.h -thread_fd.o: $(hdrdir)/ruby/assert.h -thread_fd.o: $(hdrdir)/ruby/backward.h -thread_fd.o: $(hdrdir)/ruby/backward/2/assume.h -thread_fd.o: $(hdrdir)/ruby/backward/2/attributes.h -thread_fd.o: $(hdrdir)/ruby/backward/2/bool.h -thread_fd.o: $(hdrdir)/ruby/backward/2/inttypes.h -thread_fd.o: $(hdrdir)/ruby/backward/2/limits.h -thread_fd.o: $(hdrdir)/ruby/backward/2/long_long.h -thread_fd.o: $(hdrdir)/ruby/backward/2/stdalign.h -thread_fd.o: $(hdrdir)/ruby/backward/2/stdarg.h -thread_fd.o: $(hdrdir)/ruby/defines.h -thread_fd.o: $(hdrdir)/ruby/intern.h -thread_fd.o: $(hdrdir)/ruby/internal/abi.h -thread_fd.o: $(hdrdir)/ruby/internal/anyargs.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/char.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/double.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/int.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/long.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/short.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h -thread_fd.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h -thread_fd.o: $(hdrdir)/ruby/internal/assume.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/alloc_size.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/artificial.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/cold.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/const.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/constexpr.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/deprecated.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/error.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/flag_enum.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/forceinline.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/format.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/noalias.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/nodiscard.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/noexcept.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/noinline.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/nonnull.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/noreturn.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/packed_struct.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/pure.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/restrict.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/warning.h -thread_fd.o: $(hdrdir)/ruby/internal/attr/weakref.h -thread_fd.o: $(hdrdir)/ruby/internal/cast.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/apple.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/clang.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/intel.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h -thread_fd.o: $(hdrdir)/ruby/internal/compiler_since.h -thread_fd.o: $(hdrdir)/ruby/internal/config.h -thread_fd.o: $(hdrdir)/ruby/internal/constant_p.h -thread_fd.o: $(hdrdir)/ruby/internal/core.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rarray.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rbasic.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rbignum.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rclass.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rdata.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rfile.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rhash.h -thread_fd.o: $(hdrdir)/ruby/internal/core/robject.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rregexp.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rstring.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rstruct.h -thread_fd.o: $(hdrdir)/ruby/internal/core/rtypeddata.h -thread_fd.o: $(hdrdir)/ruby/internal/ctype.h -thread_fd.o: $(hdrdir)/ruby/internal/dllexport.h -thread_fd.o: $(hdrdir)/ruby/internal/dosish.h -thread_fd.o: $(hdrdir)/ruby/internal/error.h -thread_fd.o: $(hdrdir)/ruby/internal/eval.h -thread_fd.o: $(hdrdir)/ruby/internal/event.h -thread_fd.o: $(hdrdir)/ruby/internal/fl_type.h -thread_fd.o: $(hdrdir)/ruby/internal/gc.h -thread_fd.o: $(hdrdir)/ruby/internal/glob.h -thread_fd.o: $(hdrdir)/ruby/internal/globals.h -thread_fd.o: $(hdrdir)/ruby/internal/has/attribute.h -thread_fd.o: $(hdrdir)/ruby/internal/has/builtin.h -thread_fd.o: $(hdrdir)/ruby/internal/has/c_attribute.h -thread_fd.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h -thread_fd.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h -thread_fd.o: $(hdrdir)/ruby/internal/has/extension.h -thread_fd.o: $(hdrdir)/ruby/internal/has/feature.h -thread_fd.o: $(hdrdir)/ruby/internal/has/warning.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/array.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/bignum.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/class.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/compar.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/complex.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/cont.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/dir.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/enum.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/enumerator.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/error.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/eval.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/file.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/hash.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/io.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/load.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/marshal.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/numeric.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/object.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/parse.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/proc.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/process.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/random.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/range.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/rational.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/re.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/ruby.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/select.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/select/largesize.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/signal.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/sprintf.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/string.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/struct.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/thread.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/time.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/variable.h -thread_fd.o: $(hdrdir)/ruby/internal/intern/vm.h -thread_fd.o: $(hdrdir)/ruby/internal/interpreter.h -thread_fd.o: $(hdrdir)/ruby/internal/iterator.h -thread_fd.o: $(hdrdir)/ruby/internal/memory.h -thread_fd.o: $(hdrdir)/ruby/internal/method.h -thread_fd.o: $(hdrdir)/ruby/internal/module.h -thread_fd.o: $(hdrdir)/ruby/internal/newobj.h -thread_fd.o: $(hdrdir)/ruby/internal/scan_args.h -thread_fd.o: $(hdrdir)/ruby/internal/special_consts.h -thread_fd.o: $(hdrdir)/ruby/internal/static_assert.h -thread_fd.o: $(hdrdir)/ruby/internal/stdalign.h -thread_fd.o: $(hdrdir)/ruby/internal/stdbool.h -thread_fd.o: $(hdrdir)/ruby/internal/stdckdint.h -thread_fd.o: $(hdrdir)/ruby/internal/symbol.h -thread_fd.o: $(hdrdir)/ruby/internal/value.h -thread_fd.o: $(hdrdir)/ruby/internal/value_type.h -thread_fd.o: $(hdrdir)/ruby/internal/variable.h -thread_fd.o: $(hdrdir)/ruby/internal/warning_push.h -thread_fd.o: $(hdrdir)/ruby/internal/xmalloc.h -thread_fd.o: $(hdrdir)/ruby/missing.h -thread_fd.o: $(hdrdir)/ruby/ruby.h -thread_fd.o: $(hdrdir)/ruby/st.h -thread_fd.o: $(hdrdir)/ruby/subst.h -thread_fd.o: thread_fd.c -# AUTOGENERATED DEPENDENCIES END diff --git a/ext/-test-/thread_fd/extconf.rb b/ext/-test-/thread_fd/extconf.rb deleted file mode 100644 index a8bbe9d169..0000000000 --- a/ext/-test-/thread_fd/extconf.rb +++ /dev/null @@ -1,2 +0,0 @@ -# frozen_string_literal: true -create_makefile('-test-/thread_fd') diff --git a/ext/-test-/thread_fd/thread_fd.c b/ext/-test-/thread_fd/thread_fd.c deleted file mode 100644 index 042b799dc8..0000000000 --- a/ext/-test-/thread_fd/thread_fd.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "ruby/ruby.h" - -static VALUE -thread_fd_close(VALUE ign, VALUE fd) -{ - rb_thread_fd_close(NUM2INT(fd)); - return Qnil; -} - -static VALUE -thread_fd_wait(VALUE ign, VALUE fd) -{ - int ret = rb_thread_wait_fd(NUM2INT(fd)); - return INT2NUM(ret); -} - -static VALUE -thread_fd_writable(VALUE ign, VALUE fd) -{ - int ret = rb_thread_fd_writable(NUM2INT(fd)); - return INT2NUM(ret); -} - -void -Init_thread_fd(void) -{ - rb_define_singleton_method(rb_cIO, "thread_fd_close", thread_fd_close, 1); - rb_define_singleton_method(rb_cIO, "thread_fd_wait", thread_fd_wait, 1); - rb_define_singleton_method(rb_cIO, "thread_fd_writable", thread_fd_writable, 1); -} diff --git a/ext/cgi/escape/escape.c b/ext/cgi/escape/escape.c index 495ad83aa3..6b00bc37c1 100644 --- a/ext/cgi/escape/escape.c +++ b/ext/cgi/escape/escape.c @@ -8,7 +8,7 @@ RUBY_EXTERN const signed char ruby_digit36_to_number_table[]; #define upper_hexdigits (ruby_hexdigits+16) #define char_to_number(c) ruby_digit36_to_number_table[(unsigned char)(c)] -static VALUE rb_cCGI, rb_mUtil, rb_mEscape; +static VALUE rb_cCGI, rb_mEscape, rb_mEscapeExt; static ID id_accept_charset; #define HTML_ESCAPE_MAX_LEN 6 @@ -471,17 +471,17 @@ Init_escape(void) void InitVM_escape(void) { - rb_cCGI = rb_define_class("CGI", rb_cObject); - rb_mEscape = rb_define_module_under(rb_cCGI, "Escape"); - rb_mUtil = rb_define_module_under(rb_cCGI, "Util"); - rb_define_method(rb_mEscape, "escapeHTML", cgiesc_escape_html, 1); - rb_define_method(rb_mEscape, "unescapeHTML", cgiesc_unescape_html, 1); - rb_define_method(rb_mEscape, "escapeURIComponent", cgiesc_escape_uri_component, 1); - rb_define_alias(rb_mEscape, "escape_uri_component", "escapeURIComponent"); - rb_define_method(rb_mEscape, "unescapeURIComponent", cgiesc_unescape_uri_component, -1); - rb_define_alias(rb_mEscape, "unescape_uri_component", "unescapeURIComponent"); - rb_define_method(rb_mEscape, "escape", cgiesc_escape, 1); - rb_define_method(rb_mEscape, "unescape", cgiesc_unescape, -1); - rb_prepend_module(rb_mUtil, rb_mEscape); - rb_extend_object(rb_cCGI, rb_mEscape); + rb_cCGI = rb_define_class("CGI", rb_cObject); + rb_mEscapeExt = rb_define_module_under(rb_cCGI, "EscapeExt"); + rb_mEscape = rb_define_module_under(rb_cCGI, "Escape"); + rb_define_method(rb_mEscapeExt, "escapeHTML", cgiesc_escape_html, 1); + rb_define_method(rb_mEscapeExt, "unescapeHTML", cgiesc_unescape_html, 1); + rb_define_method(rb_mEscapeExt, "escapeURIComponent", cgiesc_escape_uri_component, 1); + rb_define_alias(rb_mEscapeExt, "escape_uri_component", "escapeURIComponent"); + rb_define_method(rb_mEscapeExt, "unescapeURIComponent", cgiesc_unescape_uri_component, -1); + rb_define_alias(rb_mEscapeExt, "unescape_uri_component", "unescapeURIComponent"); + rb_define_method(rb_mEscapeExt, "escape", cgiesc_escape, 1); + rb_define_method(rb_mEscapeExt, "unescape", cgiesc_unescape, -1); + rb_prepend_module(rb_mEscape, rb_mEscapeExt); + rb_extend_object(rb_cCGI, rb_mEscapeExt); } diff --git a/ext/coverage/depend b/ext/coverage/depend index a00217a19f..a7d9b7ff7a 100644 --- a/ext/coverage/depend +++ b/ext/coverage/depend @@ -186,6 +186,7 @@ coverage.o: $(top_srcdir)/internal/compilers.h coverage.o: $(top_srcdir)/internal/gc.h coverage.o: $(top_srcdir)/internal/hash.h coverage.o: $(top_srcdir)/internal/imemo.h +coverage.o: $(top_srcdir)/internal/namespace.h coverage.o: $(top_srcdir)/internal/sanitizers.h coverage.o: $(top_srcdir)/internal/serial.h coverage.o: $(top_srcdir)/internal/set_table.h diff --git a/ext/date/date_core.c b/ext/date/date_core.c index b80d948b00..dbee067f6b 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -1599,7 +1599,7 @@ m_ajd(union DateData *x) if (simple_dat_p(x)) { r = m_real_jd(x); - if (FIXNUM_P(r) && FIX2LONG(r) <= (FIXNUM_MAX / 2)) { + if (FIXNUM_P(r) && FIX2LONG(r) <= (FIXNUM_MAX / 2) && FIX2LONG(r) >= (FIXNUM_MIN + 1) / 2) { long ir = FIX2LONG(r); ir = ir * 2 - 1; return rb_rational_new2(LONG2FIX(ir), INT2FIX(2)); @@ -3878,7 +3878,6 @@ static VALUE rt_complete_frags(VALUE klass, VALUE hash) { static VALUE tab = Qnil; - int g; long e; VALUE k, a, d; @@ -3975,9 +3974,13 @@ rt_complete_frags(VALUE klass, VALUE hash) rb_gc_register_mark_object(tab); } + k = Qnil; + { - long i, eno = 0, idx = 0; + long i, eno = 0; + VALUE t = Qnil; + e = 0; for (i = 0; i < RARRAY_LEN(tab); i++) { VALUE x, a; @@ -3992,23 +3995,20 @@ rt_complete_frags(VALUE klass, VALUE hash) n++; if (n > eno) { eno = n; - idx = i; + t = x; } } } - if (eno == 0) - g = 0; - else { - g = 1; - k = RARRAY_AREF(RARRAY_AREF(tab, idx), 0); - a = RARRAY_AREF(RARRAY_AREF(tab, idx), 1); - e = eno; + if (eno > 0) { + k = RARRAY_AREF(t, 0); + a = RARRAY_AREF(t, 1); } + e = eno; } d = Qnil; - if (g && !NIL_P(k) && (RARRAY_LEN(a) - e)) { + if (!NIL_P(k) && (RARRAY_LEN(a) > e)) { if (k == sym("ordinal")) { if (NIL_P(ref_hash("year"))) { if (NIL_P(d)) @@ -4095,7 +4095,7 @@ rt_complete_frags(VALUE klass, VALUE hash) } } - if (g && k == sym("time")) { + if (k == sym("time")) { if (f_le_p(klass, cDateTime)) { if (NIL_P(d)) d = date_s_today(0, (VALUE *)0, cDate); @@ -6936,13 +6936,24 @@ d_lite_eql_p(VALUE self, VALUE other) static VALUE d_lite_hash(VALUE self) { - st_index_t v, h[4]; + st_index_t v, h[5]; + VALUE nth; get_d1(self); - h[0] = m_nth(dat); - h[1] = m_jd(dat); - h[2] = m_df(dat); - h[3] = m_sf(dat); + nth = m_nth(dat); + + if (FIXNUM_P(nth)) { + h[0] = 0; + h[1] = (st_index_t)nth; + } else { + h[0] = 1; + h[1] = (st_index_t)FIX2LONG(rb_hash(nth)); + } + + h[2] = m_jd(dat); + h[3] = m_df(dat); + h[4] = m_sf(dat); + v = rb_memhash(h, sizeof(h)); return ST2FIX(v); } @@ -7517,10 +7528,7 @@ d_lite_marshal_dump_old(VALUE self) m_of_in_day(dat), DBL2NUM(m_sg(dat))); - if (FL_TEST(self, FL_EXIVAR)) { - rb_copy_generic_ivar(a, self); - FL_SET(a, FL_EXIVAR); - } + rb_copy_generic_ivar(a, self); return a; } @@ -7542,10 +7550,8 @@ d_lite_marshal_dump(VALUE self) INT2FIX(m_of(dat)), DBL2NUM(m_sg(dat))); - if (FL_TEST(self, FL_EXIVAR)) { - rb_copy_generic_ivar(a, self); - FL_SET(a, FL_EXIVAR); - } + + rb_copy_generic_ivar(a, self); return a; } @@ -7618,10 +7624,7 @@ d_lite_marshal_load(VALUE self, VALUE a) HAVE_JD | HAVE_DF); } - if (FL_TEST(a, FL_EXIVAR)) { - rb_copy_generic_ivar(self, a); - FL_SET(self, FL_EXIVAR); - } + rb_copy_generic_ivar(self, a); return self; } diff --git a/ext/digest/defs.h b/ext/digest/defs.h index 77a134f364..9b11f4eca9 100644 --- a/ext/digest/defs.h +++ b/ext/digest/defs.h @@ -16,4 +16,26 @@ # define __END_DECLS #endif +#define RB_DIGEST_DIAGNOSTIC(compiler, op, flag) _Pragma(STRINGIZE(compiler diagnostic op flag)) +#ifdef RBIMPL_WARNING_IGNORED +# define RB_DIGEST_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag) +# define RB_DIGEST_WARNING_PUSH() RBIMPL_WARNING_PUSH() +# define RB_DIGEST_WARNING_POP() RBIMPL_WARNING_POP() +#elif defined(__clang__) +# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(clang, ignored, #flag) +# define RB_DIGEST_WARNING_PUSH() _Pragma("clang diagnostic push") +# define RB_DIGEST_WARNING_POP() _Pragma("clang diagnostic pop") +#else /* __GNUC__ */ +# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(GCC, ignored, #flag) +# define RB_DIGEST_WARNING_PUSH() _Pragma("GCC diagnostic push") +# define RB_DIGEST_WARNING_POP() _Pragma("GCC diagnostic pop") +#endif +#ifdef RBIMPL_HAS_WARNING +# define RB_DIGEST_HAS_WARNING(_) RBIMPL_HAS_WARNING(_) +#elif defined(__has_warning) +# define RB_DIGEST_HAS_WARNING(_) __has_warning(_) +#else +# define RB_DIGEST_HAS_WARNING(_) 0 +#endif + #endif /* DEFS_H */ diff --git a/ext/digest/digest_conf.rb b/ext/digest/digest_conf.rb index 36a7d75289..099d20fcbe 100644 --- a/ext/digest/digest_conf.rb +++ b/ext/digest/digest_conf.rb @@ -2,14 +2,16 @@ def digest_conf(name) unless with_config("bundled-#{name}") - cc = with_config("common-digest") - if cc != false or /\b#{name}\b/ =~ cc - if File.exist?("#$srcdir/#{name}cc.h") and - have_header("CommonCrypto/CommonDigest.h") - $defs << "-D#{name.upcase}_USE_COMMONDIGEST" - $headers << "#{name}cc.h" - return :commondigest - end + case cc = with_config("common-digest", true) + when true, false + else + cc = cc.split(/[\s,]++/).any? {|pat| File.fnmatch?(pat, name)} + end + if cc and File.exist?("#$srcdir/#{name}cc.h") and + have_header("CommonCrypto/CommonDigest.h") + $defs << "-D#{name.upcase}_USE_COMMONDIGEST" + $headers << "#{name}cc.h" + return :commondigest end end $objs << "#{name}.#{$OBJEXT}" diff --git a/ext/digest/md5/md5cc.h b/ext/digest/md5/md5cc.h index 657f573f85..a002c17604 100644 --- a/ext/digest/md5/md5cc.h +++ b/ext/digest/md5/md5cc.h @@ -2,14 +2,6 @@ #include <CommonCrypto/CommonDigest.h> #ifdef __GNUC__ -# define RB_DIGEST_DIAGNOSTIC(compiler, op, flag) _Pragma(STRINGIZE(compiler diagnostic op flag)) -# ifdef RBIMPL_WARNING_IGNORED -# define RB_DIGEST_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag) -# elif defined(__clang__) -# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(clang, ignored, #flag) -# else /* __GNUC__ */ -# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(GCC, ignored, #flag) -# endif RB_DIGEST_WARNING_IGNORED(-Wdeprecated-declarations) /* Suppress deprecation warnings of MD5 from Xcode 11.1 */ /* Although we know MD5 is deprecated too, provide just for backward diff --git a/ext/digest/md5/md5init.c b/ext/digest/md5/md5init.c index b81fd94864..c919060587 100644 --- a/ext/digest/md5/md5init.c +++ b/ext/digest/md5/md5init.c @@ -3,6 +3,7 @@ #include <ruby/ruby.h> #include "../digest.h" +#include "../defs.h" #if defined(MD5_USE_COMMONDIGEST) #include "md5cc.h" #else diff --git a/ext/digest/sha1/sha1.c b/ext/digest/sha1/sha1.c index 5311227549..ce200270b7 100644 --- a/ext/digest/sha1/sha1.c +++ b/ext/digest/sha1/sha1.c @@ -232,8 +232,14 @@ void SHA1_Update(SHA1_CTX *context, const uint8_t *data, size_t len) if ((j + len) > 63) { (void)memcpy(&context->buffer[j], data, (i = 64-j)); SHA1_Transform(context->state, context->buffer); - for ( ; i + 63 < len; i += 64) + for ( ; i + 63 < len; i += 64) { + RB_DIGEST_WARNING_PUSH(); +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ >= 11 + RB_DIGEST_WARNING_IGNORED(-Wstringop-overread); +#endif SHA1_Transform(context->state, &data[i]); + RB_DIGEST_WARNING_POP(); + } j = 0; } else { i = 0; diff --git a/ext/erb/escape/escape.c b/ext/erb/escape/escape.c index 67b2d1ef34..db2abd9773 100644 --- a/ext/erb/escape/escape.c +++ b/ext/erb/escape/escape.c @@ -65,9 +65,12 @@ optimized_escape_html(VALUE str) return escaped; } -// ERB::Util.html_escape is different from CGI.escapeHTML in the following two parts: -// * ERB::Util.html_escape converts an argument with #to_s first (only if it's not T_STRING) -// * ERB::Util.html_escape does not allocate a new string when nothing needs to be escaped +/* + * ERB::Util.html_escape is similar to CGI.escapeHTML but different in the following two parts: + * + * * ERB::Util.html_escape converts an argument with #to_s first (only if it's not T_STRING) + * * ERB::Util.html_escape does not allocate a new string when nothing needs to be escaped + */ static VALUE erb_escape_html(VALUE self, VALUE str) { diff --git a/ext/etc/extconf.rb b/ext/etc/extconf.rb index 3d7cceae40..497303a4fa 100644 --- a/ext/etc/extconf.rb +++ b/ext/etc/extconf.rb @@ -60,7 +60,7 @@ end # TODO: remove when dropping 2.7 support, as exported since 3.0 have_func('rb_deprecate_constant(Qnil, "None")') -have_func("rb_io_descriptor") +have_func("rb_io_descriptor", "ruby/io.h") $distcleanfiles << "constdefs.h" diff --git a/ext/io/console/extconf.rb b/ext/io/console/extconf.rb index 4ad7ed6996..dd3d221ae5 100644 --- a/ext/io/console/extconf.rb +++ b/ext/io/console/extconf.rb @@ -10,11 +10,11 @@ have_func("rb_syserr_new_str(0, Qnil)") or abort have_func("rb_interned_str_cstr") -have_func("rb_io_path") -have_func("rb_io_descriptor") -have_func("rb_io_get_write_io") -have_func("rb_io_closed_p") -have_func("rb_io_open_descriptor") +have_func("rb_io_path", "ruby/io.h") +have_func("rb_io_descriptor", "ruby/io.h") +have_func("rb_io_get_write_io", "ruby/io.h") +have_func("rb_io_closed_p", "ruby/io.h") +have_func("rb_io_open_descriptor", "ruby/io.h") have_func("rb_ractor_local_storage_value_newkey") is_wasi = /wasi/ =~ MakeMakefile::RbConfig::CONFIG["platform"] diff --git a/ext/io/nonblock/extconf.rb b/ext/io/nonblock/extconf.rb index a1e6075c9b..505c9e6252 100644 --- a/ext/io/nonblock/extconf.rb +++ b/ext/io/nonblock/extconf.rb @@ -7,7 +7,7 @@ unless RUBY_ENGINE == 'ruby' return end -have_func("rb_io_descriptor") +have_func("rb_io_descriptor", "ruby/io.h") hdr = %w"fcntl.h" if have_macro("O_NONBLOCK", hdr) and diff --git a/ext/io/wait/extconf.rb b/ext/io/wait/extconf.rb index e63c046187..ba223f0ac2 100644 --- a/ext/io/wait/extconf.rb +++ b/ext/io/wait/extconf.rb @@ -5,8 +5,8 @@ if RUBY_VERSION < "2.6" File.write("Makefile", dummy_makefile($srcdir).join("")) else target = "io/wait" - have_func("rb_io_wait") - have_func("rb_io_descriptor") + have_func("rb_io_wait", "ruby/io.h") + have_func("rb_io_descriptor", "ruby/io.h") unless macro_defined?("DOSISH", "#include <ruby.h>") have_header(ioctl_h = "sys/ioctl.h") or ioctl_h = nil fionread = %w[sys/ioctl.h sys/filio.h sys/socket.h].find do |h| diff --git a/ext/json/fbuffer/fbuffer.h b/ext/json/fbuffer/fbuffer.h index b8a4e983d6..d32371476c 100644 --- a/ext/json/fbuffer/fbuffer.h +++ b/ext/json/fbuffer/fbuffer.h @@ -36,6 +36,12 @@ typedef unsigned char _Bool; # define MAYBE_UNUSED(x) x #endif +#ifdef RUBY_DEBUG +#ifndef JSON_DEBUG +#define JSON_DEBUG RUBY_DEBUG +#endif +#endif + enum fbuffer_type { FBUFFER_HEAP_ALLOCATED = 0, FBUFFER_STACK_ALLOCATED = 1, @@ -46,6 +52,9 @@ typedef struct FBufferStruct { unsigned long initial_length; unsigned long len; unsigned long capa; +#ifdef JSON_DEBUG + unsigned long requested; +#endif char *ptr; VALUE io; } FBuffer; @@ -74,6 +83,20 @@ static void fbuffer_stack_init(FBuffer *fb, unsigned long initial_length, char * fb->ptr = stack_buffer; fb->capa = stack_buffer_size; } +#ifdef JSON_DEBUG + fb->requested = 0; +#endif +} + +static inline void fbuffer_consumed(FBuffer *fb, unsigned long consumed) +{ +#ifdef JSON_DEBUG + if (consumed > fb->requested) { + rb_bug("fbuffer: Out of bound write"); + } + fb->requested = 0; +#endif + fb->len += consumed; } static void fbuffer_free(FBuffer *fb) @@ -137,6 +160,10 @@ static void fbuffer_do_inc_capa(FBuffer *fb, unsigned long requested) static inline void fbuffer_inc_capa(FBuffer *fb, unsigned long requested) { +#ifdef JSON_DEBUG + fb->requested = requested; +#endif + if (RB_UNLIKELY(requested > fb->capa - fb->len)) { fbuffer_do_inc_capa(fb, requested); } @@ -147,15 +174,22 @@ static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len) if (len > 0) { fbuffer_inc_capa(fb, len); MEMCPY(fb->ptr + fb->len, newstr, char, len); - fb->len += len; + fbuffer_consumed(fb, len); } } /* Appends a character into a buffer. The buffer needs to have sufficient capacity, via fbuffer_inc_capa(...). */ static inline void fbuffer_append_reserved_char(FBuffer *fb, char chr) { +#ifdef JSON_DEBUG + if (fb->requested < 1) { + rb_bug("fbuffer: unreserved write"); + } + fb->requested--; +#endif + fb->ptr[fb->len] = chr; - fb->len += 1; + fb->len++; } static void fbuffer_append_str(FBuffer *fb, VALUE str) @@ -172,7 +206,7 @@ static inline void fbuffer_append_char(FBuffer *fb, char newchr) { fbuffer_inc_capa(fb, 1); *(fb->ptr + fb->len) = newchr; - fb->len++; + fbuffer_consumed(fb, 1); } static inline char *fbuffer_cursor(FBuffer *fb) @@ -182,7 +216,7 @@ static inline char *fbuffer_cursor(FBuffer *fb) static inline void fbuffer_advance_to(FBuffer *fb, char *end) { - fb->len = end - fb->ptr; + fbuffer_consumed(fb, (end - fb->ptr) - fb->len); } /* diff --git a/ext/json/generator/depend b/ext/json/generator/depend index fb3b038365..44e67aae7f 100644 --- a/ext/json/generator/depend +++ b/ext/json/generator/depend @@ -177,8 +177,8 @@ generator.o: $(hdrdir)/ruby/ruby.h generator.o: $(hdrdir)/ruby/st.h generator.o: $(hdrdir)/ruby/subst.h generator.o: $(srcdir)/../fbuffer/fbuffer.h +generator.o: $(srcdir)/../simd/simd.h generator.o: $(srcdir)/../vendor/fpconv.c generator.o: $(srcdir)/../vendor/jeaiii-ltoa.h generator.o: generator.c -generator.o: simd.h # AUTOGENERATED DEPENDENCIES END diff --git a/ext/json/generator/extconf.rb b/ext/json/generator/extconf.rb index e44890e2ed..fb9afd07f7 100644 --- a/ext/json/generator/extconf.rb +++ b/ext/json/generator/extconf.rb @@ -6,33 +6,10 @@ if RUBY_ENGINE == 'truffleruby' else append_cflags("-std=c99") $defs << "-DJSON_GENERATOR" + $defs << "-DJSON_DEBUG" if ENV["JSON_DEBUG"] if enable_config('generator-use-simd', default=!ENV["JSON_DISABLE_SIMD"]) - if RbConfig::CONFIG['host_cpu'] =~ /^(arm.*|aarch64.*)/ - # Try to compile a small program using NEON instructions - if have_header('arm_neon.h') - have_type('uint8x16_t', headers=['arm_neon.h']) && try_compile(<<~'SRC') - #include <arm_neon.h> - int main() { - uint8x16_t test = vdupq_n_u8(32); - return 0; - } - SRC - $defs.push("-DENABLE_SIMD") - end - end - - if have_header('x86intrin.h') && have_type('__m128i', headers=['x86intrin.h']) && try_compile(<<~'SRC') - #include <x86intrin.h> - int main() { - __m128i test = _mm_set1_epi8(32); - return 0; - } - SRC - $defs.push("-DENABLE_SIMD") - end - - have_header('cpuid.h') + load __dir__ + "/../simd/conf.rb" end create_makefile 'json/ext/generator' diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c index 536c2aa1b7..01e8badc97 100644 --- a/ext/json/generator/generator.c +++ b/ext/json/generator/generator.c @@ -5,7 +5,7 @@ #include <math.h> #include <ctype.h> -#include "simd.h" +#include "../simd/simd.h" /* ruby api and some helpers */ @@ -112,7 +112,7 @@ typedef struct _search_state { const char *cursor; FBuffer *buffer; -#ifdef ENABLE_SIMD +#ifdef HAVE_SIMD const char *chunk_base; const char *chunk_end; bool has_matches; @@ -124,7 +124,7 @@ typedef struct _search_state { #else #error "Unknown SIMD Implementation." #endif /* HAVE_SIMD_NEON */ -#endif /* ENABLE_SIMD */ +#endif /* HAVE_SIMD */ } search_state; #if (defined(__GNUC__ ) || defined(__clang__)) @@ -189,15 +189,11 @@ static inline FORCE_INLINE void escape_UTF8_char_basic(search_state *search) case '\r': fbuffer_append(search->buffer, "\\r", 2); break; case '\t': fbuffer_append(search->buffer, "\\t", 2); break; default: { - if (ch < ' ') { - const char *hexdig = "0123456789abcdef"; - char scratch[6] = { '\\', 'u', '0', '0', 0, 0 }; - scratch[4] = hexdig[(ch >> 4) & 0xf]; - scratch[5] = hexdig[ch & 0xf]; - fbuffer_append(search->buffer, scratch, 6); - } else { - fbuffer_append_char(search->buffer, ch); - } + const char *hexdig = "0123456789abcdef"; + char scratch[6] = { '\\', 'u', '0', '0', 0, 0 }; + scratch[4] = hexdig[(ch >> 4) & 0xf]; + scratch[5] = hexdig[ch & 0xf]; + fbuffer_append(search->buffer, scratch, 6); break; } } @@ -265,7 +261,7 @@ static inline void escape_UTF8_char(search_state *search, unsigned char ch_len) search->cursor = (search->ptr += ch_len); } -#ifdef ENABLE_SIMD +#ifdef HAVE_SIMD static inline FORCE_INLINE char *copy_remaining_bytes(search_state *search, unsigned long vec_len, unsigned long len) { @@ -308,28 +304,6 @@ static inline FORCE_INLINE unsigned char neon_next_match(search_state *search) return 1; } -// See: https://community.arm.com/arm-community-blogs/b/servers-and-cloud-computing-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon -static inline FORCE_INLINE uint64_t neon_match_mask(uint8x16_t matches) -{ - const uint8x8_t res = vshrn_n_u16(vreinterpretq_u16_u8(matches), 4); - const uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(res), 0); - return mask & 0x8888888888888888ull; -} - -static inline FORCE_INLINE uint64_t neon_rules_update(const char *ptr) -{ - uint8x16_t chunk = vld1q_u8((const unsigned char *)ptr); - - // Trick: c < 32 || c == 34 can be factored as c ^ 2 < 33 - // https://lemire.me/blog/2025/04/13/detect-control-characters-quotes-and-backslashes-efficiently-using-swar/ - const uint8x16_t too_low_or_dbl_quote = vcltq_u8(veorq_u8(chunk, vdupq_n_u8(2)), vdupq_n_u8(33)); - - uint8x16_t has_backslash = vceqq_u8(chunk, vdupq_n_u8('\\')); - uint8x16_t needs_escape = vorrq_u8(too_low_or_dbl_quote, has_backslash); - - return neon_match_mask(needs_escape); -} - static inline unsigned char search_escape_basic_neon(search_state *search) { if (RB_UNLIKELY(search->has_matches)) { @@ -337,7 +311,7 @@ static inline unsigned char search_escape_basic_neon(search_state *search) if (search->matches_mask > 0) { return neon_next_match(search); } else { - // neon_next_match will only advance search->ptr up to the last matching character. + // neon_next_match will only advance search->ptr up to the last matching character. // Skip over any characters in the last chunk that occur after the last match. search->has_matches = false; search->ptr = search->chunk_end; @@ -346,69 +320,63 @@ static inline unsigned char search_escape_basic_neon(search_state *search) /* * The code below implements an SIMD-based algorithm to determine if N bytes at a time - * need to be escaped. - * + * need to be escaped. + * * Assume the ptr = "Te\sting!" (the double quotes are included in the string) - * + * * The explanation will be limited to the first 8 bytes of the string for simplicity. However * the vector insructions may work on larger vectors. - * + * * First, we load three constants 'lower_bound', 'backslash' and 'dblquote" in vector registers. - * - * lower_bound: [20 20 20 20 20 20 20 20] - * backslash: [5C 5C 5C 5C 5C 5C 5C 5C] - * dblquote: [22 22 22 22 22 22 22 22] - * - * Next we load the first chunk of the ptr: + * + * lower_bound: [20 20 20 20 20 20 20 20] + * backslash: [5C 5C 5C 5C 5C 5C 5C 5C] + * dblquote: [22 22 22 22 22 22 22 22] + * + * Next we load the first chunk of the ptr: * [22 54 65 5C 73 74 69 6E] (" T e \ s t i n) - * + * * First we check if any byte in chunk is less than 32 (0x20). This returns the following vector * as no bytes are less than 32 (0x20): * [0 0 0 0 0 0 0 0] - * + * * Next, we check if any byte in chunk is equal to a backslash: * [0 0 0 FF 0 0 0 0] - * + * * Finally we check if any byte in chunk is equal to a double quote: - * [FF 0 0 0 0 0 0 0] - * + * [FF 0 0 0 0 0 0 0] + * * Now we have three vectors where each byte indicates if the corresponding byte in chunk * needs to be escaped. We combine these vectors with a series of logical OR instructions. * This is the needs_escape vector and it is equal to: - * [FF 0 0 FF 0 0 0 0] - * + * [FF 0 0 FF 0 0 0 0] + * * Next we compute the bitwise AND between each byte and 0x1 and compute the horizontal sum of * the values in the vector. This computes how many bytes need to be escaped within this chunk. - * + * * Finally we compute a mask that indicates which bytes need to be escaped. If the mask is 0 then, * no bytes need to be escaped and we can continue to the next chunk. If the mask is not 0 then we * have at least one byte that needs to be escaped. */ - while (search->ptr + sizeof(uint8x16_t) <= search->end) { - uint64_t mask = neon_rules_update(search->ptr); - if (!mask) { - search->ptr += sizeof(uint8x16_t); - continue; - } - search->matches_mask = mask; + if (string_scan_simd_neon(&search->ptr, search->end, &search->matches_mask)) { search->has_matches = true; search->chunk_base = search->ptr; search->chunk_end = search->ptr + sizeof(uint8x16_t); return neon_next_match(search); } - // There are fewer than 16 bytes left. + // There are fewer than 16 bytes left. unsigned long remaining = (search->end - search->ptr); if (remaining >= SIMD_MINIMUM_THRESHOLD) { char *s = copy_remaining_bytes(search, sizeof(uint8x16_t), remaining); - uint64_t mask = neon_rules_update(s); + uint64_t mask = compute_chunk_mask_neon(s); if (!mask) { - // Nothing to escape, ensure search_flush doesn't do anything by setting + // Nothing to escape, ensure search_flush doesn't do anything by setting // search->cursor to search->ptr. - search->buffer->len += remaining; + fbuffer_consumed(search->buffer, remaining); search->ptr = search->end; search->cursor = search->end; return 0; @@ -432,11 +400,6 @@ static inline unsigned char search_escape_basic_neon(search_state *search) #ifdef HAVE_SIMD_SSE2 -#define _mm_cmpge_epu8(a, b) _mm_cmpeq_epi8(_mm_max_epu8(a, b), a) -#define _mm_cmple_epu8(a, b) _mm_cmpge_epu8(b, a) -#define _mm_cmpgt_epu8(a, b) _mm_xor_si128(_mm_cmple_epu8(a, b), _mm_set1_epi8(-1)) -#define _mm_cmplt_epu8(a, b) _mm_cmpgt_epu8(b, a) - static inline FORCE_INLINE unsigned char sse2_next_match(search_state *search) { int mask = search->matches_mask; @@ -461,18 +424,6 @@ static inline FORCE_INLINE unsigned char sse2_next_match(search_state *search) #define TARGET_SSE2 #endif -static inline TARGET_SSE2 FORCE_INLINE int sse2_update(const char *ptr) -{ - __m128i chunk = _mm_loadu_si128((__m128i const*)ptr); - - // Trick: c < 32 || c == 34 can be factored as c ^ 2 < 33 - // https://lemire.me/blog/2025/04/13/detect-control-characters-quotes-and-backslashes-efficiently-using-swar/ - __m128i too_low_or_dbl_quote = _mm_cmplt_epu8(_mm_xor_si128(chunk, _mm_set1_epi8(2)), _mm_set1_epi8(33)); - __m128i has_backslash = _mm_cmpeq_epi8(chunk, _mm_set1_epi8('\\')); - __m128i needs_escape = _mm_or_si128(too_low_or_dbl_quote, has_backslash); - return _mm_movemask_epi8(needs_escape); -} - static inline TARGET_SSE2 FORCE_INLINE unsigned char search_escape_basic_sse2(search_state *search) { if (RB_UNLIKELY(search->has_matches)) { @@ -480,7 +431,7 @@ static inline TARGET_SSE2 FORCE_INLINE unsigned char search_escape_basic_sse2(se if (search->matches_mask > 0) { return sse2_next_match(search); } else { - // sse2_next_match will only advance search->ptr up to the last matching character. + // sse2_next_match will only advance search->ptr up to the last matching character. // Skip over any characters in the last chunk that occur after the last match. search->has_matches = false; if (RB_UNLIKELY(search->chunk_base + sizeof(__m128i) >= search->end)) { @@ -491,31 +442,24 @@ static inline TARGET_SSE2 FORCE_INLINE unsigned char search_escape_basic_sse2(se } } - while (search->ptr + sizeof(__m128i) <= search->end) { - int needs_escape_mask = sse2_update(search->ptr); - - if (needs_escape_mask == 0) { - search->ptr += sizeof(__m128i); - continue; - } - + if (string_scan_simd_sse2(&search->ptr, search->end, &search->matches_mask)) { search->has_matches = true; - search->matches_mask = needs_escape_mask; search->chunk_base = search->ptr; + search->chunk_end = search->ptr + sizeof(__m128i); return sse2_next_match(search); } - // There are fewer than 16 bytes left. + // There are fewer than 16 bytes left. unsigned long remaining = (search->end - search->ptr); if (remaining >= SIMD_MINIMUM_THRESHOLD) { char *s = copy_remaining_bytes(search, sizeof(__m128i), remaining); - int needs_escape_mask = sse2_update(s); + int needs_escape_mask = compute_chunk_mask_sse2(s); if (needs_escape_mask == 0) { - // Nothing to escape, ensure search_flush doesn't do anything by setting + // Nothing to escape, ensure search_flush doesn't do anything by setting // search->cursor to search->ptr. - search->buffer->len += remaining; + fbuffer_consumed(search->buffer, remaining); search->ptr = search->end; search->cursor = search->end; return 0; @@ -537,7 +481,7 @@ static inline TARGET_SSE2 FORCE_INLINE unsigned char search_escape_basic_sse2(se #endif /* HAVE_SIMD_SSE2 */ -#endif /* ENABLE_SIMD */ +#endif /* HAVE_SIMD */ static const unsigned char script_safe_escape_table[256] = { // ASCII Control Characters @@ -1302,11 +1246,11 @@ static void generate_json_string(FBuffer *buffer, struct generate_json_data *dat search.cursor = search.ptr; search.end = search.ptr + len; -#ifdef ENABLE_SIMD +#ifdef HAVE_SIMD search.matches_mask = 0; search.has_matches = false; search.chunk_base = NULL; -#endif /* ENABLE_SIMD */ +#endif /* HAVE_SIMD */ switch(rb_enc_str_coderange(obj)) { case ENC_CODERANGE_7BIT: @@ -1410,17 +1354,16 @@ static void generate_json_float(FBuffer *buffer, struct generate_json_data *data } /* This implementation writes directly into the buffer. We reserve - * the 24 characters that fpconv_dtoa states as its maximum, plus - * 2 more characters for the potential ".0" suffix. + * the 28 characters that fpconv_dtoa states as its maximum. */ - fbuffer_inc_capa(buffer, 26); + fbuffer_inc_capa(buffer, 28); char* d = buffer->ptr + buffer->len; int len = fpconv_dtoa(value, d); /* fpconv_dtoa converts a float to its shortest string representation, * but it adds a ".0" if this is a plain integer. */ - buffer->len += len; + fbuffer_consumed(buffer, len); } static void generate_json_fragment(FBuffer *buffer, struct generate_json_data *data, VALUE obj) @@ -2174,7 +2117,7 @@ void Init_generator(void) switch(find_simd_implementation()) { -#ifdef ENABLE_SIMD +#ifdef HAVE_SIMD #ifdef HAVE_SIMD_NEON case SIMD_NEON: search_escape_basic_impl = search_escape_basic_neon; @@ -2185,7 +2128,7 @@ void Init_generator(void) search_escape_basic_impl = search_escape_basic_sse2; break; #endif /* HAVE_SIMD_SSE2 */ -#endif /* ENABLE_SIMD */ +#endif /* HAVE_SIMD */ default: search_escape_basic_impl = search_escape_basic; break; diff --git a/ext/json/generator/simd.h b/ext/json/generator/simd.h deleted file mode 100644 index 2fbc93169d..0000000000 --- a/ext/json/generator/simd.h +++ /dev/null @@ -1,110 +0,0 @@ -typedef enum { - SIMD_NONE, - SIMD_NEON, - SIMD_SSE2 -} SIMD_Implementation; - -#ifdef ENABLE_SIMD - -#ifdef __clang__ - #if __has_builtin(__builtin_ctzll) - #define HAVE_BUILTIN_CTZLL 1 - #else - #define HAVE_BUILTIN_CTZLL 0 - #endif -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define HAVE_BUILTIN_CTZLL 1 -#else - #define HAVE_BUILTIN_CTZLL 0 -#endif - -static inline uint32_t trailing_zeros64(uint64_t input) { -#if HAVE_BUILTIN_CTZLL - return __builtin_ctzll(input); -#else - uint32_t trailing_zeros = 0; - uint64_t temp = input; - while ((temp & 1) == 0 && temp > 0) { - trailing_zeros++; - temp >>= 1; - } - return trailing_zeros; -#endif -} - -static inline int trailing_zeros(int input) { - #if HAVE_BUILTIN_CTZLL - return __builtin_ctz(input); - #else - int trailing_zeros = 0; - int temp = input; - while ((temp & 1) == 0 && temp > 0) { - trailing_zeros++; - temp >>= 1; - } - return trailing_zeros; - #endif -} - -#define SIMD_MINIMUM_THRESHOLD 6 - -#if defined(__ARM_NEON) || defined(__ARM_NEON__) || defined(__aarch64__) || defined(_M_ARM64) -#include <arm_neon.h> - -#define FIND_SIMD_IMPLEMENTATION_DEFINED 1 -static SIMD_Implementation find_simd_implementation(void) { - return SIMD_NEON; -} - -#define HAVE_SIMD_NEON 1 - -uint8x16x4_t load_uint8x16_4(const unsigned char *table) { - uint8x16x4_t tab; - tab.val[0] = vld1q_u8(table); - tab.val[1] = vld1q_u8(table+16); - tab.val[2] = vld1q_u8(table+32); - tab.val[3] = vld1q_u8(table+48); - return tab; -} - -#endif /* ARM Neon Support.*/ - -#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) - -#ifdef HAVE_X86INTRIN_H -#include <x86intrin.h> - -#define HAVE_SIMD_SSE2 1 - -#ifdef HAVE_CPUID_H -#define FIND_SIMD_IMPLEMENTATION_DEFINED 1 - -#include <cpuid.h> -#endif /* HAVE_CPUID_H */ - -static SIMD_Implementation find_simd_implementation(void) { - -#if defined(__GNUC__ ) || defined(__clang__) -#ifdef __GNUC__ - __builtin_cpu_init(); -#endif /* __GNUC__ */ - - // TODO Revisit. I think the SSE version now only uses SSE2 instructions. - if (__builtin_cpu_supports("sse2")) { - return SIMD_SSE2; - } -#endif /* __GNUC__ || __clang__*/ - - return SIMD_NONE; -} - -#endif /* HAVE_X86INTRIN_H */ -#endif /* X86_64 Support */ - -#endif /* ENABLE_SIMD */ - -#ifndef FIND_SIMD_IMPLEMENTATION_DEFINED -static SIMD_Implementation find_simd_implementation(void) { - return SIMD_NONE; -} -#endif diff --git a/ext/json/json.gemspec b/ext/json/json.gemspec index 943c78aab9..5575731025 100644 --- a/ext/json/json.gemspec +++ b/ext/json/json.gemspec @@ -44,15 +44,14 @@ spec = Gem::Specification.new do |s| "LEGAL", "README.md", "json.gemspec", - *Dir["lib/**/*.rb"], - ] + ] + Dir.glob("lib/**/*.rb", base: File.expand_path("..", __FILE__)) if java_ext s.platform = 'java' s.files += Dir["lib/json/ext/**/*.jar"] else s.extensions = Dir["ext/json/**/extconf.rb"] - s.files += Dir["ext/json/**/*.{c,h}"] + s.files += Dir["ext/json/**/*.{c,h,rb}"] end end diff --git a/ext/json/lib/json.rb b/ext/json/lib/json.rb index dfd9b7dfc2..735f238066 100644 --- a/ext/json/lib/json.rb +++ b/ext/json/lib/json.rb @@ -127,6 +127,24 @@ require 'json/common' # # --- # +# Option +allow_duplicate_key+ specifies whether duplicate keys in objects +# should be ignored or cause an error to be raised: +# +# When not specified: +# # The last value is used and a deprecation warning emitted. +# JSON.parse('{"a": 1, "a":2}') => {"a" => 2} +# # waring: detected duplicate keys in JSON object. +# # This will raise an error in json 3.0 unless enabled via `allow_duplicate_key: true` +# +# When set to `+true+` +# # The last value is used. +# JSON.parse('{"a": 1, "a":2}') => {"a" => 2} +# +# When set to `+false+`, the future default: +# JSON.parse('{"a": 1, "a":2}') => duplicate key at line 1 column 1 (JSON::ParserError) +# +# --- +# # Option +allow_nan+ (boolean) specifies whether to allow # NaN, Infinity, and MinusInfinity in +source+; # defaults to +false+. @@ -143,8 +161,23 @@ require 'json/common' # ruby = JSON.parse(source, {allow_nan: true}) # ruby # => [NaN, Infinity, -Infinity] # +# --- +# +# Option +allow_trailing_comma+ (boolean) specifies whether to allow +# trailing commas in objects and arrays; +# defaults to +false+. +# +# With the default, +false+: +# JSON.parse('[1,]') # unexpected character: ']' at line 1 column 4 (JSON::ParserError) +# +# When enabled: +# JSON.parse('[1,]', allow_trailing_comma: true) # => [1] +# # ====== Output Options # +# Option +freeze+ (boolean) specifies whether the returned objects will be frozen; +# defaults to +false+. +# # Option +symbolize_names+ (boolean) specifies whether returned \Hash keys # should be Symbols; # defaults to +false+ (use Strings). diff --git a/ext/json/lib/json/common.rb b/ext/json/lib/json/common.rb index 98bc0ac85a..486ec62a58 100644 --- a/ext/json/lib/json/common.rb +++ b/ext/json/lib/json/common.rb @@ -172,7 +172,7 @@ module JSON end end self.state = generator::State - const_set :State, self.state + const_set :State, state ensure $VERBOSE = old end @@ -230,7 +230,9 @@ module JSON class JSONError < StandardError; end # This exception is raised if a parser error occurs. - class ParserError < JSONError; end + class ParserError < JSONError + attr_reader :line, :column + end # This exception is raised if the nesting of parsed data structures is too # deep. @@ -266,7 +268,7 @@ module JSON # to string interpolation. # # Note: no validation is performed on the provided string. It is the - # responsability of the caller to ensure the string contains valid JSON. + # responsibility of the caller to ensure the string contains valid JSON. Fragment = Struct.new(:json) do def initialize(json) unless string = String.try_convert(json) @@ -488,7 +490,7 @@ module JSON # } # def pretty_generate(obj, opts = nil) - return state.generate(obj) if State === opts + return opts.generate(obj) if State === opts options = PRETTY_GENERATE_OPTIONS @@ -1070,7 +1072,7 @@ module ::Kernel end objs.each do |obj| - puts JSON::generate(obj, :allow_nan => true, :max_nesting => false) + puts JSON.generate(obj, :allow_nan => true, :max_nesting => false) end nil end @@ -1085,7 +1087,7 @@ module ::Kernel end objs.each do |obj| - puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false) + puts JSON.pretty_generate(obj, :allow_nan => true, :max_nesting => false) end nil end diff --git a/ext/json/lib/json/ext.rb b/ext/json/lib/json/ext.rb index 1db5ea122c..5bacc5e371 100644 --- a/ext/json/lib/json/ext.rb +++ b/ext/json/lib/json/ext.rb @@ -34,12 +34,12 @@ module JSON if RUBY_ENGINE == 'truffleruby' require 'json/truffle_ruby/generator' - JSON.generator = ::JSON::TruffleRuby::Generator + JSON.generator = JSON::TruffleRuby::Generator else require 'json/ext/generator' JSON.generator = Generator end end - JSON_LOADED = true unless defined?(::JSON::JSON_LOADED) + JSON_LOADED = true unless defined?(JSON::JSON_LOADED) end diff --git a/ext/json/lib/json/version.rb b/ext/json/lib/json/version.rb index c8744c9732..15ebd12f51 100644 --- a/ext/json/lib/json/version.rb +++ b/ext/json/lib/json/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module JSON - VERSION = '2.11.3' + VERSION = '2.12.2' end diff --git a/ext/json/parser/depend b/ext/json/parser/depend index 0c1becfb60..56aba78028 100644 --- a/ext/json/parser/depend +++ b/ext/json/parser/depend @@ -174,5 +174,6 @@ parser.o: $(hdrdir)/ruby/ruby.h parser.o: $(hdrdir)/ruby/st.h parser.o: $(hdrdir)/ruby/subst.h parser.o: $(srcdir)/../fbuffer/fbuffer.h +parser.o: $(srcdir)/../simd/simd.h parser.o: parser.c # AUTOGENERATED DEPENDENCIES END diff --git a/ext/json/parser/extconf.rb b/ext/json/parser/extconf.rb index 09c9637788..de5d5758b4 100644 --- a/ext/json/parser/extconf.rb +++ b/ext/json/parser/extconf.rb @@ -1,11 +1,15 @@ # frozen_string_literal: true require 'mkmf' -have_func("rb_enc_interned_str", "ruby.h") # RUBY_VERSION >= 3.0 +have_func("rb_enc_interned_str", "ruby/encoding.h") # RUBY_VERSION >= 3.0 have_func("rb_hash_new_capa", "ruby.h") # RUBY_VERSION >= 3.2 have_func("rb_hash_bulk_insert", "ruby.h") # Missing on TruffleRuby have_func("strnlen", "string.h") # Missing on Solaris 10 append_cflags("-std=c99") +if enable_config('parser-use-simd', default=!ENV["JSON_DISABLE_SIMD"]) + load __dir__ + "/../simd/conf.rb" +end + create_makefile 'json/ext/parser' diff --git a/ext/json/parser/parser.c b/ext/json/parser/parser.c index f20769a365..9bf247039e 100644 --- a/ext/json/parser/parser.c +++ b/ext/json/parser/parser.c @@ -20,6 +20,8 @@ typedef unsigned char _Bool; #endif #endif +#include "../simd/simd.h" + #ifndef RB_UNLIKELY #define RB_UNLIKELY(expr) expr #endif @@ -35,7 +37,7 @@ static ID i_chr, i_aset, i_aref, i_leftshift, i_new, i_try_convert, i_uminus, i_encode; static VALUE sym_max_nesting, sym_allow_nan, sym_allow_trailing_comma, sym_symbolize_names, sym_freeze, - sym_decimal_class, sym_on_load; + sym_decimal_class, sym_on_load, sym_allow_duplicate_key; static int binary_encindex; static int utf8_encindex; @@ -337,73 +339,6 @@ static size_t strnlen(const char *s, size_t maxlen) } #endif -#define PARSE_ERROR_FRAGMENT_LEN 32 -#ifdef RBIMPL_ATTR_NORETURN -RBIMPL_ATTR_NORETURN() -#endif -static void raise_parse_error(const char *format, const char *start) -{ - unsigned char buffer[PARSE_ERROR_FRAGMENT_LEN + 1]; - - size_t len = start ? strnlen(start, PARSE_ERROR_FRAGMENT_LEN) : 0; - const char *ptr = start; - - if (len == PARSE_ERROR_FRAGMENT_LEN) { - MEMCPY(buffer, start, char, PARSE_ERROR_FRAGMENT_LEN); - - while (buffer[len - 1] >= 0x80 && buffer[len - 1] < 0xC0) { // Is continuation byte - len--; - } - - if (buffer[len - 1] >= 0xC0) { // multibyte character start - len--; - } - - buffer[len] = '\0'; - ptr = (const char *)buffer; - } - - rb_enc_raise(enc_utf8, rb_path2class("JSON::ParserError"), format, ptr); -} - -/* unicode */ - -static const signed char digit_values[256] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, - -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1 -}; - -static uint32_t unescape_unicode(const unsigned char *p) -{ - signed char b; - uint32_t result = 0; - b = digit_values[p[0]]; - if (b < 0) raise_parse_error("incomplete unicode character escape sequence at '%s'", (char *)p - 2); - result = (result << 4) | (unsigned char)b; - b = digit_values[p[1]]; - if (b < 0) raise_parse_error("incomplete unicode character escape sequence at '%s'", (char *)p - 2); - result = (result << 4) | (unsigned char)b; - b = digit_values[p[2]]; - if (b < 0) raise_parse_error("incomplete unicode character escape sequence at '%s'", (char *)p - 2); - result = (result << 4) | (unsigned char)b; - b = digit_values[p[3]]; - if (b < 0) raise_parse_error("incomplete unicode character escape sequence at '%s'", (char *)p - 2); - result = (result << 4) | (unsigned char)b; - return result; -} - static int convert_UTF32_to_UTF8(char *buf, uint32_t ch) { int len = 1; @@ -430,10 +365,17 @@ static int convert_UTF32_to_UTF8(char *buf, uint32_t ch) return len; } +enum duplicate_key_action { + JSON_DEPRECATED = 0, + JSON_IGNORE, + JSON_RAISE, +}; + typedef struct JSON_ParserStruct { VALUE on_load_proc; VALUE decimal_class; ID decimal_method_id; + enum duplicate_key_action on_duplicate_key; int max_nesting; bool allow_nan; bool allow_trailing_comma; @@ -444,6 +386,7 @@ typedef struct JSON_ParserStruct { typedef struct JSON_ParserStateStruct { VALUE stack_handle; + const char *start; const char *cursor; const char *end; rvalue_stack *stack; @@ -452,6 +395,133 @@ typedef struct JSON_ParserStateStruct { int current_nesting; } JSON_ParserState; +static void cursor_position(JSON_ParserState *state, long *line_out, long *column_out) +{ + const char *cursor = state->cursor; + long column = 0; + long line = 1; + + while (cursor >= state->start) { + if (*cursor-- == '\n') { + break; + } + column++; + } + + while (cursor >= state->start) { + if (*cursor-- == '\n') { + line++; + } + } + *line_out = line; + *column_out = column; +} + +static void emit_parse_warning(const char *message, JSON_ParserState *state) +{ + long line, column; + cursor_position(state, &line, &column); + + rb_warn("%s at line %ld column %ld", message, line, column); +} + +#define PARSE_ERROR_FRAGMENT_LEN 32 +#ifdef RBIMPL_ATTR_NORETURN +RBIMPL_ATTR_NORETURN() +#endif +static void raise_parse_error(const char *format, JSON_ParserState *state) +{ + unsigned char buffer[PARSE_ERROR_FRAGMENT_LEN + 3]; + long line, column; + cursor_position(state, &line, &column); + + const char *ptr = "EOF"; + if (state->cursor && state->cursor < state->end) { + ptr = state->cursor; + size_t len = 0; + while (len < PARSE_ERROR_FRAGMENT_LEN) { + char ch = ptr[len]; + if (!ch || ch == '\n' || ch == ' ' || ch == '\t' || ch == '\r') { + break; + } + len++; + } + + if (len) { + buffer[0] = '\''; + MEMCPY(buffer + 1, ptr, char, len); + + while (buffer[len] >= 0x80 && buffer[len] < 0xC0) { // Is continuation byte + len--; + } + + if (buffer[len] >= 0xC0) { // multibyte character start + len--; + } + + buffer[len + 1] = '\''; + buffer[len + 2] = '\0'; + ptr = (const char *)buffer; + } + } + + VALUE msg = rb_sprintf(format, ptr); + VALUE message = rb_enc_sprintf(enc_utf8, "%s at line %ld column %ld", RSTRING_PTR(msg), line, column); + RB_GC_GUARD(msg); + + VALUE exc = rb_exc_new_str(rb_path2class("JSON::ParserError"), message); + rb_ivar_set(exc, rb_intern("@line"), LONG2NUM(line)); + rb_ivar_set(exc, rb_intern("@column"), LONG2NUM(column)); + rb_exc_raise(exc); +} + +#ifdef RBIMPL_ATTR_NORETURN +RBIMPL_ATTR_NORETURN() +#endif +static void raise_parse_error_at(const char *format, JSON_ParserState *state, const char *at) +{ + state->cursor = at; + raise_parse_error(format, state); +} + +/* unicode */ + +static const signed char digit_values[256] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, + -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1 +}; + +static uint32_t unescape_unicode(JSON_ParserState *state, const unsigned char *p) +{ + signed char b; + uint32_t result = 0; + b = digit_values[p[0]]; + if (b < 0) raise_parse_error_at("incomplete unicode character escape sequence at %s", state, (char *)p - 2); + result = (result << 4) | (unsigned char)b; + b = digit_values[p[1]]; + if (b < 0) raise_parse_error_at("incomplete unicode character escape sequence at %s", state, (char *)p - 2); + result = (result << 4) | (unsigned char)b; + b = digit_values[p[2]]; + if (b < 0) raise_parse_error_at("incomplete unicode character escape sequence at %s", state, (char *)p - 2); + result = (result << 4) | (unsigned char)b; + b = digit_values[p[3]]; + if (b < 0) raise_parse_error_at("incomplete unicode character escape sequence at %s", state, (char *)p - 2); + result = (result << 4) | (unsigned char)b; + return result; +} + #define GET_PARSER_CONFIG \ JSON_ParserConfig *config; \ TypedData_Get_Struct(self, JSON_ParserConfig, &JSON_ParserConfig_type, config) @@ -485,8 +555,7 @@ json_eat_comments(JSON_ParserState *state) while (true) { state->cursor = memchr(state->cursor, '*', state->end - state->cursor); if (!state->cursor) { - state->cursor = state->end; - raise_parse_error("unexpected end of input, expected closing '*/'", state->cursor); + raise_parse_error_at("unexpected end of input, expected closing '*/'", state, state->end); } else { state->cursor++; if (state->cursor < state->end && *state->cursor == '/') { @@ -498,11 +567,11 @@ json_eat_comments(JSON_ParserState *state) break; } default: - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); break; } } else { - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); } } @@ -621,9 +690,9 @@ static VALUE json_string_unescape(JSON_ParserState *state, const char *string, c break; case 'u': if (pe > stringEnd - 5) { - raise_parse_error("incomplete unicode character escape sequence at '%s'", p); + raise_parse_error_at("incomplete unicode character escape sequence at %s", state, p); } else { - uint32_t ch = unescape_unicode((unsigned char *) ++pe); + uint32_t ch = unescape_unicode(state, (unsigned char *) ++pe); pe += 3; /* To handle values above U+FFFF, we take a sequence of * \uXXXX escapes in the U+D800..U+DBFF then @@ -638,10 +707,10 @@ static VALUE json_string_unescape(JSON_ParserState *state, const char *string, c if ((ch & 0xFC00) == 0xD800) { pe++; if (pe > stringEnd - 6) { - raise_parse_error("incomplete surrogate pair at '%s'", p); + raise_parse_error_at("incomplete surrogate pair at %s", state, p); } if (pe[0] == '\\' && pe[1] == 'u') { - uint32_t sur = unescape_unicode((unsigned char *) pe + 2); + uint32_t sur = unescape_unicode(state, (unsigned char *) pe + 2); ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) | (sur & 0x3FF)); pe += 5; @@ -761,11 +830,25 @@ static inline VALUE json_decode_array(JSON_ParserState *state, JSON_ParserConfig return array; } -static inline VALUE json_decode_object(JSON_ParserState *state, JSON_ParserConfig *config, long count) +static inline VALUE json_decode_object(JSON_ParserState *state, JSON_ParserConfig *config, size_t count) { - VALUE object = rb_hash_new_capa(count); + size_t entries_count = count / 2; + VALUE object = rb_hash_new_capa(entries_count); rb_hash_bulk_insert(count, rvalue_stack_peek(state->stack, count), object); + if (RB_UNLIKELY(RHASH_SIZE(object) < entries_count)) { + switch (config->on_duplicate_key) { + case JSON_IGNORE: + break; + case JSON_DEPRECATED: + emit_parse_warning("detected duplicate keys in JSON object. This will raise an error in json 3.0 unless enabled via `allow_duplicate_key: true`", state); + break; + case JSON_RAISE: + raise_parse_error("duplicate key", state); + break; + } + } + rvalue_stack_pop(state->stack, count); if (config->freeze) { @@ -798,7 +881,7 @@ static inline VALUE json_push_value(JSON_ParserState *state, JSON_ParserConfig * return value; } -static const bool string_scan[256] = { +static const bool string_scan_table[256] = { // ASCII Control Characters 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -811,38 +894,77 @@ static const bool string_scan[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; +#if (defined(__GNUC__ ) || defined(__clang__)) +#define FORCE_INLINE __attribute__((always_inline)) +#else +#define FORCE_INLINE +#endif + +#ifdef HAVE_SIMD +static SIMD_Implementation simd_impl = SIMD_NONE; +#endif /* HAVE_SIMD */ + +static inline bool FORCE_INLINE string_scan(JSON_ParserState *state) +{ +#ifdef HAVE_SIMD +#if defined(HAVE_SIMD_NEON) + + uint64_t mask = 0; + if (string_scan_simd_neon(&state->cursor, state->end, &mask)) { + state->cursor += trailing_zeros64(mask) >> 2; + return 1; + } + +#elif defined(HAVE_SIMD_SSE2) + if (simd_impl == SIMD_SSE2) { + int mask = 0; + if (string_scan_simd_sse2(&state->cursor, state->end, &mask)) { + state->cursor += trailing_zeros(mask); + return 1; + } + } +#endif /* HAVE_SIMD_NEON or HAVE_SIMD_SSE2 */ +#endif /* HAVE_SIMD */ + + while (state->cursor < state->end) { + if (RB_UNLIKELY(string_scan_table[(unsigned char)*state->cursor])) { + return 1; + } + *state->cursor++; + } + return 0; +} + static inline VALUE json_parse_string(JSON_ParserState *state, JSON_ParserConfig *config, bool is_name) { state->cursor++; const char *start = state->cursor; bool escaped = false; - while (state->cursor < state->end) { - if (RB_UNLIKELY(string_scan[(unsigned char)*state->cursor])) { - switch (*state->cursor) { - case '"': { - VALUE string = json_decode_string(state, config, start, state->cursor, escaped, is_name); - state->cursor++; - return json_push_value(state, config, string); - } - case '\\': { - state->cursor++; - escaped = true; - if ((unsigned char)*state->cursor < 0x20) { - raise_parse_error("invalid ASCII control character in string: %s", state->cursor); - } - break; + while (RB_UNLIKELY(string_scan(state))) { + switch (*state->cursor) { + case '"': { + VALUE string = json_decode_string(state, config, start, state->cursor, escaped, is_name); + state->cursor++; + return json_push_value(state, config, string); + } + case '\\': { + state->cursor++; + escaped = true; + if ((unsigned char)*state->cursor < 0x20) { + raise_parse_error("invalid ASCII control character in string: %s", state); } - default: - raise_parse_error("invalid ASCII control character in string: %s", state->cursor); - break; + break; } + default: + raise_parse_error("invalid ASCII control character in string: %s", state); + break; } state->cursor++; } - raise_parse_error("unexpected end of input, expected closing \"", state->cursor); + raise_parse_error("unexpected end of input, expected closing \"", state); return Qfalse; } @@ -850,7 +972,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) { json_eat_whitespace(state); if (state->cursor >= state->end) { - raise_parse_error("unexpected end of input", state->cursor); + raise_parse_error("unexpected end of input", state); } switch (*state->cursor) { @@ -860,7 +982,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) return json_push_value(state, config, Qnil); } - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); break; case 't': if ((state->end - state->cursor >= 4) && (memcmp(state->cursor, "true", 4) == 0)) { @@ -868,7 +990,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) return json_push_value(state, config, Qtrue); } - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); break; case 'f': // Note: memcmp with a small power of two compile to an integer comparison @@ -877,7 +999,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) return json_push_value(state, config, Qfalse); } - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); break; case 'N': // Note: memcmp with a small power of two compile to an integer comparison @@ -886,7 +1008,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) return json_push_value(state, config, CNaN); } - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); break; case 'I': if (config->allow_nan && (state->end - state->cursor >= 8) && (memcmp(state->cursor, "Infinity", 8) == 0)) { @@ -894,7 +1016,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) return json_push_value(state, config, CInfinity); } - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); break; case '-': // Note: memcmp with a small power of two compile to an integer comparison @@ -903,7 +1025,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) state->cursor += 9; return json_push_value(state, config, CMinusInfinity); } else { - raise_parse_error("unexpected token at '%s'", state->cursor); + raise_parse_error("unexpected token %s", state); } } // Fallthrough @@ -921,11 +1043,11 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) long integer_length = state->cursor - start; if (RB_UNLIKELY(start[0] == '0' && integer_length > 1)) { - raise_parse_error("invalid number: %s", start); + raise_parse_error_at("invalid number: %s", state, start); } else if (RB_UNLIKELY(integer_length > 2 && start[0] == '-' && start[1] == '0')) { - raise_parse_error("invalid number: %s", start); + raise_parse_error_at("invalid number: %s", state, start); } else if (RB_UNLIKELY(integer_length == 1 && start[0] == '-')) { - raise_parse_error("invalid number: %s", start); + raise_parse_error_at("invalid number: %s", state, start); } if ((state->cursor < state->end) && (*state->cursor == '.')) { @@ -933,7 +1055,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) state->cursor++; if (state->cursor == state->end || *state->cursor < '0' || *state->cursor > '9') { - raise_parse_error("invalid number: %s", state->cursor); + raise_parse_error("invalid number: %s", state); } while ((state->cursor < state->end) && (*state->cursor >= '0') && (*state->cursor <= '9')) { @@ -949,7 +1071,7 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) } if (state->cursor == state->end || *state->cursor < '0' || *state->cursor > '9') { - raise_parse_error("invalid number: %s", state->cursor); + raise_parse_error("invalid number: %s", state); } while ((state->cursor < state->end) && (*state->cursor >= '0') && (*state->cursor <= '9')) { @@ -1009,11 +1131,13 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) } } - raise_parse_error("expected ',' or ']' after array value", state->cursor); + raise_parse_error("expected ',' or ']' after array value", state); } break; } case '{': { + const char *object_start_cursor = state->cursor; + state->cursor++; json_eat_whitespace(state); long stack_head = state->stack->head; @@ -1028,13 +1152,13 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) } if (*state->cursor != '"') { - raise_parse_error("expected object key, got '%s", state->cursor); + raise_parse_error("expected object key, got %s", state); } json_parse_string(state, config, true); json_eat_whitespace(state); if ((state->cursor >= state->end) || (*state->cursor != ':')) { - raise_parse_error("expected ':' after object key", state->cursor); + raise_parse_error("expected ':' after object key", state); } state->cursor++; @@ -1048,8 +1172,15 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) if (*state->cursor == '}') { state->cursor++; state->current_nesting--; - long count = state->stack->head - stack_head; - return json_push_value(state, config, json_decode_object(state, config, count)); + size_t count = state->stack->head - stack_head; + + // Temporary rewind cursor in case an error is raised + const char *final_cursor = state->cursor; + state->cursor = object_start_cursor; + VALUE object = json_decode_object(state, config, count); + state->cursor = final_cursor; + + return json_push_value(state, config, object); } if (*state->cursor == ',') { @@ -1063,13 +1194,13 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) } if (*state->cursor != '"') { - raise_parse_error("expected object key, got: '%s'", state->cursor); + raise_parse_error("expected object key, got: %s", state); } json_parse_string(state, config, true); json_eat_whitespace(state); if ((state->cursor >= state->end) || (*state->cursor != ':')) { - raise_parse_error("expected ':' after object key, got: '%s", state->cursor); + raise_parse_error("expected ':' after object key, got: %s", state); } state->cursor++; @@ -1079,24 +1210,24 @@ static VALUE json_parse_any(JSON_ParserState *state, JSON_ParserConfig *config) } } - raise_parse_error("expected ',' or '}' after object value, got: '%s'", state->cursor); + raise_parse_error("expected ',' or '}' after object value, got: %s", state); } break; } default: - raise_parse_error("unexpected character: '%s'", state->cursor); + raise_parse_error("unexpected character: %s", state); break; } - raise_parse_error("unreacheable: '%s'", state->cursor); + raise_parse_error("unreacheable: %s", state); } static void json_ensure_eof(JSON_ParserState *state) { json_eat_whitespace(state); if (state->cursor != state->end) { - raise_parse_error("unexpected token at end of stream '%s'", state->cursor); + raise_parse_error("unexpected token at end of stream %s", state); } } @@ -1138,6 +1269,7 @@ static int parser_config_init_i(VALUE key, VALUE val, VALUE data) else if (key == sym_symbolize_names) { config->symbolize_names = RTEST(val); } else if (key == sym_freeze) { config->freeze = RTEST(val); } else if (key == sym_on_load) { config->on_load_proc = RTEST(val) ? val : Qfalse; } + else if (key == sym_allow_duplicate_key) { config->on_duplicate_key = RTEST(val) ? JSON_IGNORE : JSON_RAISE; } else if (key == sym_decimal_class) { if (RTEST(val)) { if (rb_respond_to(val, i_try_convert)) { @@ -1232,9 +1364,14 @@ static VALUE cParser_parse(JSON_ParserConfig *config, VALUE Vsource) .capa = RVALUE_STACK_INITIAL_CAPA, }; + long len; + const char *start; + RSTRING_GETMEM(Vsource, start, len); + JSON_ParserState _state = { - .cursor = RSTRING_PTR(Vsource), - .end = RSTRING_END(Vsource), + .start = start, + .cursor = start, + .end = start + len, .stack = &stack, }; JSON_ParserState *state = &_state; @@ -1349,6 +1486,7 @@ void Init_parser(void) sym_freeze = ID2SYM(rb_intern("freeze")); sym_on_load = ID2SYM(rb_intern("on_load")); sym_decimal_class = ID2SYM(rb_intern("decimal_class")); + sym_allow_duplicate_key = ID2SYM(rb_intern("allow_duplicate_key")); i_chr = rb_intern("chr"); i_aset = rb_intern("[]="); @@ -1362,4 +1500,8 @@ void Init_parser(void) binary_encindex = rb_ascii8bit_encindex(); utf8_encindex = rb_utf8_encindex(); enc_utf8 = rb_utf8_encoding(); + +#ifdef HAVE_SIMD + simd_impl = find_simd_implementation(); +#endif } diff --git a/ext/json/simd/conf.rb b/ext/json/simd/conf.rb new file mode 100644 index 0000000000..8e7d8ee261 --- /dev/null +++ b/ext/json/simd/conf.rb @@ -0,0 +1,20 @@ +case RbConfig::CONFIG['host_cpu'] +when /^(arm|aarch64)/ + # Try to compile a small program using NEON instructions + header, type, init = 'arm_neon.h', 'uint8x16_t', 'vdupq_n_u8(32)' +when /^(x86_64|x64)/ + header, type, init = 'x86intrin.h', '__m128i', '_mm_set1_epi8(32)' +end +if header + have_header(header) && try_compile(<<~SRC) + #{cpp_include(header)} + int main(int argc, char **argv) { + #{type} test = #{init}; + if (argc > 100000) printf("%p", &test); + return 0; + } + SRC + $defs.push("-DJSON_ENABLE_SIMD") +end + +have_header('cpuid.h') diff --git a/ext/json/simd/simd.h b/ext/json/simd/simd.h new file mode 100644 index 0000000000..e0cf4754a2 --- /dev/null +++ b/ext/json/simd/simd.h @@ -0,0 +1,182 @@ +typedef enum { + SIMD_NONE, + SIMD_NEON, + SIMD_SSE2 +} SIMD_Implementation; + +#ifdef JSON_ENABLE_SIMD + +#ifdef __clang__ + #if __has_builtin(__builtin_ctzll) + #define HAVE_BUILTIN_CTZLL 1 + #else + #define HAVE_BUILTIN_CTZLL 0 + #endif +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define HAVE_BUILTIN_CTZLL 1 +#else + #define HAVE_BUILTIN_CTZLL 0 +#endif + +static inline uint32_t trailing_zeros64(uint64_t input) { +#if HAVE_BUILTIN_CTZLL + return __builtin_ctzll(input); +#else + uint32_t trailing_zeros = 0; + uint64_t temp = input; + while ((temp & 1) == 0 && temp > 0) { + trailing_zeros++; + temp >>= 1; + } + return trailing_zeros; +#endif +} + +static inline int trailing_zeros(int input) { + #if HAVE_BUILTIN_CTZLL + return __builtin_ctz(input); + #else + int trailing_zeros = 0; + int temp = input; + while ((temp & 1) == 0 && temp > 0) { + trailing_zeros++; + temp >>= 1; + } + return trailing_zeros; + #endif +} + +#if (defined(__GNUC__ ) || defined(__clang__)) +#define FORCE_INLINE __attribute__((always_inline)) +#else +#define FORCE_INLINE +#endif + + +#define SIMD_MINIMUM_THRESHOLD 6 + +#if defined(__ARM_NEON) || defined(__ARM_NEON__) || defined(__aarch64__) || defined(_M_ARM64) +#include <arm_neon.h> + +#define FIND_SIMD_IMPLEMENTATION_DEFINED 1 +static inline SIMD_Implementation find_simd_implementation(void) { + return SIMD_NEON; +} + +#define HAVE_SIMD 1 +#define HAVE_SIMD_NEON 1 + +// See: https://community.arm.com/arm-community-blogs/b/servers-and-cloud-computing-blog/posts/porting-x86-vector-bitmask-optimizations-to-arm-neon +static inline FORCE_INLINE uint64_t neon_match_mask(uint8x16_t matches) +{ + const uint8x8_t res = vshrn_n_u16(vreinterpretq_u16_u8(matches), 4); + const uint64_t mask = vget_lane_u64(vreinterpret_u64_u8(res), 0); + return mask & 0x8888888888888888ull; +} + +static inline FORCE_INLINE uint64_t compute_chunk_mask_neon(const char *ptr) +{ + uint8x16_t chunk = vld1q_u8((const unsigned char *)ptr); + + // Trick: c < 32 || c == 34 can be factored as c ^ 2 < 33 + // https://lemire.me/blog/2025/04/13/detect-control-characters-quotes-and-backslashes-efficiently-using-swar/ + const uint8x16_t too_low_or_dbl_quote = vcltq_u8(veorq_u8(chunk, vdupq_n_u8(2)), vdupq_n_u8(33)); + + uint8x16_t has_backslash = vceqq_u8(chunk, vdupq_n_u8('\\')); + uint8x16_t needs_escape = vorrq_u8(too_low_or_dbl_quote, has_backslash); + return neon_match_mask(needs_escape); +} + +static inline FORCE_INLINE int string_scan_simd_neon(const char **ptr, const char *end, uint64_t *mask) +{ + while(*ptr + sizeof(uint8x16_t) <= end) { + uint64_t chunk_mask = compute_chunk_mask_neon(*ptr); + if (chunk_mask) { + *mask = chunk_mask; + return 1; + } + *ptr += sizeof(uint8x16_t); + } + return 0; +} + +uint8x16x4_t load_uint8x16_4(const unsigned char *table) { + uint8x16x4_t tab; + tab.val[0] = vld1q_u8(table); + tab.val[1] = vld1q_u8(table+16); + tab.val[2] = vld1q_u8(table+32); + tab.val[3] = vld1q_u8(table+48); + return tab; +} + +#endif /* ARM Neon Support.*/ + +#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) + +#ifdef HAVE_X86INTRIN_H +#include <x86intrin.h> + +#define HAVE_SIMD 1 +#define HAVE_SIMD_SSE2 1 + +#ifdef HAVE_CPUID_H +#define FIND_SIMD_IMPLEMENTATION_DEFINED 1 + +#if defined(__clang__) || defined(__GNUC__) +#define TARGET_SSE2 __attribute__((target("sse2"))) +#else +#define TARGET_SSE2 +#endif + +#define _mm_cmpge_epu8(a, b) _mm_cmpeq_epi8(_mm_max_epu8(a, b), a) +#define _mm_cmple_epu8(a, b) _mm_cmpge_epu8(b, a) +#define _mm_cmpgt_epu8(a, b) _mm_xor_si128(_mm_cmple_epu8(a, b), _mm_set1_epi8(-1)) +#define _mm_cmplt_epu8(a, b) _mm_cmpgt_epu8(b, a) + +static inline TARGET_SSE2 FORCE_INLINE int compute_chunk_mask_sse2(const char *ptr) +{ + __m128i chunk = _mm_loadu_si128((__m128i const*)ptr); + // Trick: c < 32 || c == 34 can be factored as c ^ 2 < 33 + // https://lemire.me/blog/2025/04/13/detect-control-characters-quotes-and-backslashes-efficiently-using-swar/ + __m128i too_low_or_dbl_quote = _mm_cmplt_epu8(_mm_xor_si128(chunk, _mm_set1_epi8(2)), _mm_set1_epi8(33)); + __m128i has_backslash = _mm_cmpeq_epi8(chunk, _mm_set1_epi8('\\')); + __m128i needs_escape = _mm_or_si128(too_low_or_dbl_quote, has_backslash); + return _mm_movemask_epi8(needs_escape); +} + +static inline TARGET_SSE2 FORCE_INLINE int string_scan_simd_sse2(const char **ptr, const char *end, int *mask) +{ + while (*ptr + sizeof(__m128i) <= end) { + int chunk_mask = compute_chunk_mask_sse2(*ptr); + if (chunk_mask) { + *mask = chunk_mask; + return 1; + } + *ptr += sizeof(__m128i); + } + + return 0; +} + +#include <cpuid.h> +#endif /* HAVE_CPUID_H */ + +static inline SIMD_Implementation find_simd_implementation(void) { + // TODO Revisit. I think the SSE version now only uses SSE2 instructions. + if (__builtin_cpu_supports("sse2")) { + return SIMD_SSE2; + } + + return SIMD_NONE; +} + +#endif /* HAVE_X86INTRIN_H */ +#endif /* X86_64 Support */ + +#endif /* JSON_ENABLE_SIMD */ + +#ifndef FIND_SIMD_IMPLEMENTATION_DEFINED +static inline SIMD_Implementation find_simd_implementation(void) { + return SIMD_NONE; +} +#endif diff --git a/ext/json/vendor/fpconv.c b/ext/json/vendor/fpconv.c index 2887c64885..75efd46f11 100644 --- a/ext/json/vendor/fpconv.c +++ b/ext/json/vendor/fpconv.c @@ -41,7 +41,7 @@ typedef struct Fp { int exp; } Fp; -static Fp powers_ten[] = { +static const Fp powers_ten[] = { { 18054884314459144840U, -1220 }, { 13451937075301367670U, -1193 }, { 10022474136428063862U, -1166 }, { 14934650266808366570U, -1140 }, { 11127181549972568877U, -1113 }, { 16580792590934885855U, -1087 }, @@ -92,7 +92,7 @@ static Fp find_cachedpow10(int exp, int* k) { const double one_log_ten = 0.30102999566398114; - int approx = -(exp + npowers) * one_log_ten; + int approx = (int)(-(exp + npowers) * one_log_ten); int idx = (approx - firstpower) / steppowers; while(1) { @@ -123,7 +123,7 @@ static Fp find_cachedpow10(int exp, int* k) #define absv(n) ((n) < 0 ? -(n) : (n)) #define minv(a, b) ((a) < (b) ? (a) : (b)) -static uint64_t tens[] = { +static const uint64_t tens[] = { 10000000000000000000U, 1000000000000000000U, 100000000000000000U, 10000000000000000U, 1000000000000000U, 100000000000000U, 10000000000000U, 1000000000000U, 100000000000U, @@ -244,7 +244,7 @@ static int generate_digits(Fp* fp, Fp* upper, Fp* lower, char* digits, int* K) uint64_t part2 = upper->frac & (one.frac - 1); int idx = 0, kappa = 10; - uint64_t* divp; + const uint64_t* divp; /* 1000000000 */ for(divp = tens + 10; kappa > 0; divp++) { @@ -268,7 +268,7 @@ static int generate_digits(Fp* fp, Fp* upper, Fp* lower, char* digits, int* K) } /* 10 */ - uint64_t* unit = tens + 18; + const uint64_t* unit = tens + 18; while(true) { part2 *= 10; @@ -340,7 +340,7 @@ static int emit_digits(char* digits, int ndigits, char* dest, int K, bool neg) } /* write decimal w/o scientific notation */ - if(K < 0 && (K > -7 || exp < 4)) { + if(K < 0 && (K > -7 || exp < 10)) { int offset = ndigits - absv(K); /* fp < 1.0 -> write leading zero */ if(offset <= 0) { @@ -432,8 +432,8 @@ static int filter_special(double fp, char* dest) * * Input: * fp -> the double to convert, dest -> destination buffer. - * The generated string will never be longer than 24 characters. - * Make sure to pass a pointer to at least 24 bytes of memory. + * The generated string will never be longer than 28 characters. + * Make sure to pass a pointer to at least 28 bytes of memory. * The emitted string will not be null terminated. * * Output: @@ -443,7 +443,7 @@ static int filter_special(double fp, char* dest) * * void print(double d) * { - * char buf[24 + 1] // plus null terminator + * char buf[28 + 1] // plus null terminator * int str_len = fpconv_dtoa(d, buf); * * buf[str_len] = '\0'; @@ -451,7 +451,7 @@ static int filter_special(double fp, char* dest) * } * */ -static int fpconv_dtoa(double d, char dest[24]) +static int fpconv_dtoa(double d, char dest[28]) { char digits[18]; diff --git a/ext/objspace/depend b/ext/objspace/depend index 6d312024f6..4092b2bbc7 100644 --- a/ext/objspace/depend +++ b/ext/objspace/depend @@ -177,12 +177,14 @@ object_tracing.o: $(top_srcdir)/ccan/check_type/check_type.h object_tracing.o: $(top_srcdir)/ccan/container_of/container_of.h object_tracing.o: $(top_srcdir)/ccan/list/list.h object_tracing.o: $(top_srcdir)/ccan/str/str.h +object_tracing.o: $(top_srcdir)/id_table.h object_tracing.o: $(top_srcdir)/internal.h object_tracing.o: $(top_srcdir)/internal/array.h object_tracing.o: $(top_srcdir)/internal/basic_operators.h object_tracing.o: $(top_srcdir)/internal/compilers.h object_tracing.o: $(top_srcdir)/internal/gc.h object_tracing.o: $(top_srcdir)/internal/imemo.h +object_tracing.o: $(top_srcdir)/internal/namespace.h object_tracing.o: $(top_srcdir)/internal/sanitizers.h object_tracing.o: $(top_srcdir)/internal/serial.h object_tracing.o: $(top_srcdir)/internal/set_table.h @@ -392,6 +394,7 @@ objspace.o: $(top_srcdir)/internal/compilers.h objspace.o: $(top_srcdir)/internal/gc.h objspace.o: $(top_srcdir)/internal/hash.h objspace.o: $(top_srcdir)/internal/imemo.h +objspace.o: $(top_srcdir)/internal/namespace.h objspace.o: $(top_srcdir)/internal/sanitizers.h objspace.o: $(top_srcdir)/internal/serial.h objspace.o: $(top_srcdir)/internal/set_table.h @@ -605,6 +608,7 @@ objspace_dump.o: $(top_srcdir)/internal/gc.h objspace_dump.o: $(top_srcdir)/internal/hash.h objspace_dump.o: $(top_srcdir)/internal/imemo.h objspace_dump.o: $(top_srcdir)/internal/io.h +objspace_dump.o: $(top_srcdir)/internal/namespace.h objspace_dump.o: $(top_srcdir)/internal/sanitizers.h objspace_dump.o: $(top_srcdir)/internal/serial.h objspace_dump.o: $(top_srcdir)/internal/set_table.h diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c index 0ead94713a..5e183e78ed 100644 --- a/ext/objspace/objspace.c +++ b/ext/objspace/objspace.c @@ -504,6 +504,7 @@ count_imemo_objects(int argc, VALUE *argv, VALUE self) INIT_IMEMO_TYPE_ID(imemo_callinfo); INIT_IMEMO_TYPE_ID(imemo_callcache); INIT_IMEMO_TYPE_ID(imemo_constcache); + INIT_IMEMO_TYPE_ID(imemo_fields); #undef INIT_IMEMO_TYPE_ID } @@ -792,7 +793,7 @@ objspace_internal_super_of(VALUE self, VALUE obj) case T_MODULE: case T_CLASS: case T_ICLASS: - super = RCLASS_SUPER(obj); + super = rb_class_super_of(obj); break; default: rb_raise(rb_eArgError, "class or module is expected"); diff --git a/ext/objspace/objspace_dump.c b/ext/objspace/objspace_dump.c index dd0459bf56..80732d0282 100644 --- a/ext/objspace/objspace_dump.c +++ b/ext/objspace/objspace_dump.c @@ -394,9 +394,10 @@ dump_object(VALUE obj, struct dump_config *dc) dc->cur_obj = obj; dc->cur_obj_references = 0; - if (BUILTIN_TYPE(obj) == T_NODE || BUILTIN_TYPE(obj) == T_IMEMO) { + if (BUILTIN_TYPE(obj) == T_NODE || (BUILTIN_TYPE(obj) == T_IMEMO && !IMEMO_TYPE_P(obj, imemo_fields))) { dc->cur_obj_klass = 0; - } else { + } + else { dc->cur_obj_klass = RBASIC_CLASS(obj); } @@ -414,9 +415,11 @@ dump_object(VALUE obj, struct dump_config *dc) dump_append(dc, obj_type(obj)); dump_append(dc, "\""); - size_t shape_id = rb_shape_get_shape_id(obj); - dump_append(dc, ", \"shape_id\":"); - dump_append_sizet(dc, shape_id); + if (BUILTIN_TYPE(obj) != T_IMEMO || IMEMO_TYPE_P(obj, imemo_fields)) { + size_t shape_id = rb_obj_shape_id(obj) & SHAPE_ID_OFFSET_MASK; + dump_append(dc, ", \"shape_id\":"); + dump_append_sizet(dc, shape_id); + } dump_append(dc, ", \"slot_size\":"); dump_append_sizet(dc, dc->cur_page_slot_size); @@ -537,7 +540,7 @@ dump_object(VALUE obj, struct dump_config *dc) case T_CLASS: dump_append(dc, ", \"variation_count\":"); - dump_append_d(dc, RCLASS_EXT(obj)->variation_count); + dump_append_d(dc, rb_class_variation_count(obj)); case T_MODULE: if (rb_class_get_superclass(obj)) { @@ -560,7 +563,7 @@ dump_object(VALUE obj, struct dump_config *dc) } } - if (RCLASS_SINGLETON_P(obj)) { + if (rb_class_singleton_p(obj)) { dump_append(dc, ", \"singleton\":true"); } } @@ -586,8 +589,8 @@ dump_object(VALUE obj, struct dump_config *dc) } dump_append(dc, ", \"ivars\":"); - dump_append_lu(dc, ROBJECT_IV_COUNT(obj)); - if (rb_shape_obj_too_complex(obj)) { + dump_append_lu(dc, ROBJECT_FIELDS_COUNT(obj)); + if (rb_shape_obj_too_complex_p(obj)) { dump_append(dc, ", \"too_complex_shape\":true"); } break; @@ -782,59 +785,49 @@ objspace_dump(VALUE os, VALUE obj, VALUE output) } static void -shape_i(rb_shape_t *shape, void *data) +shape_id_i(shape_id_t shape_id, void *data) { struct dump_config *dc = (struct dump_config *)data; - size_t shape_id = rb_shape_id(shape); if (shape_id < dc->shapes_since) { return; } dump_append(dc, "{\"address\":"); - dump_append_ref(dc, (VALUE)shape); + dump_append_ref(dc, (VALUE)RSHAPE(shape_id)); dump_append(dc, ", \"type\":\"SHAPE\", \"id\":"); dump_append_sizet(dc, shape_id); - if (shape->type != SHAPE_ROOT) { + if (RSHAPE_TYPE(shape_id) != SHAPE_ROOT) { dump_append(dc, ", \"parent_id\":"); - dump_append_lu(dc, shape->parent_id); + dump_append_lu(dc, RSHAPE_PARENT(shape_id)); } dump_append(dc, ", \"depth\":"); - dump_append_sizet(dc, rb_shape_depth(shape)); + dump_append_sizet(dc, rb_shape_depth(shape_id)); - dump_append(dc, ", \"shape_type\":"); - switch((enum shape_type)shape->type) { + switch (RSHAPE_TYPE(shape_id)) { case SHAPE_ROOT: - dump_append(dc, "\"ROOT\""); + dump_append(dc, ", \"shape_type\":\"ROOT\""); break; case SHAPE_IVAR: - dump_append(dc, "\"IVAR\""); + dump_append(dc, ", \"shape_type\":\"IVAR\""); dump_append(dc, ",\"edge_name\":"); - dump_append_id(dc, shape->edge_name); + dump_append_id(dc, RSHAPE_EDGE_NAME(shape_id)); break; - case SHAPE_FROZEN: - dump_append(dc, "\"FROZEN\""); + case SHAPE_OBJ_ID: + dump_append(dc, ", \"shape_type\":\"OBJ_ID\""); break; - case SHAPE_T_OBJECT: - dump_append(dc, "\"T_OBJECT\""); - break; - case SHAPE_OBJ_TOO_COMPLEX: - dump_append(dc, "\"OBJ_TOO_COMPLEX\""); - break; - default: - rb_bug("[objspace] unexpected shape type"); } dump_append(dc, ", \"edges\":"); - dump_append_sizet(dc, rb_shape_edges_count(shape)); + dump_append_sizet(dc, rb_shape_edges_count(shape_id)); dump_append(dc, ", \"memsize\":"); - dump_append_sizet(dc, rb_shape_memsize(shape)); + dump_append_sizet(dc, rb_shape_memsize(shape_id)); dump_append(dc, "}\n"); } @@ -853,7 +846,7 @@ objspace_dump_all(VALUE os, VALUE output, VALUE full, VALUE since, VALUE shapes) } if (RTEST(shapes)) { - rb_shape_each_shape(shape_i, &dc); + rb_shape_each_shape_id(shape_id_i, &dc); } /* dump all objects */ @@ -870,7 +863,7 @@ objspace_dump_shapes(VALUE os, VALUE output, VALUE shapes) dump_output(&dc, output, Qfalse, Qnil, shapes); if (RTEST(shapes)) { - rb_shape_each_shape(shape_i, &dc); + rb_shape_each_shape_id(shape_id_i, &dc); } return dump_result(&dc); } diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb index 5bb045e895..afbed10b54 100644 --- a/ext/openssl/extconf.rb +++ b/ext/openssl/extconf.rb @@ -38,7 +38,7 @@ Logging::message "=== OpenSSL for Ruby configurator ===\n" $defs.push("-D""OPENSSL_SUPPRESS_DEPRECATED") -have_func("rb_io_descriptor") +have_func("rb_io_descriptor", "ruby/io.h") have_func("rb_io_maybe_wait(0, Qnil, Qnil, Qnil)", "ruby/io.h") # Ruby 3.1 have_func("rb_io_timeout", "ruby/io.h") @@ -135,6 +135,11 @@ ssl_h = "openssl/ssl.h".freeze # compile options have_func("RAND_egd()", "openssl/rand.h") +# added in OpenSSL 1.0.2, not in LibreSSL yet +have_func("SSL_CTX_set1_sigalgs_list(NULL, NULL)", ssl_h) +# added in OpenSSL 1.0.2, not in LibreSSL or AWS-LC yet +have_func("SSL_CTX_set1_client_sigalgs_list(NULL, NULL)", ssl_h) + # added in 1.1.0, currently not in LibreSSL have_func("EVP_PBE_scrypt(\"\", 0, (unsigned char *)\"\", 0, 0, 0, 0, 0, NULL, 0)", evp_h) diff --git a/ext/openssl/openssl.gemspec b/ext/openssl/openssl.gemspec index 9f7c718592..2ec1551885 100644 --- a/ext/openssl/openssl.gemspec +++ b/ext/openssl/openssl.gemspec @@ -13,7 +13,8 @@ Gem::Specification.new do |spec| spec.files = [] spec.add_runtime_dependency('jruby-openssl', '~> 0.14') else - spec.files = Dir["lib/**/*.rb", "ext/**/*.{c,h,rb}", "*.md", "BSDL", "COPYING"] + spec.files = Dir.glob(["lib/**/*.rb", "ext/**/*.{c,h,rb}", "*.md"], base: File.expand_path("..", __FILE__)) + + ["BSDL", "COPYING"] spec.require_paths = ["lib"] spec.extensions = ["ext/openssl/extconf.rb"] end diff --git a/ext/openssl/ossl.h b/ext/openssl/ossl.h index 9b20829b3f..22471d2085 100644 --- a/ext/openssl/ossl.h +++ b/ext/openssl/ossl.h @@ -71,6 +71,7 @@ #if OSSL_OPENSSL_PREREQ(3, 0, 0) # define OSSL_USE_PROVIDER +# include <openssl/provider.h> #endif /* diff --git a/ext/openssl/ossl_cipher.c b/ext/openssl/ossl_cipher.c index d737fa74ff..07e651335d 100644 --- a/ext/openssl/ossl_cipher.c +++ b/ext/openssl/ossl_cipher.c @@ -198,47 +198,16 @@ ossl_cipher_reset(VALUE self) } static VALUE -ossl_cipher_init(int argc, VALUE *argv, VALUE self, int mode) +ossl_cipher_init(VALUE self, int enc) { EVP_CIPHER_CTX *ctx; - unsigned char key[EVP_MAX_KEY_LENGTH], *p_key = NULL; - unsigned char iv[EVP_MAX_IV_LENGTH], *p_iv = NULL; - VALUE pass, init_v; - - if(rb_scan_args(argc, argv, "02", &pass, &init_v) > 0){ - /* - * oops. this code mistakes salt for IV. - * We deprecated the arguments for this method, but we decided - * keeping this behaviour for backward compatibility. - */ - VALUE cname = rb_class_path(rb_obj_class(self)); - rb_warn("arguments for %"PRIsVALUE"#encrypt and %"PRIsVALUE"#decrypt were deprecated; " - "use %"PRIsVALUE"#pkcs5_keyivgen to derive key and IV", - cname, cname, cname); - StringValue(pass); - GetCipher(self, ctx); - if (NIL_P(init_v)) memcpy(iv, "OpenSSL for Ruby rulez!", sizeof(iv)); - else{ - StringValue(init_v); - if (EVP_MAX_IV_LENGTH > RSTRING_LEN(init_v)) { - memset(iv, 0, EVP_MAX_IV_LENGTH); - memcpy(iv, RSTRING_PTR(init_v), RSTRING_LEN(init_v)); - } - else memcpy(iv, RSTRING_PTR(init_v), sizeof(iv)); - } - EVP_BytesToKey(EVP_CIPHER_CTX_cipher(ctx), EVP_md5(), iv, - (unsigned char *)RSTRING_PTR(pass), RSTRING_LENINT(pass), 1, key, NULL); - p_key = key; - p_iv = iv; - } - else { - GetCipher(self, ctx); - } - if (EVP_CipherInit_ex(ctx, NULL, NULL, p_key, p_iv, mode) != 1) { - ossl_raise(eCipherError, NULL); + + GetCipher(self, ctx); + if (EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, enc) != 1) { + ossl_raise(eCipherError, "EVP_CipherInit_ex"); } - rb_ivar_set(self, id_key_set, p_key ? Qtrue : Qfalse); + rb_ivar_set(self, id_key_set, Qfalse); return self; } @@ -256,9 +225,9 @@ ossl_cipher_init(int argc, VALUE *argv, VALUE self, int mode) * Internally calls EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, 1). */ static VALUE -ossl_cipher_encrypt(int argc, VALUE *argv, VALUE self) +ossl_cipher_encrypt(VALUE self) { - return ossl_cipher_init(argc, argv, self, 1); + return ossl_cipher_init(self, 1); } /* @@ -274,9 +243,9 @@ ossl_cipher_encrypt(int argc, VALUE *argv, VALUE self) * Internally calls EVP_CipherInit_ex(ctx, NULL, NULL, NULL, NULL, 0). */ static VALUE -ossl_cipher_decrypt(int argc, VALUE *argv, VALUE self) +ossl_cipher_decrypt(VALUE self) { - return ossl_cipher_init(argc, argv, self, 0); + return ossl_cipher_init(self, 0); } /* @@ -1064,8 +1033,8 @@ Init_ossl_cipher(void) rb_define_module_function(cCipher, "ciphers", ossl_s_ciphers, 0); rb_define_method(cCipher, "initialize", ossl_cipher_initialize, 1); rb_define_method(cCipher, "reset", ossl_cipher_reset, 0); - rb_define_method(cCipher, "encrypt", ossl_cipher_encrypt, -1); - rb_define_method(cCipher, "decrypt", ossl_cipher_decrypt, -1); + rb_define_method(cCipher, "encrypt", ossl_cipher_encrypt, 0); + rb_define_method(cCipher, "decrypt", ossl_cipher_decrypt, 0); rb_define_method(cCipher, "pkcs5_keyivgen", ossl_cipher_pkcs5_keyivgen, -1); rb_define_method(cCipher, "update", ossl_cipher_update, -1); rb_define_method(cCipher, "final", ossl_cipher_final, 0); diff --git a/ext/openssl/ossl_pkey.c b/ext/openssl/ossl_pkey.c index dc83255f0e..b00a3648d1 100644 --- a/ext/openssl/ossl_pkey.c +++ b/ext/openssl/ossl_pkey.c @@ -635,6 +635,29 @@ ossl_pkey_initialize_copy(VALUE self, VALUE other) } #endif +#ifndef OSSL_USE_PROVIDER +static int +lookup_pkey_type(VALUE type) +{ + const EVP_PKEY_ASN1_METHOD *ameth; + int pkey_id; + + StringValue(type); + /* + * XXX: EVP_PKEY_asn1_find_str() looks up a PEM type string. Should we use + * OBJ_txt2nid() instead (and then somehow check if the NID is an acceptable + * EVP_PKEY type)? + * It is probably fine, though, since it can handle all algorithms that + * support raw keys in 1.1.1: { X25519, X448, ED25519, ED448, HMAC }. + */ + ameth = EVP_PKEY_asn1_find_str(NULL, RSTRING_PTR(type), RSTRING_LENINT(type)); + if (!ameth) + ossl_raise(ePKeyError, "algorithm %"PRIsVALUE" not found", type); + EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); + return pkey_id; +} +#endif + /* * call-seq: * OpenSSL::PKey.new_raw_private_key(algo, string) -> PKey @@ -646,22 +669,23 @@ static VALUE ossl_pkey_new_raw_private_key(VALUE self, VALUE type, VALUE key) { EVP_PKEY *pkey; - const EVP_PKEY_ASN1_METHOD *ameth; - int pkey_id; size_t keylen; - StringValue(type); StringValue(key); - ameth = EVP_PKEY_asn1_find_str(NULL, RSTRING_PTR(type), RSTRING_LENINT(type)); - if (!ameth) - ossl_raise(ePKeyError, "algorithm %"PRIsVALUE" not found", type); - EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); - keylen = RSTRING_LEN(key); +#ifdef OSSL_USE_PROVIDER + pkey = EVP_PKEY_new_raw_private_key_ex(NULL, StringValueCStr(type), NULL, + (unsigned char *)RSTRING_PTR(key), + keylen); + if (!pkey) + ossl_raise(ePKeyError, "EVP_PKEY_new_raw_private_key_ex"); +#else + int pkey_id = lookup_pkey_type(type); pkey = EVP_PKEY_new_raw_private_key(pkey_id, NULL, (unsigned char *)RSTRING_PTR(key), keylen); if (!pkey) ossl_raise(ePKeyError, "EVP_PKEY_new_raw_private_key"); +#endif return ossl_pkey_new(pkey); } @@ -677,22 +701,23 @@ static VALUE ossl_pkey_new_raw_public_key(VALUE self, VALUE type, VALUE key) { EVP_PKEY *pkey; - const EVP_PKEY_ASN1_METHOD *ameth; - int pkey_id; size_t keylen; - StringValue(type); StringValue(key); - ameth = EVP_PKEY_asn1_find_str(NULL, RSTRING_PTR(type), RSTRING_LENINT(type)); - if (!ameth) - ossl_raise(ePKeyError, "algorithm %"PRIsVALUE" not found", type); - EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); - keylen = RSTRING_LEN(key); +#ifdef OSSL_USE_PROVIDER + pkey = EVP_PKEY_new_raw_public_key_ex(NULL, StringValueCStr(type), NULL, + (unsigned char *)RSTRING_PTR(key), + keylen); + if (!pkey) + ossl_raise(ePKeyError, "EVP_PKEY_new_raw_public_key_ex"); +#else + int pkey_id = lookup_pkey_type(type); pkey = EVP_PKEY_new_raw_public_key(pkey_id, NULL, (unsigned char *)RSTRING_PTR(key), keylen); if (!pkey) ossl_raise(ePKeyError, "EVP_PKEY_new_raw_public_key"); +#endif return ossl_pkey_new(pkey); } @@ -711,6 +736,10 @@ ossl_pkey_oid(VALUE self) GetPKey(self, pkey); nid = EVP_PKEY_id(pkey); +#ifdef OSSL_USE_PROVIDER + if (nid == EVP_PKEY_KEYMGMT) + ossl_raise(ePKeyError, "EVP_PKEY_id"); +#endif return rb_str_new_cstr(OBJ_nid2sn(nid)); } @@ -724,13 +753,23 @@ static VALUE ossl_pkey_inspect(VALUE self) { EVP_PKEY *pkey; - int nid; GetPKey(self, pkey); - nid = EVP_PKEY_id(pkey); - return rb_sprintf("#<%"PRIsVALUE":%p oid=%s>", - rb_class_name(CLASS_OF(self)), (void *)self, - OBJ_nid2sn(nid)); + VALUE str = rb_sprintf("#<%"PRIsVALUE":%p", + rb_obj_class(self), (void *)self); + int nid = EVP_PKEY_id(pkey); +#ifdef OSSL_USE_PROVIDER + if (nid != EVP_PKEY_KEYMGMT) +#endif + rb_str_catf(str, " oid=%s", OBJ_nid2sn(nid)); +#ifdef OSSL_USE_PROVIDER + rb_str_catf(str, " type_name=%s", EVP_PKEY_get0_type_name(pkey)); + const OSSL_PROVIDER *prov = EVP_PKEY_get0_provider(pkey); + if (prov) + rb_str_catf(str, " provider=%s", OSSL_PROVIDER_get0_name(prov)); +#endif + rb_str_catf(str, ">"); + return str; } /* diff --git a/ext/openssl/ossl_provider.c b/ext/openssl/ossl_provider.c index d1f6c5d427..529a5e1c72 100644 --- a/ext/openssl/ossl_provider.c +++ b/ext/openssl/ossl_provider.c @@ -5,8 +5,6 @@ #include "ossl.h" #ifdef OSSL_USE_PROVIDER -# include <openssl/provider.h> - #define NewProvider(klass) \ TypedData_Wrap_Struct((klass), &ossl_provider_type, 0) #define SetProvider(obj, provider) do { \ diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c index a5b25e14de..30fbb3bbd1 100644 --- a/ext/openssl/ossl_ssl.c +++ b/ext/openssl/ossl_ssl.c @@ -430,8 +430,9 @@ ossl_sslctx_add_extra_chain_cert_i(RB_BLOCK_CALL_FUNC_ARGLIST(i, arg)) GetSSLCTX(arg, ctx); x509 = DupX509CertPtr(i); - if(!SSL_CTX_add_extra_chain_cert(ctx, x509)){ - ossl_raise(eSSLError, NULL); + if (!SSL_CTX_add_extra_chain_cert(ctx, x509)) { + X509_free(x509); + ossl_raise(eSSLError, "SSL_CTX_add_extra_chain_cert"); } return i; @@ -998,11 +999,10 @@ static VALUE build_cipher_string(VALUE v) { VALUE str, elem; - int i; if (RB_TYPE_P(v, T_ARRAY)) { str = rb_str_new(0, 0); - for (i = 0; i < RARRAY_LEN(v); i++) { + for (long i = 0; i < RARRAY_LEN(v); i++) { elem = rb_ary_entry(v, i); if (RB_TYPE_P(elem, T_ARRAY)) elem = rb_ary_entry(elem, 0); elem = rb_String(elem); @@ -1023,9 +1023,14 @@ build_cipher_string(VALUE v) * ctx.ciphers = [name, ...] * ctx.ciphers = [[name, version, bits, alg_bits], ...] * - * Sets the list of available cipher suites for this context. Note in a server - * context some ciphers require the appropriate certificates. For example, an - * RSA cipher suite can only be chosen when an RSA certificate is available. + * Sets the list of available cipher suites for TLS 1.2 and below for this + * context. + * + * Note in a server context some ciphers require the appropriate certificates. + * For example, an RSA cipher suite can only be chosen when an RSA certificate + * is available. + * + * This method does not affect TLS 1.3 connections. See also #ciphersuites=. */ static VALUE ossl_sslctx_set_ciphers(VALUE self, VALUE v) @@ -1034,6 +1039,7 @@ ossl_sslctx_set_ciphers(VALUE self, VALUE v) VALUE str; rb_check_frozen(self); + // Assigning nil is a no-op for compatibility if (NIL_P(v)) return v; @@ -1050,9 +1056,8 @@ ossl_sslctx_set_ciphers(VALUE self, VALUE v) * call-seq: * ctx.ciphersuites = "cipher1:cipher2:..." * ctx.ciphersuites = [name, ...] - * ctx.ciphersuites = [[name, version, bits, alg_bits], ...] * - * Sets the list of available TLSv1.3 cipher suites for this context. + * Sets the list of available TLS 1.3 cipher suites for this context. */ static VALUE ossl_sslctx_set_ciphersuites(VALUE self, VALUE v) @@ -1061,6 +1066,7 @@ ossl_sslctx_set_ciphersuites(VALUE self, VALUE v) VALUE str; rb_check_frozen(self); + // Assigning nil is a no-op for compatibility if (NIL_P(v)) return v; @@ -1073,6 +1079,63 @@ ossl_sslctx_set_ciphersuites(VALUE self, VALUE v) return v; } +#ifdef HAVE_SSL_CTX_SET1_SIGALGS_LIST +/* + * call-seq: + * ctx.sigalgs = "sigalg1:sigalg2:..." + * + * Sets the list of "supported signature algorithms" for this context. + * + * For a TLS client, the list is used in the "signature_algorithms" extension + * in the ClientHello message. For a server, the list is used by OpenSSL to + * determine the set of shared signature algorithms. OpenSSL will pick the most + * appropriate one from it. + * + * See also #client_sigalgs= for the client authentication equivalent. + */ +static VALUE +ossl_sslctx_set_sigalgs(VALUE self, VALUE v) +{ + SSL_CTX *ctx; + + rb_check_frozen(self); + GetSSLCTX(self, ctx); + + if (!SSL_CTX_set1_sigalgs_list(ctx, StringValueCStr(v))) + ossl_raise(eSSLError, "SSL_CTX_set1_sigalgs_list"); + + return v; +} +#endif + +#ifdef HAVE_SSL_CTX_SET1_CLIENT_SIGALGS_LIST +/* + * call-seq: + * ctx.client_sigalgs = "sigalg1:sigalg2:..." + * + * Sets the list of "supported signature algorithms" for client authentication + * for this context. + * + * For a TLS server, the list is sent to the client as part of the + * CertificateRequest message. + * + * See also #sigalgs= for the server authentication equivalent. + */ +static VALUE +ossl_sslctx_set_client_sigalgs(VALUE self, VALUE v) +{ + SSL_CTX *ctx; + + rb_check_frozen(self); + GetSSLCTX(self, ctx); + + if (!SSL_CTX_set1_client_sigalgs_list(ctx, StringValueCStr(v))) + ossl_raise(eSSLError, "SSL_CTX_set1_client_sigalgs_list"); + + return v; +} +#endif + #ifndef OPENSSL_NO_DH /* * call-seq: @@ -2886,6 +2949,12 @@ Init_ossl_ssl(void) rb_define_method(cSSLContext, "ciphers", ossl_sslctx_get_ciphers, 0); rb_define_method(cSSLContext, "ciphers=", ossl_sslctx_set_ciphers, 1); rb_define_method(cSSLContext, "ciphersuites=", ossl_sslctx_set_ciphersuites, 1); +#ifdef HAVE_SSL_CTX_SET1_SIGALGS_LIST // Not in LibreSSL yet + rb_define_method(cSSLContext, "sigalgs=", ossl_sslctx_set_sigalgs, 1); +#endif +#ifdef HAVE_SSL_CTX_SET1_CLIENT_SIGALGS_LIST // Not in LibreSSL or AWS-LC yet + rb_define_method(cSSLContext, "client_sigalgs=", ossl_sslctx_set_client_sigalgs, 1); +#endif #ifndef OPENSSL_NO_DH rb_define_method(cSSLContext, "tmp_dh=", ossl_sslctx_set_tmp_dh, 1); #endif diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb index a95393c281..0c158c9ff3 100644 --- a/ext/psych/lib/psych.rb +++ b/ext/psych/lib/psych.rb @@ -23,7 +23,6 @@ require_relative 'psych/parser' require_relative 'psych/omap' require_relative 'psych/set' require_relative 'psych/coder' -require_relative 'psych/core_ext' require_relative 'psych/stream' require_relative 'psych/json/tree_builder' require_relative 'psych/json/stream' @@ -655,6 +654,35 @@ module Psych end ### + # Load multiple documents given in +yaml+. Returns the parsed documents + # as a list. + # + # Example: + # + # Psych.safe_load_stream("--- foo\n...\n--- bar\n...") # => ['foo', 'bar'] + # + # list = [] + # Psych.safe_load_stream("--- foo\n...\n--- bar\n...") do |ruby| + # list << ruby + # end + # list # => ['foo', 'bar'] + # + def self.safe_load_stream yaml, filename: nil, permitted_classes: [], aliases: false + documents = parse_stream(yaml, filename: filename).children.map do |child| + stream = Psych::Nodes::Stream.new + stream.children << child + safe_load(stream.to_yaml, permitted_classes: permitted_classes, aliases: aliases) + end + + if block_given? + documents.each { |doc| yield doc } + nil + else + documents + end + end + + ### # Load the document contained in +filename+. Returns the yaml contained in # +filename+ as a Ruby object, or if the file is empty, it returns # the specified +fallback+ return value, which defaults to +false+. @@ -761,3 +789,5 @@ module Psych self.domain_types = {} # :startdoc: end + +require_relative 'psych/core_ext' diff --git a/ext/psych/lib/psych/class_loader.rb b/ext/psych/lib/psych/class_loader.rb index 50efc35ee2..c8f509720a 100644 --- a/ext/psych/lib/psych/class_loader.rb +++ b/ext/psych/lib/psych/class_loader.rb @@ -6,6 +6,7 @@ module Psych class ClassLoader # :nodoc: BIG_DECIMAL = 'BigDecimal' COMPLEX = 'Complex' + DATA = 'Data' unless RUBY_VERSION < "3.2" DATE = 'Date' DATE_TIME = 'DateTime' EXCEPTION = 'Exception' diff --git a/ext/psych/lib/psych/core_ext.rb b/ext/psych/lib/psych/core_ext.rb index 950b20f2d6..fc259fd4a2 100644 --- a/ext/psych/lib/psych/core_ext.rb +++ b/ext/psych/lib/psych/core_ext.rb @@ -18,12 +18,19 @@ if defined?(::IRB) require_relative 'y' end - -# TODO: how best to check for builtin Set? -if defined?(::Set) && Object.const_source_location(:Set) == ["ruby", 0] +# Up to Ruby 3.4, Set was a regular object and was dumped as such +# by Pysch. +# Starting from Ruby 3.5 it's a core class written in C, so we have to implement +# #encode_with / #init_with to preserve backward compatibility. +if defined?(::Set) && Set.new.instance_variables.empty? class Set def encode_with(coder) - coder["hash"] = to_h + hash = {} + each do |m| + hash[m] = true + end + coder["hash"] = hash + coder end def init_with(coder) diff --git a/ext/psych/lib/psych/versions.rb b/ext/psych/lib/psych/versions.rb index d91563c861..3202b10296 100644 --- a/ext/psych/lib/psych/versions.rb +++ b/ext/psych/lib/psych/versions.rb @@ -2,7 +2,7 @@ module Psych # The version of Psych you are using - VERSION = '5.2.3' + VERSION = '5.2.6' if RUBY_ENGINE == 'jruby' DEFAULT_SNAKEYAML_VERSION = '2.9'.freeze diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb index f0b4a94e45..580a74e9fb 100644 --- a/ext/psych/lib/psych/visitors/to_ruby.rb +++ b/ext/psych/lib/psych/visitors/to_ruby.rb @@ -96,11 +96,11 @@ module Psych Float(@ss.tokenize(o.value)) when "!ruby/regexp" klass = class_loader.regexp - o.value =~ /^\/(.*)\/([mixn]*)$/m - source = $1 + matches = /^\/(?<string>.*)\/(?<options>[mixn]*)$/m.match(o.value) + source = matches[:string].gsub('\/', '/') options = 0 lang = nil - $2&.each_char do |option| + matches[:options].each_char do |option| case option when 'x' then options |= Regexp::EXTENDED when 'i' then options |= Regexp::IGNORECASE @@ -197,6 +197,32 @@ module Psych s end + when /^!ruby\/data(-with-ivars)?(?::(.*))?$/ + data = register(o, resolve_class($2).allocate) if $2 + members = {} + + if $1 # data-with-ivars + ivars = {} + o.children.each_slice(2) do |type, vars| + case accept(type) + when 'members' + revive_data_members(members, vars) + data ||= allocate_anon_data(o, members) + when 'ivars' + revive_hash(ivars, vars) + end + end + ivars.each do |ivar, v| + data.instance_variable_set ivar, v + end + else + revive_data_members(members, o) + end + data ||= allocate_anon_data(o, members) + init_struct(data, **members) + data.freeze + data + when /^!ruby\/object:?(.*)?$/ name = $1 || 'Object' @@ -340,6 +366,20 @@ module Psych list end + def allocate_anon_data node, members + klass = class_loader.data.define(*members.keys) + register(node, klass.allocate) + end + + def revive_data_members hash, o + o.children.each_slice(2) do |k,v| + name = accept(k) + value = accept(v) + hash[class_loader.symbolize(name)] = value + end + hash + end + def revive_hash hash, o, tagged= false o.children.each_slice(2) { |k,v| key = accept(k) diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index a9476df96e..b6c86f4c94 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -73,7 +73,7 @@ module Psych method = respond_to?(method) ? method : h[klass.superclass] - raise(TypeError, "Can't dump #{target.class}") unless method + raise(TypeError, "can't dump #{klass.name}") unless method h[klass] = method end.compare_by_identity @@ -162,6 +162,44 @@ module Psych alias :visit_Delegator :visit_Object + def visit_Data o + ivars = o.instance_variables + if ivars.empty? + tag = ['!ruby/data', o.class.name].compact.join(':') + register o, @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK) + o.members.each do |member| + @emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY + accept o.send member + end + @emitter.end_mapping + + else + tag = ['!ruby/data-with-ivars', o.class.name].compact.join(':') + node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK) + register(o, node) + + # Dump the members + accept 'members' + @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK + o.members.each do |member| + @emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY + accept o.send member + end + @emitter.end_mapping + + # Dump the ivars + accept 'ivars' + @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK + ivars.each do |ivar| + accept ivar.to_s + accept o.instance_variable_get ivar + end + @emitter.end_mapping + + @emitter.end_mapping + end + end unless RUBY_VERSION < "3.2" + def visit_Struct o tag = ['!ruby/struct', o.class.name].compact.join(':') diff --git a/ext/psych/psych_to_ruby.c b/ext/psych/psych_to_ruby.c index ffe0c69c7f..d473a5f840 100644 --- a/ext/psych/psych_to_ruby.c +++ b/ext/psych/psych_to_ruby.c @@ -24,6 +24,15 @@ static VALUE path2class(VALUE self, VALUE path) return rb_path_to_class(path); } +static VALUE init_struct(VALUE self, VALUE data, VALUE attrs) +{ + VALUE args = rb_ary_new2(1); + rb_ary_push(args, attrs); + rb_struct_initialize(data, args); + + return data; +} + void Init_psych_to_ruby(void) { VALUE psych = rb_define_module("Psych"); @@ -33,6 +42,7 @@ void Init_psych_to_ruby(void) VALUE visitor = rb_define_class_under(visitors, "Visitor", rb_cObject); cPsychVisitorsToRuby = rb_define_class_under(visitors, "ToRuby", visitor); + rb_define_private_method(cPsychVisitorsToRuby, "init_struct", init_struct, 2); rb_define_private_method(cPsychVisitorsToRuby, "build_exception", build_exception, 2); rb_define_private_method(class_loader, "path2class", path2class, 1); } diff --git a/ext/pty/depend b/ext/pty/depend index adecfff862..688df7159c 100644 --- a/ext/pty/depend +++ b/ext/pty/depend @@ -172,6 +172,7 @@ pty.o: $(hdrdir)/ruby/ruby.h pty.o: $(hdrdir)/ruby/st.h pty.o: $(hdrdir)/ruby/subst.h pty.o: $(hdrdir)/ruby/util.h +pty.o: $(top_srcdir)/id_table.h pty.o: $(top_srcdir)/internal.h pty.o: $(top_srcdir)/internal/array.h pty.o: $(top_srcdir)/internal/compilers.h diff --git a/ext/ripper/depend b/ext/ripper/depend index 37cfc6eed8..410757875d 100644 --- a/ext/ripper/depend +++ b/ext/ripper/depend @@ -591,6 +591,7 @@ ripper.o: $(top_srcdir)/internal/gc.h ripper.o: $(top_srcdir)/internal/hash.h ripper.o: $(top_srcdir)/internal/imemo.h ripper.o: $(top_srcdir)/internal/io.h +ripper.o: $(top_srcdir)/internal/namespace.h ripper.o: $(top_srcdir)/internal/numeric.h ripper.o: $(top_srcdir)/internal/parse.h ripper.o: $(top_srcdir)/internal/rational.h diff --git a/ext/socket/depend b/ext/socket/depend index 74aa274c09..3b1ac216ff 100644 --- a/ext/socket/depend +++ b/ext/socket/depend @@ -192,6 +192,7 @@ ancdata.o: $(top_srcdir)/ccan/check_type/check_type.h ancdata.o: $(top_srcdir)/ccan/container_of/container_of.h ancdata.o: $(top_srcdir)/ccan/list/list.h ancdata.o: $(top_srcdir)/ccan/str/str.h +ancdata.o: $(top_srcdir)/id_table.h ancdata.o: $(top_srcdir)/internal.h ancdata.o: $(top_srcdir)/internal/array.h ancdata.o: $(top_srcdir)/internal/basic_operators.h @@ -200,6 +201,7 @@ ancdata.o: $(top_srcdir)/internal/error.h ancdata.o: $(top_srcdir)/internal/gc.h ancdata.o: $(top_srcdir)/internal/imemo.h ancdata.o: $(top_srcdir)/internal/io.h +ancdata.o: $(top_srcdir)/internal/namespace.h ancdata.o: $(top_srcdir)/internal/sanitizers.h ancdata.o: $(top_srcdir)/internal/serial.h ancdata.o: $(top_srcdir)/internal/set_table.h @@ -404,6 +406,7 @@ basicsocket.o: $(top_srcdir)/ccan/check_type/check_type.h basicsocket.o: $(top_srcdir)/ccan/container_of/container_of.h basicsocket.o: $(top_srcdir)/ccan/list/list.h basicsocket.o: $(top_srcdir)/ccan/str/str.h +basicsocket.o: $(top_srcdir)/id_table.h basicsocket.o: $(top_srcdir)/internal.h basicsocket.o: $(top_srcdir)/internal/array.h basicsocket.o: $(top_srcdir)/internal/basic_operators.h @@ -412,6 +415,7 @@ basicsocket.o: $(top_srcdir)/internal/error.h basicsocket.o: $(top_srcdir)/internal/gc.h basicsocket.o: $(top_srcdir)/internal/imemo.h basicsocket.o: $(top_srcdir)/internal/io.h +basicsocket.o: $(top_srcdir)/internal/namespace.h basicsocket.o: $(top_srcdir)/internal/sanitizers.h basicsocket.o: $(top_srcdir)/internal/serial.h basicsocket.o: $(top_srcdir)/internal/set_table.h @@ -616,6 +620,7 @@ constants.o: $(top_srcdir)/ccan/check_type/check_type.h constants.o: $(top_srcdir)/ccan/container_of/container_of.h constants.o: $(top_srcdir)/ccan/list/list.h constants.o: $(top_srcdir)/ccan/str/str.h +constants.o: $(top_srcdir)/id_table.h constants.o: $(top_srcdir)/internal.h constants.o: $(top_srcdir)/internal/array.h constants.o: $(top_srcdir)/internal/basic_operators.h @@ -624,6 +629,7 @@ constants.o: $(top_srcdir)/internal/error.h constants.o: $(top_srcdir)/internal/gc.h constants.o: $(top_srcdir)/internal/imemo.h constants.o: $(top_srcdir)/internal/io.h +constants.o: $(top_srcdir)/internal/namespace.h constants.o: $(top_srcdir)/internal/sanitizers.h constants.o: $(top_srcdir)/internal/serial.h constants.o: $(top_srcdir)/internal/set_table.h @@ -829,6 +835,7 @@ ifaddr.o: $(top_srcdir)/ccan/check_type/check_type.h ifaddr.o: $(top_srcdir)/ccan/container_of/container_of.h ifaddr.o: $(top_srcdir)/ccan/list/list.h ifaddr.o: $(top_srcdir)/ccan/str/str.h +ifaddr.o: $(top_srcdir)/id_table.h ifaddr.o: $(top_srcdir)/internal.h ifaddr.o: $(top_srcdir)/internal/array.h ifaddr.o: $(top_srcdir)/internal/basic_operators.h @@ -837,6 +844,7 @@ ifaddr.o: $(top_srcdir)/internal/error.h ifaddr.o: $(top_srcdir)/internal/gc.h ifaddr.o: $(top_srcdir)/internal/imemo.h ifaddr.o: $(top_srcdir)/internal/io.h +ifaddr.o: $(top_srcdir)/internal/namespace.h ifaddr.o: $(top_srcdir)/internal/sanitizers.h ifaddr.o: $(top_srcdir)/internal/serial.h ifaddr.o: $(top_srcdir)/internal/set_table.h @@ -1041,6 +1049,7 @@ init.o: $(top_srcdir)/ccan/check_type/check_type.h init.o: $(top_srcdir)/ccan/container_of/container_of.h init.o: $(top_srcdir)/ccan/list/list.h init.o: $(top_srcdir)/ccan/str/str.h +init.o: $(top_srcdir)/id_table.h init.o: $(top_srcdir)/internal.h init.o: $(top_srcdir)/internal/array.h init.o: $(top_srcdir)/internal/basic_operators.h @@ -1049,6 +1058,7 @@ init.o: $(top_srcdir)/internal/error.h init.o: $(top_srcdir)/internal/gc.h init.o: $(top_srcdir)/internal/imemo.h init.o: $(top_srcdir)/internal/io.h +init.o: $(top_srcdir)/internal/namespace.h init.o: $(top_srcdir)/internal/sanitizers.h init.o: $(top_srcdir)/internal/serial.h init.o: $(top_srcdir)/internal/set_table.h @@ -1253,6 +1263,7 @@ ipsocket.o: $(top_srcdir)/ccan/check_type/check_type.h ipsocket.o: $(top_srcdir)/ccan/container_of/container_of.h ipsocket.o: $(top_srcdir)/ccan/list/list.h ipsocket.o: $(top_srcdir)/ccan/str/str.h +ipsocket.o: $(top_srcdir)/id_table.h ipsocket.o: $(top_srcdir)/internal.h ipsocket.o: $(top_srcdir)/internal/array.h ipsocket.o: $(top_srcdir)/internal/basic_operators.h @@ -1261,6 +1272,7 @@ ipsocket.o: $(top_srcdir)/internal/error.h ipsocket.o: $(top_srcdir)/internal/gc.h ipsocket.o: $(top_srcdir)/internal/imemo.h ipsocket.o: $(top_srcdir)/internal/io.h +ipsocket.o: $(top_srcdir)/internal/namespace.h ipsocket.o: $(top_srcdir)/internal/sanitizers.h ipsocket.o: $(top_srcdir)/internal/serial.h ipsocket.o: $(top_srcdir)/internal/set_table.h @@ -1465,6 +1477,7 @@ option.o: $(top_srcdir)/ccan/check_type/check_type.h option.o: $(top_srcdir)/ccan/container_of/container_of.h option.o: $(top_srcdir)/ccan/list/list.h option.o: $(top_srcdir)/ccan/str/str.h +option.o: $(top_srcdir)/id_table.h option.o: $(top_srcdir)/internal.h option.o: $(top_srcdir)/internal/array.h option.o: $(top_srcdir)/internal/basic_operators.h @@ -1473,6 +1486,7 @@ option.o: $(top_srcdir)/internal/error.h option.o: $(top_srcdir)/internal/gc.h option.o: $(top_srcdir)/internal/imemo.h option.o: $(top_srcdir)/internal/io.h +option.o: $(top_srcdir)/internal/namespace.h option.o: $(top_srcdir)/internal/sanitizers.h option.o: $(top_srcdir)/internal/serial.h option.o: $(top_srcdir)/internal/set_table.h @@ -1677,6 +1691,7 @@ raddrinfo.o: $(top_srcdir)/ccan/check_type/check_type.h raddrinfo.o: $(top_srcdir)/ccan/container_of/container_of.h raddrinfo.o: $(top_srcdir)/ccan/list/list.h raddrinfo.o: $(top_srcdir)/ccan/str/str.h +raddrinfo.o: $(top_srcdir)/id_table.h raddrinfo.o: $(top_srcdir)/internal.h raddrinfo.o: $(top_srcdir)/internal/array.h raddrinfo.o: $(top_srcdir)/internal/basic_operators.h @@ -1685,6 +1700,7 @@ raddrinfo.o: $(top_srcdir)/internal/error.h raddrinfo.o: $(top_srcdir)/internal/gc.h raddrinfo.o: $(top_srcdir)/internal/imemo.h raddrinfo.o: $(top_srcdir)/internal/io.h +raddrinfo.o: $(top_srcdir)/internal/namespace.h raddrinfo.o: $(top_srcdir)/internal/sanitizers.h raddrinfo.o: $(top_srcdir)/internal/serial.h raddrinfo.o: $(top_srcdir)/internal/set_table.h @@ -1889,6 +1905,7 @@ socket.o: $(top_srcdir)/ccan/check_type/check_type.h socket.o: $(top_srcdir)/ccan/container_of/container_of.h socket.o: $(top_srcdir)/ccan/list/list.h socket.o: $(top_srcdir)/ccan/str/str.h +socket.o: $(top_srcdir)/id_table.h socket.o: $(top_srcdir)/internal.h socket.o: $(top_srcdir)/internal/array.h socket.o: $(top_srcdir)/internal/basic_operators.h @@ -1897,6 +1914,7 @@ socket.o: $(top_srcdir)/internal/error.h socket.o: $(top_srcdir)/internal/gc.h socket.o: $(top_srcdir)/internal/imemo.h socket.o: $(top_srcdir)/internal/io.h +socket.o: $(top_srcdir)/internal/namespace.h socket.o: $(top_srcdir)/internal/sanitizers.h socket.o: $(top_srcdir)/internal/serial.h socket.o: $(top_srcdir)/internal/set_table.h @@ -2101,6 +2119,7 @@ sockssocket.o: $(top_srcdir)/ccan/check_type/check_type.h sockssocket.o: $(top_srcdir)/ccan/container_of/container_of.h sockssocket.o: $(top_srcdir)/ccan/list/list.h sockssocket.o: $(top_srcdir)/ccan/str/str.h +sockssocket.o: $(top_srcdir)/id_table.h sockssocket.o: $(top_srcdir)/internal.h sockssocket.o: $(top_srcdir)/internal/array.h sockssocket.o: $(top_srcdir)/internal/basic_operators.h @@ -2109,6 +2128,7 @@ sockssocket.o: $(top_srcdir)/internal/error.h sockssocket.o: $(top_srcdir)/internal/gc.h sockssocket.o: $(top_srcdir)/internal/imemo.h sockssocket.o: $(top_srcdir)/internal/io.h +sockssocket.o: $(top_srcdir)/internal/namespace.h sockssocket.o: $(top_srcdir)/internal/sanitizers.h sockssocket.o: $(top_srcdir)/internal/serial.h sockssocket.o: $(top_srcdir)/internal/set_table.h @@ -2313,6 +2333,7 @@ tcpserver.o: $(top_srcdir)/ccan/check_type/check_type.h tcpserver.o: $(top_srcdir)/ccan/container_of/container_of.h tcpserver.o: $(top_srcdir)/ccan/list/list.h tcpserver.o: $(top_srcdir)/ccan/str/str.h +tcpserver.o: $(top_srcdir)/id_table.h tcpserver.o: $(top_srcdir)/internal.h tcpserver.o: $(top_srcdir)/internal/array.h tcpserver.o: $(top_srcdir)/internal/basic_operators.h @@ -2321,6 +2342,7 @@ tcpserver.o: $(top_srcdir)/internal/error.h tcpserver.o: $(top_srcdir)/internal/gc.h tcpserver.o: $(top_srcdir)/internal/imemo.h tcpserver.o: $(top_srcdir)/internal/io.h +tcpserver.o: $(top_srcdir)/internal/namespace.h tcpserver.o: $(top_srcdir)/internal/sanitizers.h tcpserver.o: $(top_srcdir)/internal/serial.h tcpserver.o: $(top_srcdir)/internal/set_table.h @@ -2525,6 +2547,7 @@ tcpsocket.o: $(top_srcdir)/ccan/check_type/check_type.h tcpsocket.o: $(top_srcdir)/ccan/container_of/container_of.h tcpsocket.o: $(top_srcdir)/ccan/list/list.h tcpsocket.o: $(top_srcdir)/ccan/str/str.h +tcpsocket.o: $(top_srcdir)/id_table.h tcpsocket.o: $(top_srcdir)/internal.h tcpsocket.o: $(top_srcdir)/internal/array.h tcpsocket.o: $(top_srcdir)/internal/basic_operators.h @@ -2533,6 +2556,7 @@ tcpsocket.o: $(top_srcdir)/internal/error.h tcpsocket.o: $(top_srcdir)/internal/gc.h tcpsocket.o: $(top_srcdir)/internal/imemo.h tcpsocket.o: $(top_srcdir)/internal/io.h +tcpsocket.o: $(top_srcdir)/internal/namespace.h tcpsocket.o: $(top_srcdir)/internal/sanitizers.h tcpsocket.o: $(top_srcdir)/internal/serial.h tcpsocket.o: $(top_srcdir)/internal/set_table.h @@ -2737,6 +2761,7 @@ udpsocket.o: $(top_srcdir)/ccan/check_type/check_type.h udpsocket.o: $(top_srcdir)/ccan/container_of/container_of.h udpsocket.o: $(top_srcdir)/ccan/list/list.h udpsocket.o: $(top_srcdir)/ccan/str/str.h +udpsocket.o: $(top_srcdir)/id_table.h udpsocket.o: $(top_srcdir)/internal.h udpsocket.o: $(top_srcdir)/internal/array.h udpsocket.o: $(top_srcdir)/internal/basic_operators.h @@ -2745,6 +2770,7 @@ udpsocket.o: $(top_srcdir)/internal/error.h udpsocket.o: $(top_srcdir)/internal/gc.h udpsocket.o: $(top_srcdir)/internal/imemo.h udpsocket.o: $(top_srcdir)/internal/io.h +udpsocket.o: $(top_srcdir)/internal/namespace.h udpsocket.o: $(top_srcdir)/internal/sanitizers.h udpsocket.o: $(top_srcdir)/internal/serial.h udpsocket.o: $(top_srcdir)/internal/set_table.h @@ -2949,6 +2975,7 @@ unixserver.o: $(top_srcdir)/ccan/check_type/check_type.h unixserver.o: $(top_srcdir)/ccan/container_of/container_of.h unixserver.o: $(top_srcdir)/ccan/list/list.h unixserver.o: $(top_srcdir)/ccan/str/str.h +unixserver.o: $(top_srcdir)/id_table.h unixserver.o: $(top_srcdir)/internal.h unixserver.o: $(top_srcdir)/internal/array.h unixserver.o: $(top_srcdir)/internal/basic_operators.h @@ -2957,6 +2984,7 @@ unixserver.o: $(top_srcdir)/internal/error.h unixserver.o: $(top_srcdir)/internal/gc.h unixserver.o: $(top_srcdir)/internal/imemo.h unixserver.o: $(top_srcdir)/internal/io.h +unixserver.o: $(top_srcdir)/internal/namespace.h unixserver.o: $(top_srcdir)/internal/sanitizers.h unixserver.o: $(top_srcdir)/internal/serial.h unixserver.o: $(top_srcdir)/internal/set_table.h @@ -3161,6 +3189,7 @@ unixsocket.o: $(top_srcdir)/ccan/check_type/check_type.h unixsocket.o: $(top_srcdir)/ccan/container_of/container_of.h unixsocket.o: $(top_srcdir)/ccan/list/list.h unixsocket.o: $(top_srcdir)/ccan/str/str.h +unixsocket.o: $(top_srcdir)/id_table.h unixsocket.o: $(top_srcdir)/internal.h unixsocket.o: $(top_srcdir)/internal/array.h unixsocket.o: $(top_srcdir)/internal/basic_operators.h @@ -3169,6 +3198,7 @@ unixsocket.o: $(top_srcdir)/internal/error.h unixsocket.o: $(top_srcdir)/internal/gc.h unixsocket.o: $(top_srcdir)/internal/imemo.h unixsocket.o: $(top_srcdir)/internal/io.h +unixsocket.o: $(top_srcdir)/internal/namespace.h unixsocket.o: $(top_srcdir)/internal/sanitizers.h unixsocket.o: $(top_srcdir)/internal/serial.h unixsocket.o: $(top_srcdir)/internal/set_table.h diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c index 4dfd9c8a56..da42fbd27b 100644 --- a/ext/socket/ipsocket.c +++ b/ext/socket/ipsocket.c @@ -1159,13 +1159,19 @@ fast_fallback_inetsock_cleanup(VALUE v) getaddrinfo_shared->notify = -1; int shared_need_free = 0; - int need_free[2] = { 0, 0 }; + struct addrinfo *ais[arg->family_size]; + for (int i = 0; i < arg->family_size; i++) ais[i] = NULL; rb_nativethread_lock_lock(&getaddrinfo_shared->lock); { for (int i = 0; i < arg->family_size; i++) { - if (arg->getaddrinfo_entries[i] && --(arg->getaddrinfo_entries[i]->refcount) == 0) { - need_free[i] = 1; + struct fast_fallback_getaddrinfo_entry *getaddrinfo_entry = arg->getaddrinfo_entries[i]; + + if (!getaddrinfo_entry) continue; + + if (--(getaddrinfo_entry->refcount) == 0) { + ais[i] = getaddrinfo_entry->ai; + getaddrinfo_entry->ai = NULL; } } if (--(getaddrinfo_shared->refcount) == 0) { @@ -1175,9 +1181,7 @@ fast_fallback_inetsock_cleanup(VALUE v) rb_nativethread_lock_unlock(&getaddrinfo_shared->lock); for (int i = 0; i < arg->family_size; i++) { - if (arg->getaddrinfo_entries[i] && need_free[i]) { - free_fast_fallback_getaddrinfo_entry(&arg->getaddrinfo_entries[i]); - } + if (ais[i]) freeaddrinfo(ais[i]); } if (getaddrinfo_shared && shared_need_free) { free_fast_fallback_getaddrinfo_shared(&getaddrinfo_shared); diff --git a/ext/socket/lib/socket.rb b/ext/socket/lib/socket.rb index 60dd45bd4f..7c3f6f5b91 100644 --- a/ext/socket/lib/socket.rb +++ b/ext/socket/lib/socket.rb @@ -643,6 +643,7 @@ class Socket < BasicSocket # # [:resolv_timeout] Specifies the timeout in seconds from when the hostname resolution starts. # [:connect_timeout] This method sequentially attempts connecting to all candidate destination addresses.<br>The +connect_timeout+ specifies the timeout in seconds from the start of the connection attempt to the last candidate.<br>By default, all connection attempts continue until the timeout occurs.<br>When +fast_fallback:false+ is explicitly specified,<br>a timeout is set for each connection attempt and any connection attempt that exceeds its timeout will be canceled. + # [:open_timeout] Specifies the timeout in seconds from the start of the method execution.<br>If this timeout is reached while there are still addresses that have not yet been attempted for connection, no further attempts will be made. # [:fast_fallback] Enables the Happy Eyeballs Version 2 algorithm (enabled by default). # # If a block is given, the block is called with the socket. @@ -656,11 +657,16 @@ class Socket < BasicSocket # sock.close_write # puts sock.read # } - def self.tcp(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, fast_fallback: tcp_fast_fallback, &) # :yield: socket + def self.tcp(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, open_timeout: nil, fast_fallback: tcp_fast_fallback, &) # :yield: socket + + if open_timeout && (connect_timeout || resolv_timeout) + raise ArgumentError, "Cannot specify open_timeout along with connect_timeout or resolv_timeout" + end + sock = if fast_fallback && !(host && ip_address?(host)) - tcp_with_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:) + tcp_with_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, open_timeout:) else - tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:) + tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, open_timeout:) end if block_given? @@ -674,7 +680,7 @@ class Socket < BasicSocket end end - def self.tcp_with_fast_fallback(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil) + def self.tcp_with_fast_fallback(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, open_timeout: nil) if local_host || local_port local_addrinfos = Addrinfo.getaddrinfo(local_host, local_port, nil, :STREAM, timeout: resolv_timeout) resolving_family_names = local_addrinfos.map { |lai| ADDRESS_FAMILIES.key(lai.afamily) }.uniq @@ -692,6 +698,7 @@ class Socket < BasicSocket resolution_delay_expires_at = nil connection_attempt_delay_expires_at = nil user_specified_connect_timeout_at = nil + user_specified_open_timeout_at = open_timeout ? now + open_timeout : nil last_error = nil last_error_from_thread = false @@ -784,7 +791,10 @@ class Socket < BasicSocket ends_at = if resolution_store.any_addrinfos? - resolution_delay_expires_at || connection_attempt_delay_expires_at + [(resolution_delay_expires_at || connection_attempt_delay_expires_at), + user_specified_open_timeout_at].compact.min + elsif user_specified_open_timeout_at + user_specified_open_timeout_at else [user_specified_resolv_timeout_at, user_specified_connect_timeout_at].compact.max end @@ -885,6 +895,8 @@ class Socket < BasicSocket end end + raise(Errno::ETIMEDOUT, 'user specified timeout') if expired?(now, user_specified_open_timeout_at) + if resolution_store.empty_addrinfos? if connecting_sockets.empty? && resolution_store.resolved_all_families? if last_error_from_thread @@ -912,7 +924,7 @@ class Socket < BasicSocket end end - def self.tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:) + def self.tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, open_timeout:) last_error = nil ret = nil @@ -921,7 +933,10 @@ class Socket < BasicSocket local_addr_list = Addrinfo.getaddrinfo(local_host, local_port, nil, :STREAM, nil) end - Addrinfo.foreach(host, port, nil, :STREAM, timeout: resolv_timeout) {|ai| + timeout = open_timeout ? open_timeout : resolv_timeout + starts_at = current_clock_time + + Addrinfo.foreach(host, port, nil, :STREAM, timeout:) {|ai| if local_addr_list local_addr = local_addr_list.find {|local_ai| local_ai.afamily == ai.afamily } next unless local_addr @@ -929,9 +944,10 @@ class Socket < BasicSocket local_addr = nil end begin + timeout = open_timeout ? open_timeout - (current_clock_time - starts_at) : connect_timeout sock = local_addr ? - ai.connect_from(local_addr, timeout: connect_timeout) : - ai.connect(timeout: connect_timeout) + ai.connect_from(local_addr, timeout:) : + ai.connect(timeout:) rescue SystemCallError last_error = $! next diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c index ac47b5b256..fa98cc9c80 100644 --- a/ext/socket/raddrinfo.c +++ b/ext/socket/raddrinfo.c @@ -715,7 +715,7 @@ rb_getnameinfo(const struct sockaddr *sa, socklen_t salen, { int retry; struct getnameinfo_arg *arg; - int err, gni_errno = 0; + int err = 0, gni_errno = 0; start: retry = 0; @@ -1211,6 +1211,7 @@ addrinfo_memsize(const void *ptr) static const rb_data_type_t addrinfo_type = { "socket/addrinfo", {addrinfo_mark, addrinfo_free, addrinfo_memsize,}, + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE | RUBY_TYPED_WB_PROTECTED, }; static VALUE @@ -1248,7 +1249,7 @@ alloc_addrinfo(void) } static void -init_addrinfo(rb_addrinfo_t *rai, struct sockaddr *sa, socklen_t len, +init_addrinfo(VALUE self, rb_addrinfo_t *rai, struct sockaddr *sa, socklen_t len, int pfamily, int socktype, int protocol, VALUE canonname, VALUE inspectname) { @@ -1260,8 +1261,8 @@ init_addrinfo(rb_addrinfo_t *rai, struct sockaddr *sa, socklen_t len, rai->pfamily = pfamily; rai->socktype = socktype; rai->protocol = protocol; - rai->canonname = canonname; - rai->inspectname = inspectname; + RB_OBJ_WRITE(self, &rai->canonname, canonname); + RB_OBJ_WRITE(self, &rai->inspectname, inspectname); } VALUE @@ -1274,7 +1275,7 @@ rsock_addrinfo_new(struct sockaddr *addr, socklen_t len, a = addrinfo_s_allocate(rb_cAddrinfo); DATA_PTR(a) = rai = alloc_addrinfo(); - init_addrinfo(rai, addr, len, family, socktype, protocol, canonname, inspectname); + init_addrinfo(a, rai, addr, len, family, socktype, protocol, canonname, inspectname); return a; } @@ -1309,7 +1310,7 @@ call_getaddrinfo(VALUE node, VALUE service, static VALUE make_inspectname(VALUE node, VALUE service, struct addrinfo *res); static void -init_addrinfo_getaddrinfo(rb_addrinfo_t *rai, VALUE node, VALUE service, +init_addrinfo_getaddrinfo(VALUE self, rb_addrinfo_t *rai, VALUE node, VALUE service, VALUE family, VALUE socktype, VALUE protocol, VALUE flags, VALUE inspectnode, VALUE inspectservice) { @@ -1323,7 +1324,7 @@ init_addrinfo_getaddrinfo(rb_addrinfo_t *rai, VALUE node, VALUE service, OBJ_FREEZE(canonname); } - init_addrinfo(rai, res->ai->ai_addr, res->ai->ai_addrlen, + init_addrinfo(self, rai, res->ai->ai_addr, res->ai->ai_addrlen, NUM2INT(family), NUM2INT(socktype), NUM2INT(protocol), canonname, inspectname); @@ -1435,7 +1436,7 @@ addrinfo_list_new(VALUE node, VALUE service, VALUE family, VALUE socktype, VALUE #ifdef HAVE_TYPE_STRUCT_SOCKADDR_UN static void -init_unix_addrinfo(rb_addrinfo_t *rai, VALUE path, int socktype) +init_unix_addrinfo(VALUE self, rb_addrinfo_t *rai, VALUE path, int socktype) { struct sockaddr_un un; socklen_t len; @@ -1451,7 +1452,7 @@ init_unix_addrinfo(rb_addrinfo_t *rai, VALUE path, int socktype) memcpy((void*)&un.sun_path, RSTRING_PTR(path), RSTRING_LEN(path)); len = rsock_unix_sockaddr_len(path); - init_addrinfo(rai, (struct sockaddr *)&un, len, + init_addrinfo(self, rai, (struct sockaddr *)&un, len, PF_UNIX, socktype, 0, Qnil, Qnil); } @@ -1555,7 +1556,7 @@ addrinfo_initialize(int argc, VALUE *argv, VALUE self) flags |= AI_NUMERICSERV; #endif - init_addrinfo_getaddrinfo(rai, numericnode, service, + init_addrinfo_getaddrinfo(self, rai, numericnode, service, INT2NUM(i_pfamily ? i_pfamily : af), INT2NUM(i_socktype), INT2NUM(i_protocol), INT2NUM(flags), nodename, service); @@ -1567,7 +1568,7 @@ addrinfo_initialize(int argc, VALUE *argv, VALUE self) { VALUE path = rb_ary_entry(sockaddr_ary, 1); StringValue(path); - init_unix_addrinfo(rai, path, SOCK_STREAM); + init_unix_addrinfo(self, rai, path, SOCK_STREAM); break; } #endif @@ -1580,7 +1581,7 @@ addrinfo_initialize(int argc, VALUE *argv, VALUE self) StringValue(sockaddr_arg); sockaddr_ptr = (struct sockaddr *)RSTRING_PTR(sockaddr_arg); sockaddr_len = RSTRING_SOCKLEN(sockaddr_arg); - init_addrinfo(rai, sockaddr_ptr, sockaddr_len, + init_addrinfo(self, rai, sockaddr_ptr, sockaddr_len, i_pfamily, i_socktype, i_protocol, canonname, inspectname); } @@ -2169,7 +2170,7 @@ addrinfo_mload(VALUE self, VALUE ary) } DATA_PTR(self) = rai = alloc_addrinfo(); - init_addrinfo(rai, &ss.addr, len, + init_addrinfo(self, rai, &ss.addr, len, pfamily, socktype, protocol, canonname, inspectname); return self; @@ -2937,7 +2938,7 @@ addrinfo_s_unix(int argc, VALUE *argv, VALUE self) addr = addrinfo_s_allocate(rb_cAddrinfo); DATA_PTR(addr) = rai = alloc_addrinfo(); - init_unix_addrinfo(rai, path, socktype); + init_unix_addrinfo(self, rai, path, socktype); return addr; } @@ -3038,22 +3039,13 @@ free_fast_fallback_getaddrinfo_shared(struct fast_fallback_getaddrinfo_shared ** *shared = NULL; } -void -free_fast_fallback_getaddrinfo_entry(struct fast_fallback_getaddrinfo_entry **entry) -{ - if ((*entry)->ai) { - freeaddrinfo((*entry)->ai); - (*entry)->ai = NULL; - } - *entry = NULL; -} - static void * do_fast_fallback_getaddrinfo(void *ptr) { struct fast_fallback_getaddrinfo_entry *entry = (struct fast_fallback_getaddrinfo_entry *)ptr; struct fast_fallback_getaddrinfo_shared *shared = entry->shared; - int err = 0, need_free = 0, shared_need_free = 0; + int err = 0, shared_need_free = 0; + struct addrinfo *ai = NULL; sigset_t set; sigemptyset(&set); @@ -3102,14 +3094,15 @@ do_fast_fallback_getaddrinfo(void *ptr) entry->err = errno; entry->has_syserr = true; } - if (--(entry->refcount) == 0) need_free = 1; + if (--(entry->refcount) == 0) { + ai = entry->ai; + entry->ai = NULL; + } if (--(shared->refcount) == 0) shared_need_free = 1; } rb_nativethread_lock_unlock(&shared->lock); - if (need_free && entry) { - free_fast_fallback_getaddrinfo_entry(&entry); - } + if (ai) freeaddrinfo(ai); if (shared_need_free && shared) { free_fast_fallback_getaddrinfo_shared(&shared); } diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h index 54a5381da4..dcafbe24e3 100644 --- a/ext/socket/rubysocket.h +++ b/ext/socket/rubysocket.h @@ -292,8 +292,8 @@ extern VALUE rb_eResolution; #ifdef SOCKS extern VALUE rb_cSOCKSSocket; # ifndef SOCKS5 -void SOCKSinit(); -int Rconnect(); +void SOCKSinit(char *); +int Rconnect(int, const struct sockaddr *, socklen_t); # endif #endif diff --git a/ext/stringio/depend b/ext/stringio/depend index b9fba7e9fa..9a8979829b 100644 --- a/ext/stringio/depend +++ b/ext/stringio/depend @@ -171,5 +171,6 @@ stringio.o: $(hdrdir)/ruby/oniguruma.h stringio.o: $(hdrdir)/ruby/ruby.h stringio.o: $(hdrdir)/ruby/st.h stringio.o: $(hdrdir)/ruby/subst.h +stringio.o: $(hdrdir)/ruby/version.h stringio.o: stringio.c # AUTOGENERATED DEPENDENCIES END diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index dd23daa776..3003939e10 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -20,6 +20,7 @@ STRINGIO_VERSION = "3.1.8.dev"; #include "ruby.h" #include "ruby/io.h" #include "ruby/encoding.h" +#include "ruby/version.h" #if defined(HAVE_FCNTL_H) || defined(_WIN32) #include <fcntl.h> #elif defined(HAVE_SYS_FCNTL_H) @@ -35,6 +36,19 @@ STRINGIO_VERSION = "3.1.8.dev"; # define rb_class_new_instance_kw(argc, argv, klass, kw_splat) rb_class_new_instance(argc, argv, klass) #endif +static inline bool +str_chilled_p(VALUE str) +{ +#if (RUBY_API_VERSION_MAJOR == 3 && RUBY_API_VERSION_MINOR >= 4) || RUBY_API_VERSION_MAJOR >= 4 + // Do not attempt to modify chilled strings on Ruby 3.4+ + // RUBY_FL_USER2 == STR_CHILLED_LITERAL + // RUBY_FL_USER3 == STR_CHILLED_SYMBOL_TO_S + return FL_TEST_RAW(str, RUBY_FL_USER2 | RUBY_FL_USER3); +#else + return false; +#endif +} + #ifndef HAVE_TYPE_RB_IO_MODE_T typedef int rb_io_mode_t; #endif @@ -1864,7 +1878,7 @@ strio_set_encoding(int argc, VALUE *argv, VALUE self) } } ptr->enc = enc; - if (!NIL_P(ptr->string) && WRITABLE(self)) { + if (!NIL_P(ptr->string) && WRITABLE(self) && !str_chilled_p(ptr->string)) { rb_enc_associate(ptr->string, enc); } diff --git a/ext/strscan/extconf.rb b/ext/strscan/extconf.rb index bd65606a4e..3c311d2364 100644 --- a/ext/strscan/extconf.rb +++ b/ext/strscan/extconf.rb @@ -2,8 +2,8 @@ require 'mkmf' if RUBY_ENGINE == 'ruby' $INCFLAGS << " -I$(top_srcdir)" if $extmk - have_func("onig_region_memsize", "ruby.h") - have_func("rb_reg_onig_match", "ruby.h") + have_func("onig_region_memsize(NULL)") + have_func("rb_reg_onig_match", "ruby/re.h") create_makefile 'strscan' else File.write('Makefile', dummy_makefile("").join) diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c index 5a6446adb3..bc543f62b1 100644 --- a/ext/strscan/strscan.c +++ b/ext/strscan/strscan.c @@ -22,7 +22,7 @@ extern size_t onig_region_memsize(const struct re_registers *regs); #include <stdbool.h> -#define STRSCAN_VERSION "3.1.4.dev" +#define STRSCAN_VERSION "3.1.6.dev" /* ======================================================================= Data Type Definitions @@ -209,7 +209,7 @@ strscan_memsize(const void *ptr) static const rb_data_type_t strscanner_type = { "StringScanner", {strscan_mark, strscan_free, strscan_memsize}, - 0, 0, RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED }; static VALUE @@ -273,7 +273,7 @@ strscan_initialize(int argc, VALUE *argv, VALUE self) p->fixed_anchor_p = false; } StringValue(str); - p->str = str; + RB_OBJ_WRITE(self, &p->str, str); return self; } @@ -303,7 +303,7 @@ strscan_init_copy(VALUE vself, VALUE vorig) orig = check_strscan(vorig); if (self != orig) { self->flags = orig->flags; - self->str = orig->str; + RB_OBJ_WRITE(vself, &self->str, orig->str); self->prev = orig->prev; self->curr = orig->curr; if (rb_reg_region_copy(&self->regs, &orig->regs)) @@ -467,7 +467,7 @@ strscan_set_string(VALUE self, VALUE str) struct strscanner *p = check_strscan(self); StringValue(str); - p->str = str; + RB_OBJ_WRITE(self, &p->str, str); p->curr = 0; CLEAR_MATCH_STATUS(p); return str; @@ -712,7 +712,7 @@ strscan_do_scan(VALUE self, VALUE pattern, int succptr, int getstr, int headonly if (RB_TYPE_P(pattern, T_REGEXP)) { OnigPosition ret; - p->regex = pattern; + RB_OBJ_WRITE(self, &p->regex, pattern); ret = rb_reg_onig_match(p->regex, p->str, headonly ? strscan_match : strscan_search, @@ -2211,7 +2211,10 @@ named_captures_iter(const OnigUChar *name, VALUE value = RUBY_Qnil; int i; for (i = 0; i < back_num; i++) { - value = strscan_aref(data->self, INT2NUM(back_refs[i])); + VALUE v = strscan_aref(data->self, INT2NUM(back_refs[i])); + if (!RB_NIL_P(v)) { + value = v; + } } rb_hash_aset(data->captures, key, value); return 0; diff --git a/ext/win32/lib/win32/registry.rb b/ext/win32/lib/win32/registry.rb index d0cbb6afcf..8e2c8b2e1a 100644 --- a/ext/win32/lib/win32/registry.rb +++ b/ext/win32/lib/win32/registry.rb @@ -372,7 +372,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr # Replace %\w+% into the environment value of what is contained between the %'s # This method is used for REG_EXPAND_SZ. # - # For detail, see expandEnvironmentStrings[http://msdn.microsoft.com/library/en-us/sysinfo/base/expandenvironmentstrings.asp] \Win32 \API. + # For detail, see expandEnvironmentStrings[https://learn.microsoft.com/en-us/windows/win32/api/processenv/nf-processenv-expandenvironmentstringsa] \Win32 \API. # def self.expand_environ(str) str.gsub(Regexp.compile("%([^%]+)%".encode(str.encoding))) { @@ -487,7 +487,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr ObjectSpace.define_finalizer self, @@final.call(@hkeyfinal) end - # Win32::Registry object of parent key, or nil if predefeined key. + # Win32::Registry object of parent key, or nil if predefined key. attr_reader :parent # Same as subkey value of Registry.open or # Registry.create method. @@ -571,7 +571,7 @@ For detail, see the MSDN[http://msdn.microsoft.com/library/en-us/sysinfo/base/pr # For each value it yields key, type and data. # # key is a String which contains name of key. - # type is a type contant kind of Win32::Registry::REG_* + # type is a type constant kind of Win32::Registry::REG_* # data is the value of this key. # def each_value |