From e6f991580fb2611345a63c448dc11d65909fb2ed Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Sat, 16 Jan 2016 18:32:00 -0500 Subject: [PATCH 01/11] Moving forward --- .gitignore | 2 + LICENSE.txt | 4 +- README.md | 2 +- Rakefile | 36 +- examples/README.md | 3 - examples/serial_port_adapter.rb | 97 -- ext/rs_232/Makefile | 239 +++ ext/rs_232/{initializer.c => Rs232.cpp} | 254 ++- ext/rs_232/{initializer.h => Rs232.h} | 81 +- ext/rs_232/constants.c | 67 +- ext/rs_232/constants.h | 144 +- ext/rs_232/extconf.rb | 16 +- ext/rs_232/posix/port.c | 240 ++- ext/rs_232/posix/port.h | 69 +- ext/rs_232/structs.h | 83 +- ext/rs_232/windows/port.c | 201 ++- ext/rs_232/windows/port.h | 69 +- lib/rs_232.rb | 96 +- lib/rs_232/version.rb | 2 +- lib/tasks/clean.rake | 3 - lib/tasks/compile.rake | 6 - lib/tasks/cov.rake | 5 - lib/tasks/cucumber.rake | 5 - lib/tasks/rspec.rake | 7 - rs_232.gemspec | 22 +- script/console | 8 +- spec/fixtures/test.txt | 1 + spec/lib/constants_spec.rb | 17 + vendor/ruby.h | 35 + vendor/ruby/backward/classext.h | 18 + vendor/ruby/backward/rubyio.h | 6 + vendor/ruby/backward/rubysig.h | 52 + vendor/ruby/backward/st.h | 6 + vendor/ruby/backward/util.h | 6 + vendor/ruby/debug.h | 110 ++ vendor/ruby/defines.h | 324 ++++ vendor/ruby/digest.h | 32 + vendor/ruby/encoding.h | 363 +++++ vendor/ruby/intern.h | 956 ++++++++++++ vendor/ruby/io.h | 214 +++ vendor/ruby/missing.h | 244 +++ vendor/ruby/oniguruma.h | 835 ++++++++++ vendor/ruby/re.h | 71 + vendor/ruby/regex.h | 46 + vendor/ruby/ruby.h | 1872 +++++++++++++++++++++++ vendor/ruby/st.h | 154 ++ vendor/ruby/subst.h | 19 + vendor/ruby/thread.h | 45 + vendor/ruby/util.h | 95 ++ vendor/ruby/version.h | 74 + vendor/ruby/vm.h | 64 + vendor/x86_64-darwin13.0/ruby/config.h | 326 ++++ 52 files changed, 6957 insertions(+), 789 deletions(-) delete mode 100644 examples/README.md delete mode 100644 examples/serial_port_adapter.rb create mode 100644 ext/rs_232/Makefile rename ext/rs_232/{initializer.c => Rs232.cpp} (68%) rename ext/rs_232/{initializer.h => Rs232.h} (54%) delete mode 100644 lib/tasks/clean.rake delete mode 100644 lib/tasks/compile.rake delete mode 100644 lib/tasks/cov.rake delete mode 100644 lib/tasks/cucumber.rake delete mode 100644 lib/tasks/rspec.rake create mode 100644 spec/fixtures/test.txt create mode 100644 spec/lib/constants_spec.rb create mode 100644 vendor/ruby.h create mode 100644 vendor/ruby/backward/classext.h create mode 100644 vendor/ruby/backward/rubyio.h create mode 100644 vendor/ruby/backward/rubysig.h create mode 100644 vendor/ruby/backward/st.h create mode 100644 vendor/ruby/backward/util.h create mode 100644 vendor/ruby/debug.h create mode 100644 vendor/ruby/defines.h create mode 100644 vendor/ruby/digest.h create mode 100644 vendor/ruby/encoding.h create mode 100644 vendor/ruby/intern.h create mode 100644 vendor/ruby/io.h create mode 100644 vendor/ruby/missing.h create mode 100644 vendor/ruby/oniguruma.h create mode 100644 vendor/ruby/re.h create mode 100644 vendor/ruby/regex.h create mode 100644 vendor/ruby/ruby.h create mode 100644 vendor/ruby/st.h create mode 100644 vendor/ruby/subst.h create mode 100644 vendor/ruby/thread.h create mode 100644 vendor/ruby/util.h create mode 100644 vendor/ruby/version.h create mode 100644 vendor/ruby/vm.h create mode 100644 vendor/x86_64-darwin13.0/ruby/config.h diff --git a/.gitignore b/.gitignore index b982d06..3b0bd88 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ lib/*.jar .cproject atlassian-ide-plugin.xml rspec.xml +ruby-rs-232.xcodeproj +script/ruby diff --git a/LICENSE.txt b/LICENSE.txt index 30e6d02..7414396 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2013, Ingenico Inc. +Copyright (c) 2013, Roman Lishtaba. MIT License @@ -16,7 +16,7 @@ included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +NONINFINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 9906174..2e32050 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # Ruby Serial Port implementation as C Native Extension. [ RS-232 ] -This is a RS-232 implementation as a Ruby C Native Extension. +Rubygem offering simple API in order to start using Serial Port communication in your project running on Linux, Mac OS X or Windows. ## Installation diff --git a/Rakefile b/Rakefile index 2a9fa32..3820a75 100755 --- a/Rakefile +++ b/Rakefile @@ -1,13 +1,35 @@ lib = File.expand_path '../lib', __FILE__ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include? lib + require 'bundler/setup' require 'bundler/gem_tasks' -require 'rake' -load 'tasks/clean.rake' -load 'tasks/cov.rake' -load 'tasks/rspec.rake' -load 'tasks/cucumber.rake' -load 'tasks/compile.rake' +require 'rake/extensiontask' +Rake::ExtensionTask.new('rs_232') do |ext| + ext.name = 'rs_232_native' + ext.source_pattern = '*.{c,cpp}' +end + +require 'rake/clean' +CLEAN.include %w(**/*.{log} doc coverage tmp pkg **/*.{o,so,bundle} Makefile) + +require 'simplecov' +task :cov do + ENV['SIMPLECOV'] = 'features' + Rake::Task['default'].invoke +end + +require 'cucumber/rake/task' +Cucumber::Rake::Task.new(:features) do |t| + t.fork = true + t.profile = :default +end + +require 'rspec/core/rake_task' +RSpec::Core::RakeTask.new do |t| + t.fail_on_error = false + t.verbose = true + t.rspec_opts = '--format RspecJunitFormatter --out rspec.xml --tag ~wip' +end -task default: [:clobber, :compile, :spec, :features] +task default: [:clobber, :compile, :spec] diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index 4f6a141..0000000 --- a/examples/README.md +++ /dev/null @@ -1,3 +0,0 @@ -### Examples - -Current folder contains potential idea how could you implement adapter in order to represent link layer. diff --git a/examples/serial_port_adapter.rb b/examples/serial_port_adapter.rb deleted file mode 100644 index 9f5ed02..0000000 --- a/examples/serial_port_adapter.rb +++ /dev/null @@ -1,97 +0,0 @@ -require 'rs_232' - -class SerialPortAdapter - include CommPort - - attr_reader :interface - private :interface - - # constructor with default params - # by default port will be configured with: - # - # baud_rate = 115200 # BAUD_115200 - # data_bits = 8 # DATA_BITS_8 - # parity = 0 # PAR_NONE - # stop_bits = 1 # STOP_BITS_1 - # flow_control = 0 # FLOW_OFF - # - # see other public constants on CommPort namespace - # - def initialize(port, options = {}) - @port = port - @options = options - @open = false - @interface = Rs232.new(port) - connect - end - - def connect - return if open? - can_configure_timeout = interface.respond_to?(:connecting_timeout) - interface.connecting_timeout = @options.fetch(:connecting_timeout, 60) if can_configure_timeout - interface.open - configure_interface! - @open = open? - end - - def write(bytes) - interface.write(bytes) - end - - def close - return unless open? - flush - interface.close - @open = open? - !open? - end - - def flush - interface.flush - end - - def open? - interface && !interface.closed? - end - - def recv(count) - array = [] - chunk = read_io_until(count, count) - array.push chunk if chunk - array.empty? ? nil : array.join - end - - def recv_nonblock(count) - array = [] - chunks_count = (count == -1) ? interface.available? : count - chunks_count.times do - chunk = interface.read(1) - array.push chunk if chunk - end - array.empty? ? nil : array.join - end - - def read(count, blocking = false) - blocking ? recv(count) : recv_nonblock(count) - end - - private - - def configure_interface! - interface.baud_rate = @options.fetch(:baud_rate, BAUD_115200).to_i - interface.data_bits = @options.fetch(:data_bits, DATA_BITS_8).to_i - interface.parity = @options.fetch(:parity, PAR_NONE).to_i - interface.stop_bits = @options.fetch(:stop_bits, STOP_BITS_1).to_i - interface.flow_control = @options.fetch(:flow_control, FLOW_OFF).to_i - end - - def block_io_until(count, up_to) - up_to -= 1 while interface.available? < count && up_to > 0 - up_to > 0 - end - - def read_io_until(count, up_to) - sleep 0.001 until block_io_until(count, up_to) - read(count) - end -end diff --git a/ext/rs_232/Makefile b/ext/rs_232/Makefile new file mode 100644 index 0000000..90faa0e --- /dev/null +++ b/ext/rs_232/Makefile @@ -0,0 +1,239 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +ECHO1 = $(V:1=@:) +ECHO = $(ECHO1:0=@echo) + +#### Start of system configuration section. #### + +srcdir = . +topdir = /Users/employee/.rvm/rubies/ruby-2.1.2/include/ruby-2.1.0 +hdrdir = $(topdir) +arch_hdrdir = /Users/employee/.rvm/rubies/ruby-2.1.2/include/ruby-2.1.0/x86_64-darwin13.0 +PATH_SEPARATOR = : +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby: $(srcdir)/posix +prefix = $(DESTDIR)/Users/employee/.rvm/rubies/ruby-2.1.2 +rubysitearchprefix = $(rubylibprefix)/$(sitearch) +rubyarchprefix = $(rubylibprefix)/$(arch) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +exec_prefix = $(prefix) +vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) +sitearchhdrdir = $(sitehdrdir)/$(sitearch) +rubyarchhdrdir = $(rubyhdrdir)/$(arch) +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +sitehdrdir = $(rubyhdrdir)/site_ruby +rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) +vendorarchdir = $(vendorlibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendordir = $(rubylibprefix)/vendor_ruby +sitearchdir = $(sitelibdir)/$(sitearch) +sitelibdir = $(sitedir)/$(ruby_version) +sitedir = $(rubylibprefix)/site_ruby +rubyarchdir = $(rubylibdir)/$(arch) +rubylibdir = $(rubylibprefix)/$(ruby_version) +sitearchincludedir = $(includedir)/$(sitearch) +archincludedir = $(includedir)/$(arch) +sitearchlibdir = $(libdir)/$(sitearch) +archlibdir = $(libdir)/$(arch) +ridir = $(datarootdir)/$(RI_BASE_NAME) +mandir = $(datarootdir)/man +localedir = $(datarootdir)/locale +libdir = $(exec_prefix)/lib +psdir = $(docdir) +pdfdir = $(docdir) +dvidir = $(docdir) +htmldir = $(docdir) +infodir = $(datarootdir)/info +docdir = $(datarootdir)/doc/$(PACKAGE) +oldincludedir = $(DESTDIR)/usr/include +includedir = $(prefix)/include +localstatedir = $(prefix)/var +sharedstatedir = $(prefix)/com +sysconfdir = $(DESTDIR)/etc +datadir = $(datarootdir) +datarootdir = $(prefix)/share +libexecdir = $(exec_prefix)/libexec +sbindir = $(exec_prefix)/sbin +bindir = $(exec_prefix)/bin +archdir = $(rubyarchdir) + + +CC = gcc +CXX = g++ +LIBRUBY = $(LIBRUBY_A) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = +LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation +empty = +OUTFLAG = -o $(empty) +COUTFLAG = -o $(empty) + +RUBY_EXTCONF_H = +cflags = $(optflags) $(debugflags) $(warnflags) +optflags = -O3 -fno-fast-math +debugflags = -ggdb3 +warnflags = -Wall +CCDLFLAGS = -fno-common +CFLAGS = $(CCDLFLAGS) -O3 -I/Users/travis/.sm/pkg/active/include -fPIC -mmacosx-version-min=10.7 -pipe -DDEBUG -g -Wall -g -DOS_DARWIN $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -I$(srcdir)/posix +DEFS = +CPPFLAGS = -DHAVE_RUBY_H -DHAVE_STDIO_H -DHAVE_TERMIOS_H -DHAVE_UNISTD_H -DHAVE_STRING_H -DHAVE_FCNTL_H -DHAVE_ERRNO_H -DHAVE_SYS_IOCTL_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) +CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG) +ldflags = -L. -L/Users/travis/.sm/pkg/active/lib -fPIC -Bstatic -fstack-protector +dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress +ARCH_FLAG = -arch x86_64 +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -dynamic -bundle +LDSHAREDXX = $(CXX) -dynamic -bundle +AR = ar +EXEEXT = + +RUBY_INSTALL_NAME = ruby +RUBY_SO_NAME = ruby +RUBYW_INSTALL_NAME = +RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) +RUBYW_BASE_NAME = rubyw +RUBY_BASE_NAME = ruby + +arch = x86_64-darwin13.0 +sitearch = $(arch) +ruby_version = 2.1.0 +ruby = $(bindir)/ruby +RUBY = $(ruby) +ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h + +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir -p +MAKEDIRS = mkdir -p +INSTALL = /usr/bin/install +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp +TOUCH = exit > + +#### End of system configuration section. #### + +preload = + +libpath = . $(libdir) +LIBPATH = -L. -L$(libdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = +extout_prefix = +target_prefix = +LOCAL_LIBS = +LIBS = -lstdc++ -lpthread -ldl -lobjc +ORIG_SRCS = Constants.c Option.cpp Rs232.cpp +SRCS = $(ORIG_SRCS) Option.c Constants.c Port.c Rs232.c +OBJS = Option.o Constants.o Port.o Rs232.o +HDRS = $(srcdir)/Constants.h $(srcdir)/Rs232.h $(srcdir)/Structs.h $(srcdir)/Option.hpp +TARGET = rs_232_native +TARGET_NAME = rs_232_native +TARGET_ENTRY = Init_$(TARGET_NAME) +DLLIB = $(TARGET).bundle +EXTSTATIC = +STATIC_LIB = + +TIMESTAMP_DIR = . +BINDIR = $(bindir) +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) +HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) +ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) + +TARGET_SO = $(DLLIB) +CLEANLIBS = $(TARGET).bundle +CLEANOBJS = *.o *.bak + +all: $(DLLIB) +static: $(STATIC_LIB) +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-static clean-rb + +clean-static:: +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-static clean-rb-default clean-rb + -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean-static:: +distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb + -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.time + $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) +clean-static:: + -$(Q)$(RM) $(STATIC_LIB) +install-rb: pre-install-rb install-rb-default +install-rb-default: pre-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +pre-install-rb-default: + $(ECHO) installing default rs_232_native libraries +$(TIMESTAMP_DIR)/.RUBYARCHDIR.time: + $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) + $(Q) $(TOUCH) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o + +.cc.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.mm.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cxx.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.cpp.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.C.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< + +.c.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +.m.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< + +$(DLLIB): $(OBJS) Makefile + $(ECHO) linking shared-object $(DLLIB) + -$(Q)$(RM) $(@) + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) + $(Q) $(POSTLINK) + + + +$(OBJS): $(HDRS) $(ruby_headers) diff --git a/ext/rs_232/initializer.c b/ext/rs_232/Rs232.cpp similarity index 68% rename from ext/rs_232/initializer.c rename to ext/rs_232/Rs232.cpp index 157ee22..1dc2108 100644 --- a/ext/rs_232/initializer.c +++ b/ext/rs_232/Rs232.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -10,45 +10,43 @@ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * - **/ -#include "initializer.h" +/* + * @author Roman Lishtaba + */ + +#include "Rs232.h" static void destructor(PortDescriptor *port) { xfree(port); } - static void markDescriptor(PortDescriptor *port) { + //noop } static VALUE allocateStruct(VALUE self) { - PortDescriptor *port; - + PortDescriptor *port = NULL; rb_iv_set(self, "@port", Qnil); - + return Data_Make_Struct(self, PortDescriptor, markDescriptor, destructor, port); } void setBaudRate(VALUE self, VALUE int_baudRate) { + Check_Type(int_baudRate, T_FIXNUM); + PortDescriptor *port; - - { - Check_Type(int_baudRate, T_FIXNUM); - } - int baudRate = FIX2INT(int_baudRate); - - Data_Get_Struct(self, PortDescriptor, port); - int baud = 110; - + + Data_Get_Struct(self, PortDescriptor, port); + switch (baudRate) { case BAUD110: @@ -85,10 +83,10 @@ void setBaudRate(VALUE self, VALUE int_baudRate) rb_raise(rb_eException, "BaudRate value does not match specification, current: %d", baudRate); break; } - + port->settings.BaudRate = (enum BaudRateType) baud; port->toBeUpdated |= T_BaudRate; - + updateSettings(port); } @@ -96,28 +94,21 @@ void setBaudRate(VALUE self, VALUE int_baudRate) VALUE getBaudRate(VALUE self) { PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX(port->settings.BaudRate); } void setParity(VALUE self, VALUE int_parity) { - - { - Check_Type(int_parity, T_FIXNUM); - } - - int parity = FIX2INT(int_parity); - + Check_Type(int_parity, T_FIXNUM); + PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + int parity = FIX2INT(int_parity); enum ParityType parity_type = PAR_NONE; - + switch (parity) { case PAR_NONE: @@ -133,40 +124,31 @@ void setParity(VALUE self, VALUE int_parity) rb_raise(rb_eException, "Parity value does not match specification, current: %d", parity); break; } - + port->settings.Parity = parity_type; port->toBeUpdated |= T_Parity; - + updateSettings(port); } VALUE getParity(VALUE self) { - PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX(port->settings.Parity); } void setDataBits(VALUE self, VALUE intDataBits) { - - { - Check_Type(intDataBits, T_FIXNUM); - } - - int dataBits = FIX2INT(intDataBits); - + Check_Type(intDataBits, T_FIXNUM); PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + int dataBits = FIX2INT(intDataBits); enum DataBitsType dataBitsType = DATA_8; - + switch (dataBits) { case DATA_5: @@ -185,40 +167,32 @@ void setDataBits(VALUE self, VALUE intDataBits) rb_raise(rb_eException, "DataBits value does not match specification, current: %d", dataBits); break; } - + port->settings.DataBits = dataBitsType; port->toBeUpdated |= T_DataBits; - + updateSettings(port); } VALUE getDataBits(VALUE self) { - PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX(port->settings.DataBits); } void setStopBits(VALUE self, VALUE intStopBits) { - - { - Check_Type(intStopBits, T_FIXNUM); - } - - int stopBits = FIX2INT(intStopBits); - + Check_Type(intStopBits, T_FIXNUM); + PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + int stopBits = FIX2INT(intStopBits); enum StopBitsType stopBitsType = STOP_1; - + switch (stopBits) { case STOP_1: @@ -231,40 +205,31 @@ void setStopBits(VALUE self, VALUE intStopBits) rb_raise(rb_eException, "StopBits value does not match specification, current: %d", stopBits); break; } - + port->settings.StopBits = stopBitsType; port->toBeUpdated |= T_StopBits; - + updateSettings(port); } VALUE getStopBits(VALUE self) { - PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX(port->settings.StopBits); } void setFlowControl(VALUE self, VALUE intFlow) { - - { - Check_Type(intFlow, T_FIXNUM); - } - - int flow = FIX2INT(intFlow); - + Check_Type(intFlow, T_FIXNUM); PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + int flow = FIX2INT(intFlow); enum FlowType flowType = FLOW_OFF; - + switch (flow) { case FLOW_OFF: @@ -280,119 +245,120 @@ void setFlowControl(VALUE self, VALUE intFlow) rb_raise(rb_eException, "FlowControl value does not match specification, current: %d", flow); break; } - + port->settings.FlowControl = flowType; port->toBeUpdated |= T_StopBits; - + updateSettings(port); } VALUE getFlowControl(VALUE self) { - PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX(port->settings.FlowControl); } void setTimeout(VALUE self, VALUE rb_timeout) { - - { - Check_Type(rb_timeout, T_FIXNUM); - } - + Check_Type(rb_timeout, T_FIXNUM); PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - long timeout = FIX2LONG(rb_timeout); - + port->settings.Timeout_Millisec = timeout; port->toBeUpdated |= T_TimeOut; - + updateSettings(port); } - +/* + * Get connection timeout + * + * @return [Fixnum] the timeout value + * @see Impl#timeout + */ VALUE getTimeout(VALUE self) { - PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX(port->settings.Timeout_Millisec); } - void setSettings(VALUE self) { - PortDescriptor *port; - Data_Get_Struct(self, PortDescriptor, port); - + setBaudRate(self, INT2FIX(port->settings.BaudRate)); setParity(self, INT2FIX(port->settings.Parity)); setDataBits(self, INT2FIX(port->settings.DataBits)); setStopBits(self, INT2FIX(port->settings.StopBits)); setFlowControl(self, INT2FIX(port->settings.FlowControl)); setTimeout(self, LONG2FIX(port->settings.Timeout_Millisec)); - port->toBeUpdated = T_ALL; - + updateSettings(port); } - -void Init_rs_232(void) +extern "C" void Init_rs_232_native(void) { - - VALUE root, rb_cPort; - - root = rb_define_module("CommPort"); - - Constants_Init(root); - - rb_cPort = rb_define_class_under(root, "Rs232", rb_cObject); - rb_define_alloc_func(rb_cPort, allocateStruct); - rb_define_method(rb_cPort, "initialize", (VALUE ( *)()) initializeStruct, 1); - - rb_define_method(rb_cPort, "baud_rate=", (VALUE ( *)()) setBaudRate, 1); - rb_define_method(rb_cPort, "baud_rate", (VALUE ( *)()) getBaudRate, 0); - - rb_define_method(rb_cPort, "parity=", (VALUE ( *)()) setParity, 1); - rb_define_method(rb_cPort, "parity", (VALUE ( *)()) getParity, 0); - - rb_define_method(rb_cPort, "data_bits=", (VALUE ( *)()) setDataBits, 1); - rb_define_method(rb_cPort, "data_bits", (VALUE ( *)()) getDataBits, 0); - - rb_define_method(rb_cPort, "stop_bits=", (VALUE ( *)()) setStopBits, 1); - rb_define_method(rb_cPort, "stop_bits", (VALUE ( *)()) getStopBits, 0); - - rb_define_method(rb_cPort, "flow_control=", (VALUE ( *)()) setFlowControl, 1); - rb_define_method(rb_cPort, "flow_control", (VALUE ( *)()) getFlowControl, 0); - - rb_define_method(rb_cPort, "timeout=", (VALUE ( *)()) setTimeout, 1); - rb_define_method(rb_cPort, "timeout", (VALUE ( *)()) getTimeout, 0); - - rb_define_method(rb_cPort, "open", (VALUE ( *)()) openIO, 0); - rb_define_method(rb_cPort, "close", (VALUE ( *)()) closeIO, 0); - rb_define_method(rb_cPort, "flush", (VALUE ( *)()) flushIO, 0); - rb_define_method(rb_cPort, "closed?", (VALUE ( *)()) isClosedIO, 0); - - - rb_define_method(rb_cPort, "write", (VALUE ( *)()) writeIO, 1); - rb_define_method(rb_cPort, "read", (VALUE ( *)()) readIO, 1); - rb_define_method(rb_cPort, "available?", (VALUE ( *)()) bytesAvailableIO, 0); - - rb_define_method(rb_cPort, "line_status", (VALUE ( *)()) lineStatusIO, 0); - rb_define_method(rb_cPort, "set_rts", (VALUE ( *)()) setRtsIO, 1); - rb_define_method(rb_cPort, "set_dtr", (VALUE ( *)()) setDtrIO, 1); - + const char rootModName[] = "Rs232"; + const char implClassName[] = "Native"; + const char constantsModName[] = "Constants"; + const char VERSION[] = "2.0.0"; + + // define root Rs232 module + const VALUE root = rb_define_module(rootModName); + + // define impl ruby class + const VALUE impl = rb_define_class_under(root, implClassName, rb_cObject); + + // define module Constants under Native + const VALUE constants = rb_define_module_under(root, constantsModName); + + // initialize constants in to module Native::Constants + Constants_Init(constants); + + // define native version constant + rb_define_const(impl, "NATIVE_VERSION", rb_str_new2(VERSION)); + + rb_define_alloc_func(impl, allocateStruct); + + rb_define_method(impl, "initialize", RUBY_METHOD_FUNC(initializeStruct), 1); + + rb_define_method(impl, "baud_rate=", RUBY_METHOD_FUNC(setBaudRate), 1); + rb_define_method(impl, "baud_rate", RUBY_METHOD_FUNC(getBaudRate), 0); + + rb_define_method(impl, "parity=", RUBY_METHOD_FUNC(setParity), 1); + rb_define_method(impl, "parity", RUBY_METHOD_FUNC(getParity), 0); + + rb_define_method(impl, "data_bits=", RUBY_METHOD_FUNC(setDataBits), 1); + rb_define_method(impl, "data_bits", RUBY_METHOD_FUNC(getDataBits), 0); + + rb_define_method(impl, "stop_bits=", RUBY_METHOD_FUNC(setStopBits), 1); + rb_define_method(impl, "stop_bits", RUBY_METHOD_FUNC(getStopBits), 0); + + rb_define_method(impl, "flow_control=", RUBY_METHOD_FUNC(setFlowControl), 1); + rb_define_method(impl, "flow_control", RUBY_METHOD_FUNC(getFlowControl), 0); + + rb_define_method(impl, "timeout=", RUBY_METHOD_FUNC(setTimeout), 1); + rb_define_method(impl, "timeout", RUBY_METHOD_FUNC(getTimeout), 0); + + rb_define_method(impl, "open", RUBY_METHOD_FUNC(openIO), 0); + rb_define_method(impl, "close", RUBY_METHOD_FUNC(closeIO), 0); + rb_define_method(impl, "flush", RUBY_METHOD_FUNC(flushIO), 0); + rb_define_method(impl, "open?", RUBY_METHOD_FUNC(isOpenIO), 0); + + rb_define_method(impl, "write", RUBY_METHOD_FUNC(writeIO), 1); + rb_define_method(impl, "read", RUBY_METHOD_FUNC(readIO), 1); + rb_define_method(impl, "available?", RUBY_METHOD_FUNC(bytesAvailableIO), 0); + + rb_define_method(impl, "line_status", RUBY_METHOD_FUNC(lineStatusIO), 0); + rb_define_method(impl, "set_rts", RUBY_METHOD_FUNC(setRtsIO), 1); + rb_define_method(impl, "set_dtr", RUBY_METHOD_FUNC(setDtrIO), 1); } diff --git a/ext/rs_232/initializer.h b/ext/rs_232/Rs232.h similarity index 54% rename from ext/rs_232/initializer.h rename to ext/rs_232/Rs232.h index 3d033f8..bb8e056 100644 --- a/ext/rs_232/initializer.h +++ b/ext/rs_232/Rs232.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,43 +12,52 @@ * **/ -#ifndef rs_232_initializer____FILEEXTENSION___ -#define rs_232_initializer____FILEEXTENSION___ - -#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) +/* + * @author Roman Lishtaba + */ -# include "windows/port.h" +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) + +# include "windows/Port.h" + #else - -# include "posix/port.h" - + +# include "posix/Port.h" + #endif - -#include "structs.h" - -VALUE initializeStruct(VALUE, VALUE); - -void updateSettings(PortDescriptor *port); - -VALUE isClosedIO(VALUE); - -VALUE openIO(VALUE); - -VALUE closeIO(VALUE); - -VALUE bytesAvailableIO(VALUE); - -VALUE flushIO(VALUE); - -VALUE writeIO(VALUE, VALUE); - -VALUE readIO(VALUE, VALUE); - -VALUE lineStatusIO(VALUE); - -VALUE setRtsIO(VALUE, VALUE); - -VALUE setDtrIO(VALUE, VALUE); - + +#include "Structs.h" + + VALUE initializeStruct(VALUE, VALUE); + + void updateSettings(PortDescriptor *port); + + VALUE isOpenIO(VALUE); + + VALUE openIO(VALUE); + + VALUE closeIO(VALUE); + + VALUE bytesAvailableIO(VALUE); + + VALUE flushIO(VALUE); + + VALUE writeIO(VALUE, VALUE); + + VALUE readIO(VALUE, VALUE); + + VALUE lineStatusIO(VALUE); + + VALUE setRtsIO(VALUE, VALUE); + + VALUE setDtrIO(VALUE, VALUE); + +#ifdef __cplusplus +} #endif \ No newline at end of file diff --git a/ext/rs_232/constants.c b/ext/rs_232/constants.c index d727b4a..a8f2f7b 100644 --- a/ext/rs_232/constants.c +++ b/ext/rs_232/constants.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,38 +12,39 @@ * **/ +/* + * @author Roman Lishtaba + */ -#include "constants.h" +#include "Constants.h" -void Constants_Init(VALUE root) +void Constants_Init(VALUE namespace) { - rb_define_const(root, "BAUD_110", INT2FIX(BAUD110)); - rb_define_const(root, "BAUD_300", INT2FIX(BAUD300)); - rb_define_const(root, "BAUD_600", INT2FIX(BAUD600)); - rb_define_const(root, "BAUD_1200", INT2FIX(BAUD1200)); - rb_define_const(root, "BAUD_2400", INT2FIX(BAUD2400)); - rb_define_const(root, "BAUD_4800", INT2FIX(BAUD4800)); - rb_define_const(root, "BAUD_9600", INT2FIX(BAUD9600)); - rb_define_const(root, "BAUD_19200", INT2FIX(BAUD19200)); - rb_define_const(root, "BAUD_38400", INT2FIX(BAUD38400)); - rb_define_const(root, "BAUD_57600", INT2FIX(BAUD57600)); - rb_define_const(root, "BAUD_115200", INT2FIX(BAUD115200)); - - rb_define_const(root, "DATA_BITS_5", INT2FIX(DATA_5)); - rb_define_const(root, "DATA_BITS_6", INT2FIX(DATA_6)); - rb_define_const(root, "DATA_BITS_7", INT2FIX(DATA_7)); - rb_define_const(root, "DATA_BITS_8", INT2FIX(DATA_8)); - - rb_define_const(root, "PAR_NONE", INT2FIX(PAR_NONE)); - rb_define_const(root, "PAR_ODD", INT2FIX(PAR_ODD)); - rb_define_const(root, "PAR_EVEN", INT2FIX(PAR_EVEN)); - - rb_define_const(root, "STOP_BITS_1", INT2FIX(STOP_1)); - rb_define_const(root, "STOP_BITS_3", INT2FIX(STOP_2)); - - - rb_define_const(root, "FLOW_OFF", INT2FIX(FLOW_OFF)); - rb_define_const(root, "FLOW_HARDWARE", INT2FIX(FLOW_HARDWARE)); - rb_define_const(root, "FLOW_XONXOFF", INT2FIX(FLOW_XONXOFF)); - -} \ No newline at end of file + rb_define_const(namespace, "BAUD_110", INT2FIX(BAUD110)); + rb_define_const(namespace, "BAUD_300", INT2FIX(BAUD300)); + rb_define_const(namespace, "BAUD_600", INT2FIX(BAUD600)); + rb_define_const(namespace, "BAUD_1200", INT2FIX(BAUD1200)); + rb_define_const(namespace, "BAUD_2400", INT2FIX(BAUD2400)); + rb_define_const(namespace, "BAUD_4800", INT2FIX(BAUD4800)); + rb_define_const(namespace, "BAUD_9600", INT2FIX(BAUD9600)); + rb_define_const(namespace, "BAUD_19200", INT2FIX(BAUD19200)); + rb_define_const(namespace, "BAUD_38400", INT2FIX(BAUD38400)); + rb_define_const(namespace, "BAUD_57600", INT2FIX(BAUD57600)); + rb_define_const(namespace, "BAUD_115200", INT2FIX(BAUD115200)); + + rb_define_const(namespace, "DATA_BITS_5", INT2FIX(DATA_5)); + rb_define_const(namespace, "DATA_BITS_6", INT2FIX(DATA_6)); + rb_define_const(namespace, "DATA_BITS_7", INT2FIX(DATA_7)); + rb_define_const(namespace, "DATA_BITS_8", INT2FIX(DATA_8)); + + rb_define_const(namespace, "PAR_NONE", INT2FIX(PAR_NONE)); + rb_define_const(namespace, "PAR_ODD", INT2FIX(PAR_ODD)); + rb_define_const(namespace, "PAR_EVEN", INT2FIX(PAR_EVEN)); + + rb_define_const(namespace, "STOP_BITS_1", INT2FIX(STOP_1)); + rb_define_const(namespace, "STOP_BITS_3", INT2FIX(STOP_2)); + + rb_define_const(namespace, "FLOW_OFF", INT2FIX(FLOW_OFF)); + rb_define_const(namespace, "FLOW_HARDWARE", INT2FIX(FLOW_HARDWARE)); + rb_define_const(namespace, "FLOW_XONXOFF", INT2FIX(FLOW_XONXOFF)); +} diff --git a/ext/rs_232/constants.h b/ext/rs_232/constants.h index d872783..1eb4018 100644 --- a/ext/rs_232/constants.h +++ b/ext/rs_232/constants.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,12 +12,18 @@ * **/ -#ifndef constants____FILEEXTENSION___ -#define constants____FILEEXTENSION___ - -#include +/* + * @author Roman Lishtaba + */ +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + +#include + #define LS_CTS 0x01 #define LS_DSR 0x02 #define LS_DCD 0x04 @@ -26,70 +32,66 @@ #define LS_DTR 0x20 #define LS_ST 0x40 #define LS_SR 0x80 - - -enum BaudRateType -{ - BAUD110 = 110, - BAUD300 = 300, - BAUD600 = 600, - BAUD1200 = 1200, - BAUD2400 = 2400, - BAUD4800 = 4800, - BAUD9600 = 9600, - BAUD19200 = 19200, - BAUD38400 = 38400, - BAUD57600 = 57600, - BAUD115200 = 115200 - -}; - - -enum DataBitsType -{ - DATA_5 = 5, - DATA_6, - DATA_7, - DATA_8 -}; - - -enum ParityType -{ - PAR_NONE, - PAR_ODD, - PAR_EVEN, -}; - - -enum StopBitsType -{ - STOP_1 = 1, - STOP_2 -}; - - -enum FlowType -{ - FLOW_OFF, - FLOW_HARDWARE, - FLOW_XONXOFF -}; - - -enum SettingsFlags -{ - T_BaudRate = 0x0001, - T_Parity = 0x0002, - T_StopBits = 0x0004, - T_DataBits = 0x0008, - T_Flow = 0x0010, - T_TimeOut = 0x0100, - T_ALL = 0x0fff, - T_SettingsDone = 0x00ff, -}; - - -void Constants_Init(VALUE); - + + enum { PORT_OPEN, PORT_CLOSED }; + + enum BaudRateType + { + BAUD110 = 110, + BAUD300 = 300, + BAUD600 = 600, + BAUD1200 = 1200, + BAUD2400 = 2400, + BAUD4800 = 4800, + BAUD9600 = 9600, + BAUD19200 = 19200, + BAUD38400 = 38400, + BAUD57600 = 57600, + BAUD115200 = 115200 + }; + + enum DataBitsType + { + DATA_5 = 5, + DATA_6, + DATA_7, + DATA_8 + }; + + enum ParityType + { + PAR_NONE, + PAR_ODD, + PAR_EVEN, + }; + + enum StopBitsType + { + STOP_1 = 1, + STOP_2 + }; + + enum FlowType + { + FLOW_OFF, + FLOW_HARDWARE, + FLOW_XONXOFF + }; + + enum SettingsFlags + { + T_BaudRate = 0x0001, + T_Parity = 0x0002, + T_StopBits = 0x0004, + T_DataBits = 0x0008, + T_Flow = 0x0010, + T_TimeOut = 0x0100, + T_ALL = 0x0fff, + T_SettingsDone = 0x00ff, + }; + + void Constants_Init(VALUE); + +#ifdef __cplusplus +} #endif diff --git a/ext/rs_232/extconf.rb b/ext/rs_232/extconf.rb index 3d13545..7884d9d 100644 --- a/ext/rs_232/extconf.rb +++ b/ext/rs_232/extconf.rb @@ -1,13 +1,16 @@ require 'mkmf' require 'rbconfig' -if ENV['DEBUG_C'] +EXTENSION_NAME = 'rs_232_native'.freeze +dir_config(EXTENSION_NAME) + +if ENV['DEBUG'] $CFLAGS << ' -DDEBUG' - $CFLAGS << ' -g -O' + $CFLAGS << ' -g' $stdout.puts "compiling in debug mode... flags: #{$CFLAGS}" end -dir_config('rs_232') +$CFLAGS << ' -Wall -g' $warnflags = '-Wall' @@ -30,6 +33,7 @@ have_header('ruby.h') have_header('stdio.h') +have_library( 'stdc++' ); if OS == 'windows' $VPATH << '$(srcdir)/windows' @@ -49,10 +53,10 @@ have_header('errno.h') have_header('sys/ioctl.h') else - fail "RS-233 implementation is not tested for this #{OS} platform." + fail "RS-233 implementation wasn't been tested for #{OS} platform." end -$objs = %w(constants.o port.o initializer.o) +$objs = %w(Option.o Constants.o Port.o Rs232.o).freeze $CFLAGS += " -DOS_#{OS.upcase}" @@ -62,4 +66,4 @@ MSG -create_makefile('rs_232') +create_makefile(EXTENSION_NAME) diff --git a/ext/rs_232/posix/port.c b/ext/rs_232/posix/port.c index a3f82c9..90e4860 100644 --- a/ext/rs_232/posix/port.c +++ b/ext/rs_232/posix/port.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,66 +12,57 @@ * **/ -#include "port.h" +/* + * @author Roman Lishtaba + */ -VALUE setDtrIO(VALUE self, VALUE rb_int) -{ - { - Check_Type(rb_int, T_FIXNUM); - } +#include "Port.h" - int boolean = FIX2INT(rb_int); +VALUE setDtrIO(VALUE self, VALUE rb_int) +{ + Check_Type(rb_int, T_FIXNUM); + const int boolean = FIX2INT(rb_int); + int status; PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - - int status; + ioctl(port->fd, TIOCMGET, &status); if (boolean == 1) status |= TIOCM_DTR; else status &= ~TIOCM_DTR; ioctl(port->fd, TIOCMSET, &status); - + return INT2FIX(status); - } VALUE setRtsIO(VALUE self, VALUE rb_int) { - { - Check_Type(rb_int, T_FIXNUM); - } - - int boolean = FIX2INT(rb_int); - + Check_Type(rb_int, T_FIXNUM); + const int boolean = FIX2INT(rb_int); PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - int status; + ioctl(port->fd, TIOCMGET, &status); if (boolean == 1) status |= TIOCM_RTS; else - status &= - ~TIOCM_RTS; + status &= ~TIOCM_RTS; ioctl(port->fd, TIOCMSET, &status); - + return INT2FIX(status); } VALUE lineStatusIO(VALUE self) { - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - unsigned long Status = 0, Temp = 0; + ioctl(port->fd, TIOCMGET, &Temp); if (Temp & TIOCM_CTS) Status |= LS_CTS; if (Temp & TIOCM_DSR) Status |= LS_DSR; @@ -81,7 +72,7 @@ VALUE lineStatusIO(VALUE self) if (Temp & TIOCM_RTS) Status |= LS_RTS; if (Temp & TIOCM_ST ) Status |= LS_ST; if (Temp & TIOCM_SR ) Status |= LS_SR; - + return LONG2FIX(Status); } @@ -89,7 +80,7 @@ VALUE lineStatusIO(VALUE self) static void platformInitIO(PortDescriptor *port) { port->fd = -1; - port->status = 1; + port->status = PORT_CLOSED; } @@ -107,19 +98,18 @@ static void setPosixBaudRate(PortDescriptor *port) void updateSettings(PortDescriptor *port) { - - if (port->status != 0) + if (PORT_OPEN != port->status) rb_raise(rb_eException, "Can not set due to comport is not open, status: %d\n", port->status); - + /* - * BaudRate clause ************************************************ - */ + * BaudRate clause + */ if (port->toBeUpdated & T_BaudRate) setPosixBaudRate(port); - + /* - * Parity clause ************************************************ - */ + * Parity clause + */ if (port->toBeUpdated & T_Parity) { switch (port->settings.Parity) @@ -136,11 +126,10 @@ void updateSettings(PortDescriptor *port) break; } } - + /* - * Data Bits clause ************************************************ - */ - + * Data Bits clause + */ if (port->toBeUpdated & T_DataBits) { port->posixConfig.c_cflag &= (~CSIZE); @@ -160,11 +149,11 @@ void updateSettings(PortDescriptor *port) break; } } - + /* - * StopBits clause ************************************************ - */ - + * StopBits clause + */ + if (port->toBeUpdated & T_StopBits) { switch (port->settings.StopBits) @@ -177,11 +166,11 @@ void updateSettings(PortDescriptor *port) break; } } - + /* - * FlowControl clause ************************************************ - */ - + * FlowControl clause + */ + if (port->toBeUpdated & T_Flow) { switch (port->settings.FlowControl) @@ -201,25 +190,25 @@ void updateSettings(PortDescriptor *port) break; } } - - + + /* - * In case of update flush IO - */ - + * In case of update flush IO + */ + if (port->toBeUpdated & T_SettingsDone) { tcsetattr(port->fd, TCSAFLUSH, &port->posixConfig); } - + /* - * Timeout clause ************************************************ - */ - + * Timeout clause + */ + if (port->toBeUpdated & T_TimeOut) { int timeout = port->settings.Timeout_Millisec; - + if (timeout == -1) { fcntl(port->fd, F_SETFL, O_NDELAY); /* O_NDELAY should release if no any data here */ @@ -230,148 +219,116 @@ void updateSettings(PortDescriptor *port) } tcgetattr(port->fd, &port->posixConfig); port->posixConfig.c_cc[VTIME] = (timeout / 100); - + tcsetattr(port->fd, TCSAFLUSH, &port->posixConfig); } - + port->toBeUpdated = 0; - } int queryStatusIO(VALUE self) { PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - + return port->status; } -VALUE isClosedIO(VALUE self) +VALUE isOpenIO(VALUE self) { - return queryStatusIO(self) == 1 ? Qtrue : Qfalse; + return queryStatusIO(self) == PORT_OPEN ? Qtrue : Qfalse; } VALUE flushIO(VALUE self) { PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX( tcdrain(port->fd) ); } VALUE bytesAvailableIO(VALUE self) { - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - int bytesQueued; - + if (ioctl(port->fd, FIONREAD, &bytesQueued) == -1) - { return INT2FIX(0); - } + return INT2FIX(bytesQueued); } VALUE openIO(VALUE self) { - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - - if ((port->fd = open(port->settings.ComPort, O_RDWR | O_NOCTTY | O_SYNC)) != -1) + + if ((port->fd = open(port->settings.ComPort, O_RDWR | O_NOCTTY | O_NDELAY)) != -1) { - - port->status = 0; - - { - rb_iv_set(self, "@open", INT2FIX(port->status)); - } - + port->status = PORT_OPEN; + rb_iv_set(self, "@open", INT2FIX(port->status)); + tcgetattr(port->fd, &port->previousPosixConfig); port->posixConfig = port->previousPosixConfig; cfmakeraw(&port->posixConfig); - - + port->posixConfig.c_cflag |= CREAD | CLOCAL; port->posixConfig.c_lflag &= (~(ICANON| ECHO| ECHOE| ECHOK| ECHONL| ISIG)); port->posixConfig.c_iflag &= (~(INPCK| IGNPAR| PARMRK| ISTRIP| ICRNL| IXANY)); port->posixConfig.c_oflag &= (~OPOST); port->posixConfig.c_cc[VMIN] = 0; port->posixConfig.c_cc[VTIME] = 0; - + port->toBeUpdated = T_ALL; - + setSettings(self); - } else { - port->status = 1; - rb_raise(rb_eException, "Unable to open comport: %s\n", port->settings.ComPort); + port->status = PORT_CLOSED; + rb_raise(rb_eRuntimeError, "Unable to open comport: `%s`", port->settings.ComPort); } - - return INT2FIX(port->status); + + return self; } VALUE writeIO(VALUE self, VALUE message) { - - { - Check_Type(message, T_STRING); - } - - int recv; - int len; - + Check_Type(message, T_STRING); PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - - len = (int) RSTRING_LEN(message); + + const int len = (int) RSTRING_LEN(message); char cStr[len]; strcpy(cStr, RSTRING_PTR(message)); - - recv = (int) write(port->fd, cStr, (size_t) sizeof(cStr)); - - if (recv < 0){ + + const int recv = (int) write(port->fd, cStr, (size_t) sizeof(cStr)); + + if (recv < 0) rb_raise(rb_eEOFError, "TX: writing of the %d bytes has failed", len); - } - + return INT2FIX(recv); } VALUE readIO(VALUE self, VALUE rb_int) { - - { - Check_Type(rb_int, T_FIXNUM); - } - + Check_Type(rb_int, T_FIXNUM); int recv; - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - - int len = FIX2INT(rb_int); - + const int len = FIX2INT(rb_int); char in[len]; - + recv = (int) read(port->fd, in, sizeof(in)); if (recv > 0) - return rb_str_new(in, recv); + return rb_str_new(in, recv); return Qnil; } @@ -379,51 +336,38 @@ VALUE readIO(VALUE self, VALUE rb_int) VALUE closeIO(VALUE self) { - - int closed; - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - flushIO(self); - tcsetattr(port->fd, TCSAFLUSH | TCSANOW, &port->previousPosixConfig); - closed = close(port->fd); - - port->status = closed == 0 ? 1 : 0; - + + const int state = close(port->fd); + + port->status = (state == 0 ? PORT_CLOSED : PORT_OPEN); + rb_iv_set(self, "@open", INT2FIX(port->status)); rb_iv_set(self, "@fd", INT2FIX(port->fd)); - - return INT2FIX(closed); - + + return INT2FIX(state); } VALUE initializeStruct(VALUE self, VALUE portName) { - - { - Check_Type(portName, T_STRING); - } - + Check_Type(portName, T_STRING); PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - + port->settings.BaudRate = BAUD115200; port->settings.Parity = PAR_NONE; port->settings.FlowControl = FLOW_OFF; port->settings.DataBits = DATA_8; port->settings.StopBits = STOP_1; port->settings.Timeout_Millisec = 0; - + strcpy(port->settings.ComPort, RSTRING_PTR(portName)); - platformInitIO(port); - rb_iv_set(self, "@port", portName); - + return self; -} \ No newline at end of file +} diff --git a/ext/rs_232/posix/port.h b/ext/rs_232/posix/port.h index 9478612..e7cc0a9 100644 --- a/ext/rs_232/posix/port.h +++ b/ext/rs_232/posix/port.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,9 +12,16 @@ * **/ -#ifndef rs_232_port_h____FILEEXTENSION___ -#define rs_232_port_h____FILEEXTENSION___ +/* + * @author Roman Lishtaba + */ + +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + # include # include # include @@ -23,31 +30,33 @@ # include # include # include -# include "structs.h" - - -void setBaudRate(VALUE, VALUE); - -VALUE getBaudRate(VALUE); - -void setParity(VALUE, VALUE); - -VALUE getParity(VALUE); - -void setDataBits(VALUE, VALUE); - -VALUE getDataBits(VALUE); - -void setStopBits(VALUE, VALUE); - -VALUE getStopBits(VALUE); - -void setFlowControl(VALUE, VALUE); - -VALUE getFlowControl(VALUE); - -void setTimeout(VALUE, VALUE); - -void setSettings(VALUE); - +# include "Structs.h" + + + void setBaudRate(VALUE, VALUE); + + VALUE getBaudRate(VALUE); + + void setParity(VALUE, VALUE); + + VALUE getParity(VALUE); + + void setDataBits(VALUE, VALUE); + + VALUE getDataBits(VALUE); + + void setStopBits(VALUE, VALUE); + + VALUE getStopBits(VALUE); + + void setFlowControl(VALUE, VALUE); + + VALUE getFlowControl(VALUE); + + void setTimeout(VALUE, VALUE); + + void setSettings(VALUE); + +#ifdef __cplusplus +} #endif diff --git a/ext/rs_232/structs.h b/ext/rs_232/structs.h index 5919b63..28c3761 100644 --- a/ext/rs_232/structs.h +++ b/ext/rs_232/structs.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,51 +12,52 @@ * **/ -#ifndef rs_232_structs_h -#define rs_232_structs_h - -#include "constants.h" - /* - * structure to contain port settings + * @author Roman Lishtaba */ -typedef struct PortSettings_T -{ - char ComPort[40]; - enum BaudRateType BaudRate; - enum DataBitsType DataBits; - enum ParityType Parity; - enum StopBitsType StopBits; - enum FlowType FlowControl; - long Timeout_Millisec; -} PortSettings; +#pragma once - -/* - * port descriptor structure - */ - -typedef struct portDescriptor_T -{ +#ifdef __cplusplus +extern "C" { +#endif + +#include "Constants.h" + + /* + * structure to contain port settings + */ + typedef struct PortSettings_T + { + char ComPort[40]; + enum BaudRateType BaudRate; + enum DataBitsType DataBits; + enum ParityType Parity; + enum StopBitsType StopBits; + enum FlowType FlowControl; + long Timeout_Millisec; + } PortSettings; + + + /* + * port descriptor structure + */ + typedef struct portDescriptor_T + { #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) - - HANDLE fd; - COMMCONFIG commConfig; - COMMTIMEOUTS commTimeouts; - + HANDLE fd; + COMMCONFIG commConfig; + COMMTIMEOUTS commTimeouts; #else - - int fd; - struct termios posixConfig; - struct termios previousPosixConfig; - + int fd; + struct termios posixConfig; + struct termios previousPosixConfig; #endif - - int status; - PortSettings settings; - int toBeUpdated; - -} PortDescriptor; - + int status; + PortSettings settings; + int toBeUpdated; + } PortDescriptor; + +#ifdef __cplusplus +} #endif diff --git a/ext/rs_232/windows/port.c b/ext/rs_232/windows/port.c index 4fd2560..7b61352 100644 --- a/ext/rs_232/windows/port.c +++ b/ext/rs_232/windows/port.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,7 +12,11 @@ * **/ -#include "port.h" +/* + * @author Roman Lishtaba + */ + +#include "Port.h" VALUE setDtrIO(VALUE self, VALUE rb_int) @@ -20,49 +24,44 @@ VALUE setDtrIO(VALUE self, VALUE rb_int) { Check_Type(rb_int, T_FIXNUM); } - int boolean = FIX2INT(rb_int); - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX( EscapeCommFunction(port->fd, boolean == 1 ? SETDTR : CLRDTR) ); } VALUE setRtsIO(VALUE self, VALUE rb_int) { - { - Check_Type(rb_int, T_FIXNUM); - } - + Check_Type(rb_int, T_FIXNUM); + int boolean = FIX2INT(rb_int); - + PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + return INT2FIX( EscapeCommFunction(port->fd, boolean == 1 ? SETRTS : CLRRTS) ); } VALUE lineStatusIO(VALUE self) { - + PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + unsigned long Status = 0, Temp = 0; - + GetCommModemStatus(port->fd, &Temp); - + if (Temp & MS_CTS_ON) Status |= LS_CTS; if (Temp & MS_DSR_ON) Status |= LS_DSR; if (Temp & MS_RING_ON) Status |= LS_RI; if (Temp & MS_RLSD_ON) Status |= LS_DCD; - + return LONG2FIX(Status); } @@ -76,28 +75,28 @@ static void platformInitIO(PortDescriptor *port) void updateSettings(PortDescriptor *port) { - - if (port->status != 0) - rb_raise(rb_eException, "Can not set due to comport is not open, status: %d\n", port->status); - - + + if (PORT_OPEN != port->status) + rb_raise(rb_eRuntimeError, "Can not set due to comport is not open, status: %d\n", port->status); + + if (port->toBeUpdated & T_BaudRate) port->commConfig.dcb.BaudRate = port->settings.BaudRate; - - + + if (port->toBeUpdated & T_Parity) { port->commConfig.dcb.Parity = (BYTE) port->settings.Parity; port->commConfig.dcb.fParity = (port->settings.Parity == PAR_NONE) ? 0 : 1; } - - + + if (port->toBeUpdated & T_DataBits) { port->commConfig.dcb.ByteSize = (BYTE) port->settings.DataBits; } - - + + if (port->toBeUpdated & T_StopBits) { switch (port->settings.StopBits) @@ -110,7 +109,7 @@ void updateSettings(PortDescriptor *port) break; } } - + if (port->toBeUpdated & T_Flow) { switch (port->settings.FlowControl) @@ -135,11 +134,11 @@ void updateSettings(PortDescriptor *port) break; } } - + if (port->toBeUpdated & T_TimeOut) { int millisec = port->settings.Timeout_Millisec; - + if (millisec == -1) { port->commTimeouts.ReadIntervalTimeout = MAXDWORD; @@ -153,14 +152,14 @@ void updateSettings(PortDescriptor *port) port->commTimeouts.WriteTotalTimeoutMultiplier = millisec; port->commTimeouts.WriteTotalTimeoutConstant = 0; } - - + + if (port->toBeUpdated & T_SettingsDone) SetCommConfig(port->fd, &port->commConfig, sizeof(COMMCONFIG)); - + if ((port->toBeUpdated & T_TimeOut)) SetCommTimeouts(port->fd, &port->commTimeouts); - + port->toBeUpdated = 0; } @@ -168,25 +167,25 @@ void updateSettings(PortDescriptor *port) static int queryStatusIO(VALUE self) { PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + return port->status; } -VALUE isClosedIO(VALUE self) +VALUE isOpenIO(VALUE self) { - return queryStatusIO(self) != 0 ? Qtrue : Qfalse; + return queryStatusIO(self) != PORT_OPEN ? Qtrue : Qfalse; } VALUE flushIO(VALUE self) { PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + return (INT2FIX(FlushFileBuffers(port->fd))); } @@ -194,9 +193,9 @@ VALUE flushIO(VALUE self) VALUE bytesAvailableIO(VALUE self) { PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + DWORD Errors; COMSTAT Status; if (ClearCommError(port->fd, &Errors, &Status)) @@ -209,150 +208,148 @@ VALUE bytesAvailableIO(VALUE self) VALUE openIO(VALUE self) { - + PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - - if (port->status == 0) - return INT2FIX(port->status); - + if (port->status == PORT_OPEN) + return self; + DWORD conf_length = sizeof(COMMCONFIG); port->commConfig.dwSize = conf_length; DWORD threading = 0; - + port->fd = CreateFileA(port->settings.ComPort, - GENERIC_READ | GENERIC_WRITE, - 0, - NULL, - OPEN_EXISTING, - threading, - NULL); - + GENERIC_READ | GENERIC_WRITE, + 0, + NULL, + OPEN_EXISTING, + threading, + NULL); + if (port->fd == INVALID_HANDLE_VALUE) { - - port->status = 1; - rb_raise(rb_eException, "Unable to open comport: %s\n", port->settings.ComPort); - + + port->status = PORT_CLOSED; + rb_raise(rb_eRuntimeError, "Unable to open comport: `%s`", port->settings.ComPort); + } else { - - port->status = 0; + + port->status = PORT_OPEN; rb_iv_set(self, "@open", INT2FIX(port->status)); - + GetCommConfig(port->fd, &port->commConfig, &conf_length); GetCommState(port->fd, &(port->commConfig.dcb)); - + port->commConfig.dcb.fBinary = 1; port->commConfig.dcb.fInX = 0; port->commConfig.dcb.fOutX = 0; port->commConfig.dcb.fAbortOnError = 0; port->commConfig.dcb.fNull = 0; - + port->commConfig.dcb.fDtrControl = 1; - + port->toBeUpdated = T_ALL; - + setSettings(self); - + } - - return INT2FIX(port->status); + + return self; } VALUE writeIO(VALUE self, VALUE message) { - + int recv; int len; PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + Check_Type(message, T_STRING); - + len = RSTRING_LEN(message); char cStr[len]; strcpy(cStr, RSTRING_PTR(message)); - + if (!WriteFile(port->fd, cStr, len, (LPDWORD)((void *) &recv), NULL)) { rb_raise(rb_eIOError, "IO: writing of the %d bytes has been failed", len); } - + return (INT2FIX(recv)); - + } VALUE readIO(VALUE self, VALUE rb_int) { - + { Check_Type(rb_int, T_FIXNUM); } - + PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + int n; int len = FIX2INT(rb_int); char buf[len]; - + ReadFile(port->fd, &buf, len, (LPDWORD)((void *) &n), NULL); - + if (n > 0) - return rb_str_new(buf, n); - + return rb_str_new(buf, n); + return Qnil; } VALUE closeIO(VALUE self) { - + PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + flushIO(self); port->status = CloseHandle(port->fd); port->fd = INVALID_HANDLE_VALUE; - + rb_iv_set(self, "@open", INT2FIX(port->status)); - + return INT2FIX(port->status); - + } VALUE initializeStruct(VALUE self, VALUE portName) { - + { Check_Type(portName, T_STRING); } - + PortDescriptor *port = NULL; - + Data_Get_Struct(self, PortDescriptor, port); - + port->settings.BaudRate = BAUD115200; port->settings.Parity = PAR_NONE; port->settings.FlowControl = FLOW_OFF; port->settings.DataBits = DATA_8; port->settings.StopBits = STOP_1; port->settings.Timeout_Millisec = 0; - + snprintf(port->settings.ComPort, sizeof(port->settings.ComPort) - 1, WIN_PATTERN, RSTRING_PTR(portName)); - + platformInitIO(port); - + rb_iv_set(self, "@port", portName); - + return self; } diff --git a/ext/rs_232/windows/port.h b/ext/rs_232/windows/port.h index b9514a1..2932ca0 100644 --- a/ext/rs_232/windows/port.h +++ b/ext/rs_232/windows/port.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Ingenico Inc. + * Copyright (c) 2013, Roman Lishtaba. * * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission notice appear in all copies. @@ -12,9 +12,16 @@ * **/ -#ifndef rs_232_port_h____FILEEXTENSION___ -#define rs_232_port_h____FILEEXTENSION___ +/* + * @author Roman Lishtaba + */ + +#pragma once +#ifdef __cplusplus +extern "C" { +#endif + # include # include # include @@ -22,32 +29,34 @@ # include # include # include -# include "structs.h" - +# include "Structs.h" + #define WIN_PATTERN "\\\\.\\%s" - -void setBaudRate(VALUE, VALUE); - -VALUE getBaudRate(VALUE); - -void setParity(VALUE, VALUE); - -VALUE getParity(VALUE); - -void setDataBits(VALUE, VALUE); - -VALUE getDataBits(VALUE); - -void setStopBits(VALUE, VALUE); - -VALUE getStopBits(VALUE); - -void setFlowControl(VALUE, VALUE); - -VALUE getFlowControl(VALUE); - -void setTimeout(VALUE, VALUE); - -void setSettings(VALUE); - + + void setBaudRate(VALUE, VALUE); + + VALUE getBaudRate(VALUE); + + void setParity(VALUE, VALUE); + + VALUE getParity(VALUE); + + void setDataBits(VALUE, VALUE); + + VALUE getDataBits(VALUE); + + void setStopBits(VALUE, VALUE); + + VALUE getStopBits(VALUE); + + void setFlowControl(VALUE, VALUE); + + VALUE getFlowControl(VALUE); + + void setTimeout(VALUE, VALUE); + + void setSettings(VALUE); + +#ifdef __cplusplus +} #endif diff --git a/lib/rs_232.rb b/lib/rs_232.rb index dafaf69..f715380 100644 --- a/lib/rs_232.rb +++ b/lib/rs_232.rb @@ -1,6 +1,98 @@ require 'rs_232/version' -require 'rs_232.so' +require 'rs_232_native.so' +require 'forwardable' module Rs232 - # see 'examples' folder in order to use existent or decorate your own adapter. + # public accessible factory method + # + # @example + # + # > port = Rs232.new('/dev/tty.ACM0', baud_rate: 9600) + # #=> <#Rs232::Impl @port='/dev/tty.ACM0'> + # > port.open? + # #=> false + # > port.connect + # #=> <#Rs232::Impl @port='/dev/tty.ACM0'> + # port.pending_bytes + # #=> 15 + # port.read(15) + # #=> 'Hello, World!!!' + # + def self.new(port) + Impl.new(port) + end + + # the following class represents ruby public interface + # to native Rs232 implementation + # + # There no public instantiation, can be instantiate through + # the factory method @see Rs232.new + # + class Impl + include Rs232::Constants + + STD_OPTS = { + baud_rate: BAUD_115200, + parity: PAR_NONE, + data_bits: DATA_BITS_8, + stop_bits: STOP_BITS_1, + flow_control: FLOW_OFF, + timeout: 10 + }.freeze + + extend Forwardable + + def_delegators :@impl, + :line_status, + :set_rts, + :set_dtr, + :read, + :write, + :flush, + :close, + :option, #todo: remove + :open? + + def initialize(name, opts = {}) + @impl = Rs232::Native.new(name) + @opts = STD_OPTS.merge(opts).freeze + freeze + end + + def connect + return self if open? + @impl.open.tap do |io| + io.baud_rate = @opts[:baud_rate] + io.parity = @opts[:parity] + io.data_bits = @opts[:data_bits] + io.stop_bits = @opts[:stop_bits] + io.flow_control = @opts[:flow_control] + io.timeout = @opts[:timeout] + end + self + end + + def settings + {}.tap { |o| + o[:baud_rate] = @impl.baud_rate + o[:parity] = @impl.parity + o[:data_bits] = @impl.data_bits + o[:stop_bits] = @impl.stop_bits + o[:flow_control] = @impl.flow_control + o[:timeout] = @impl.timeout + o[:line_status] = @impl.line_status + }.freeze + end + + def open? + @impl.open? + end + + def close + return !open unless open? + 0 == @impl.close + end + end + + private_constant :Impl end diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index e58859e..8b019a6 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '2.3.0' + VERSION = '3.0.0' end diff --git a/lib/tasks/clean.rake b/lib/tasks/clean.rake deleted file mode 100644 index efebb63..0000000 --- a/lib/tasks/clean.rake +++ /dev/null @@ -1,3 +0,0 @@ -require 'rake/clean' - -CLEAN.include %w(**/*.{log} doc coverage tmp pkg **/*.{o,so,bundle} Makefile) diff --git a/lib/tasks/compile.rake b/lib/tasks/compile.rake deleted file mode 100644 index 73ccdca..0000000 --- a/lib/tasks/compile.rake +++ /dev/null @@ -1,6 +0,0 @@ -require 'rake/extensiontask' - -Rake::ExtensionTask.new('rs_232') do |ext| - ext.tmp_dir = 'tmp' - ext.source_pattern = '*.{c,cpp}' -end diff --git a/lib/tasks/cov.rake b/lib/tasks/cov.rake deleted file mode 100644 index af4694f..0000000 --- a/lib/tasks/cov.rake +++ /dev/null @@ -1,5 +0,0 @@ -require 'simplecov' -task :cov do - ENV['SIMPLECOV'] = 'features' - Rake::Task['default'].invoke -end diff --git a/lib/tasks/cucumber.rake b/lib/tasks/cucumber.rake deleted file mode 100644 index 24ebae5..0000000 --- a/lib/tasks/cucumber.rake +++ /dev/null @@ -1,5 +0,0 @@ -require 'cucumber/rake/task' -Cucumber::Rake::Task.new(:features) do |t| - t.fork = true - t.profile = :default -end diff --git a/lib/tasks/rspec.rake b/lib/tasks/rspec.rake deleted file mode 100644 index f35bd25..0000000 --- a/lib/tasks/rspec.rake +++ /dev/null @@ -1,7 +0,0 @@ -require 'rspec/core/rake_task' -desc 'Run RSpec' -RSpec::Core::RakeTask.new do |t| - t.fail_on_error = false - t.verbose = true - t.rspec_opts = '--format RspecJunitFormatter --out rspec.xml --tag ~wip' -end diff --git a/rs_232.gemspec b/rs_232.gemspec index b73fb24..d64ca50 100644 --- a/rs_232.gemspec +++ b/rs_232.gemspec @@ -8,22 +8,32 @@ Gem::Specification.new do |spec| spec.version = Rs232::VERSION spec.authors = ['Roman Lishtaba'] spec.email = ['roman@lishtaba.com'] - spec.description = 'This is an RS-232 posix implementation as a Ruby C Native Extension.' - spec.summary = 'This is a RS-232 implementation as a Ruby C Native Extension.' + + spec.description = 'RS-232 cross-platform implementation as Ruby C native extension.' + spec.summary = <<-SUMMARY +RS-232 cross-platform implementation as Ruby C native extension. +Rubygem offering simple API in order to start using Serial Port communication in your project running on Linux, Mac OS X and Windows. + SUMMARY + spec.homepage = 'http://www.lishtaba.com' spec.license = 'MIT' + spec.files = [ Dir.glob('ext/**/*'), Dir.glob('lib/**/*.rb'), - 'Rakefile', 'rs_232.gemspec', + 'Rakefile', + 'rs_232.gemspec', 'Gemfile', 'LICENSE.txt' ].flatten + spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ['lib'] - spec.extensions = Dir.glob('ext/**/extconf.rb') - spec.add_development_dependency 'bundler', '~> 1.10' + + spec.extensions = 'ext/extconf.rb' + + spec.add_development_dependency 'bundler' spec.add_development_dependency 'rake', '~> 10.0' spec.add_development_dependency 'rubocop', '~> 0' spec.add_development_dependency 'simplecov', '~> 0.9' @@ -32,6 +42,8 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rspec_junit_formatter', '~> 0' spec.add_development_dependency 'yard', '~> 0.8' spec.add_development_dependency 'rake-compiler', '~> 0' + spec.add_development_dependency 'pry' + spec.post_install_message = <<-MSG (::) You've installed binary version of the Rs-232 gem! (::) MSG diff --git a/script/console b/script/console index 8272ed8..965f783 100755 --- a/script/console +++ b/script/console @@ -1,8 +1,7 @@ #!/usr/bin/env ruby -%w(lib examples).each do |path| - expanded_path = File.expand_path("../#{path}", __FILE__) - $LOAD_PATH.unshift(expanded_path) unless $LOAD_PATH.include? expanded_path -end + +$:<< File.join(File.dirname(__FILE__), '../ext/rs_232') +$:<< File.join(File.dirname(__FILE__), '../lib') require 'irb' require 'irb/completion' @@ -10,3 +9,4 @@ require 'rs_232' $stdout.puts "Interactive session loaded. (Rs-232 v#{Rs232::VERSION})" IRB.start + diff --git a/spec/fixtures/test.txt b/spec/fixtures/test.txt new file mode 100644 index 0000000..5ac001b --- /dev/null +++ b/spec/fixtures/test.txt @@ -0,0 +1 @@ +Hello, World!!! diff --git a/spec/lib/constants_spec.rb b/spec/lib/constants_spec.rb new file mode 100644 index 0000000..ab81ac4 --- /dev/null +++ b/spec/lib/constants_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Rs232 do + EXPECTED_CONSTANTS = [ + :BAUD_110, :BAUD_300, :BAUD_600, :BAUD_1200, + :BAUD_2400, :BAUD_4800, :BAUD_9600, :BAUD_19200, + :BAUD_38400, :BAUD_57600, :BAUD_115200, :DATA_BITS_5, + :DATA_BITS_6, :DATA_BITS_7, :DATA_BITS_8, :PAR_NONE, + :PAR_ODD, :PAR_EVEN, :STOP_BITS_1, :STOP_BITS_3, + :FLOW_OFF, :FLOW_HARDWARE, :FLOW_XONXOFF + ].sort.freeze + + it 'should have an VERSION constant' do + current_constants = Rs232::Constants.constants.sort + expect(current_constants).to eq(EXPECTED_CONSTANTS) + end +end diff --git a/vendor/ruby.h b/vendor/ruby.h new file mode 100644 index 0000000..076b5ce --- /dev/null +++ b/vendor/ruby.h @@ -0,0 +1,35 @@ +/********************************************************************** + + ruby.h - + + $Author$ + created at: Sun 10 12:06:15 Jun JST 2007 + + Copyright (C) 2007-2008 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_H +#define RUBY_H 1 + +#define HAVE_RUBY_DEFINES_H 1 +#define HAVE_RUBY_ENCODING_H 1 +#define HAVE_RUBY_INTERN_H 1 +#define HAVE_RUBY_IO_H 1 +#define HAVE_RUBY_MISSING_H 1 +#define HAVE_RUBY_ONIGURUMA_H 1 +#define HAVE_RUBY_RE_H 1 +#define HAVE_RUBY_REGEX_H 1 +#define HAVE_RUBY_RUBY_H 1 +#define HAVE_RUBY_ST_H 1 +#define HAVE_RUBY_THREAD_H 1 +#define HAVE_RUBY_UTIL_H 1 +#define HAVE_RUBY_VERSION_H 1 +#define HAVE_RUBY_VM_H 1 +#ifdef _WIN32 +#define HAVE_RUBY_WIN32_H 1 +#endif + +#include "ruby/ruby.h" + +#endif /* RUBY_H */ diff --git a/vendor/ruby/backward/classext.h b/vendor/ruby/backward/classext.h new file mode 100644 index 0000000..33f3b01 --- /dev/null +++ b/vendor/ruby/backward/classext.h @@ -0,0 +1,18 @@ +#if defined __GNUC__ +#warning use of RClass internals is deprecated +#elif defined _MSC_VER || defined __BORLANDC__ +#pragma message("warning: use of RClass internals is deprecated") +#endif + +#ifndef RUBY_BACKWARD_CLASSEXT_H +#define RUBY_BACKWARD_CLASSEXT_H 1 + +typedef struct rb_deprecated_classext_struct { + VALUE super; +} rb_deprecated_classext_t; + +#undef RCLASS_SUPER(c) +#define RCLASS_EXT(c) ((rb_deprecated_classext_t *)RCLASS(c)->ptr) +#define RCLASS_SUPER(c) (RCLASS(c)->super) + +#endif /* RUBY_BACKWARD_CLASSEXT_H */ diff --git a/vendor/ruby/backward/rubyio.h b/vendor/ruby/backward/rubyio.h new file mode 100644 index 0000000..d5246db --- /dev/null +++ b/vendor/ruby/backward/rubyio.h @@ -0,0 +1,6 @@ +#if defined __GNUC__ +#warning use "ruby/io.h" instead of "rubyio.h" +#elif defined _MSC_VER || defined __BORLANDC__ +#pragma message("warning: use \"ruby/io.h\" instead of \"rubyio.h\"") +#endif +#include "ruby/io.h" diff --git a/vendor/ruby/backward/rubysig.h b/vendor/ruby/backward/rubysig.h new file mode 100644 index 0000000..bb32a2e --- /dev/null +++ b/vendor/ruby/backward/rubysig.h @@ -0,0 +1,52 @@ +/********************************************************************** + + rubysig.h - + + $Author: nobu $ + $Date: 2013-04-05 19:29:38 +0900 (Fri, 05 Apr 2013) $ + created at: Wed Aug 16 01:15:38 JST 1995 + + Copyright (C) 1993-2008 Yukihiro Matsumoto + +**********************************************************************/ + +#if defined __GNUC__ +#warning rubysig.h is obsolete +#elif defined _MSC_VER || defined __BORLANDC__ +#pragma message("warning: rubysig.h is obsolete") +#endif + +#ifndef RUBYSIG_H +#define RUBYSIG_H +#include "ruby/ruby.h" + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +struct rb_blocking_region_buffer; +DEPRECATED(RUBY_EXTERN struct rb_blocking_region_buffer *rb_thread_blocking_region_begin(void)); +DEPRECATED(RUBY_EXTERN void rb_thread_blocking_region_end(struct rb_blocking_region_buffer *)); +#define TRAP_BEG do {struct rb_blocking_region_buffer *__region = rb_thread_blocking_region_begin(); +#define TRAP_END rb_thread_blocking_region_end(__region);} while (0) +#define RUBY_CRITICAL(statements) do {statements;} while (0) +#define DEFER_INTS (0) +#define ENABLE_INTS (1) +#define ALLOW_INTS do {CHECK_INTS;} while (0) +#define CHECK_INTS rb_thread_check_ints() + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif diff --git a/vendor/ruby/backward/st.h b/vendor/ruby/backward/st.h new file mode 100644 index 0000000..514128e --- /dev/null +++ b/vendor/ruby/backward/st.h @@ -0,0 +1,6 @@ +#if defined __GNUC__ +#warning use "ruby/st.h" instead of bare "st.h" +#elif defined _MSC_VER || defined __BORLANDC__ +#pragma message("warning: use \"ruby/st.h\" instead of bare \"st.h\"") +#endif +#include "ruby/st.h" diff --git a/vendor/ruby/backward/util.h b/vendor/ruby/backward/util.h new file mode 100644 index 0000000..6b47940 --- /dev/null +++ b/vendor/ruby/backward/util.h @@ -0,0 +1,6 @@ +#if defined __GNUC__ +#warning use "ruby/util.h" instead of bare "util.h" +#elif defined _MSC_VER || defined __BORLANDC__ +#pragma message("warning: use \"ruby/util.h\" instead of bare \"util.h\"") +#endif +#include "ruby/util.h" diff --git a/vendor/ruby/debug.h b/vendor/ruby/debug.h new file mode 100644 index 0000000..9bfc9b9 --- /dev/null +++ b/vendor/ruby/debug.h @@ -0,0 +1,110 @@ +/********************************************************************** + + ruby/debug.h - + + $Author: ko1 $ + created at: Tue Nov 20 20:35:08 2012 + + Copyright (C) 2012 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RB_DEBUG_H +#define RB_DEBUG_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +/* Note: This file contains experimental APIs. */ +/* APIs can be replaced at Ruby 2.0.1 or later */ + + +/* profile frames APIs */ +int rb_profile_frames(int start, int limit, VALUE *buff, int *lines); +VALUE rb_profile_frame_path(VALUE frame); +VALUE rb_profile_frame_absolute_path(VALUE frame); +VALUE rb_profile_frame_label(VALUE frame); +VALUE rb_profile_frame_base_label(VALUE frame); +VALUE rb_profile_frame_full_label(VALUE frame); +VALUE rb_profile_frame_first_lineno(VALUE frame); +VALUE rb_profile_frame_classpath(VALUE frame); +VALUE rb_profile_frame_singleton_method_p(VALUE frame); +VALUE rb_profile_frame_method_name(VALUE frame); +VALUE rb_profile_frame_qualified_method_name(VALUE frame); + +/* debug inspector APIs */ +typedef struct rb_debug_inspector_struct rb_debug_inspector_t; +typedef VALUE (*rb_debug_inspector_func_t)(const rb_debug_inspector_t *, void *); + +VALUE rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data); +VALUE rb_debug_inspector_frame_self_get(const rb_debug_inspector_t *dc, long index); +VALUE rb_debug_inspector_frame_class_get(const rb_debug_inspector_t *dc, long index); +VALUE rb_debug_inspector_frame_binding_get(const rb_debug_inspector_t *dc, long index); +VALUE rb_debug_inspector_frame_iseq_get(const rb_debug_inspector_t *dc, long index); +VALUE rb_debug_inspector_backtrace_locations(const rb_debug_inspector_t *dc); + +/* Old style set_trace_func APIs */ + +/* duplicated def of include/ruby/ruby.h */ +void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); +int rb_remove_event_hook(rb_event_hook_func_t func); + +int rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data); +void rb_thread_add_event_hook(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); +int rb_thread_remove_event_hook(VALUE thval, rb_event_hook_func_t func); +int rb_thread_remove_event_hook_with_data(VALUE thval, rb_event_hook_func_t func, VALUE data); + +/* TracePoint APIs */ + +VALUE rb_tracepoint_new(VALUE target_thread_not_supported_yet, rb_event_flag_t events, void (*func)(VALUE, void *), void *data); +VALUE rb_tracepoint_enable(VALUE tpval); +VALUE rb_tracepoint_disable(VALUE tpval); +VALUE rb_tracepoint_enabled_p(VALUE tpval); + +typedef struct rb_trace_arg_struct rb_trace_arg_t; +rb_trace_arg_t *rb_tracearg_from_tracepoint(VALUE tpval); + +rb_event_flag_t rb_tracearg_event_flag(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_event(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_lineno(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_path(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_method_id(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_binding(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_self(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_return_value(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_raised_exception(rb_trace_arg_t *trace_arg); +VALUE rb_tracearg_object(rb_trace_arg_t *trace_arg); + +/* Postponed Job API */ +typedef void (*rb_postponed_job_func_t)(void *arg); +int rb_postponed_job_register(unsigned int flags, rb_postponed_job_func_t func, void *data); +int rb_postponed_job_register_one(unsigned int flags, rb_postponed_job_func_t func, void *data); + +/* undocumented advanced tracing APIs */ + +typedef enum { + RUBY_EVENT_HOOK_FLAG_SAFE = 0x01, + RUBY_EVENT_HOOK_FLAG_DELETED = 0x02, + RUBY_EVENT_HOOK_FLAG_RAW_ARG = 0x04 +} rb_event_hook_flag_t; + +void rb_add_event_hook2(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); +void rb_thread_add_event_hook2(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_DEBUG_H */ diff --git a/vendor/ruby/defines.h b/vendor/ruby/defines.h new file mode 100644 index 0000000..0e6b23c --- /dev/null +++ b/vendor/ruby/defines.h @@ -0,0 +1,324 @@ +/************************************************ + + defines.h - + + $Author: akr $ + created at: Wed May 18 00:21:44 JST 1994 + +************************************************/ + +#ifndef RUBY_DEFINES_H +#define RUBY_DEFINES_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/config.h" +#ifdef RUBY_EXTCONF_H +#include RUBY_EXTCONF_H +#endif + +/* AC_INCLUDES_DEFAULT */ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif + +#ifdef HAVE_SYS_SELECT_H +# include +#endif + +#if defined HAVE_SETJMPEX_H && defined HAVE__SETJMPEX +#include +#endif + +#include "ruby/missing.h" + +#define RUBY + +#ifdef __cplusplus +# ifndef HAVE_PROTOTYPES +# define HAVE_PROTOTYPES 1 +# endif +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif + +#undef _ +#ifdef HAVE_PROTOTYPES +# define _(args) args +#else +# define _(args) () +#endif + +#undef __ +#ifdef HAVE_STDARG_PROTOTYPES +# define __(args) args +#else +# define __(args) () +#endif + +#ifdef __cplusplus +#define ANYARGS ... +#else +#define ANYARGS +#endif + +#ifndef RUBY_SYMBOL_EXPORT_BEGIN +# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */ +# define RUBY_SYMBOL_EXPORT_END /* end */ +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +#define xmalloc ruby_xmalloc +#define xmalloc2 ruby_xmalloc2 +#define xcalloc ruby_xcalloc +#define xrealloc ruby_xrealloc +#define xrealloc2 ruby_xrealloc2 +#define xfree ruby_xfree + +#if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 3 +# define RUBY_ATTR_ALLOC_SIZE(params) __attribute__ ((__alloc_size__ params)) +#else +# define RUBY_ATTR_ALLOC_SIZE(params) +#endif + +void *xmalloc(size_t) RUBY_ATTR_ALLOC_SIZE((1)); +void *xmalloc2(size_t,size_t) RUBY_ATTR_ALLOC_SIZE((1,2)); +void *xcalloc(size_t,size_t) RUBY_ATTR_ALLOC_SIZE((1,2)); +void *xrealloc(void*,size_t) RUBY_ATTR_ALLOC_SIZE((2)); +void *xrealloc2(void*,size_t,size_t) RUBY_ATTR_ALLOC_SIZE((2,3)); +void xfree(void*); + +#define STRINGIZE(expr) STRINGIZE0(expr) +#ifndef STRINGIZE0 +#define STRINGIZE0(expr) #expr +#endif + +#ifdef HAVE_LONG_LONG +# define HAVE_TRUE_LONG_LONG 1 +#endif + +#if SIZEOF_LONG_LONG > 0 +# define LONG_LONG long long +#elif SIZEOF___INT64 > 0 +# define HAVE_LONG_LONG 1 +# define LONG_LONG __int64 +# undef SIZEOF_LONG_LONG +# define SIZEOF_LONG_LONG SIZEOF___INT64 +#endif + +#ifndef BDIGIT +# if SIZEOF_INT*2 <= SIZEOF_LONG_LONG +# define BDIGIT unsigned int +# define SIZEOF_BDIGITS SIZEOF_INT +# define BDIGIT_DBL unsigned LONG_LONG +# define BDIGIT_DBL_SIGNED LONG_LONG +# define PRI_BDIGIT_PREFIX "" +# define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX +# elif SIZEOF_INT*2 <= SIZEOF_LONG +# define BDIGIT unsigned int +# define SIZEOF_BDIGITS SIZEOF_INT +# define BDIGIT_DBL unsigned long +# define BDIGIT_DBL_SIGNED long +# define PRI_BDIGIT_PREFIX "" +# define PRI_BDIGIT_DBL_PREFIX "l" +# elif SIZEOF_SHORT*2 <= SIZEOF_LONG +# define BDIGIT unsigned short +# define SIZEOF_BDIGITS SIZEOF_SHORT +# define BDIGIT_DBL unsigned long +# define BDIGIT_DBL_SIGNED long +# define PRI_BDIGIT_PREFIX "h" +# define PRI_BDIGIT_DBL_PREFIX "l" +# else +# define BDIGIT unsigned short +# define SIZEOF_BDIGITS (SIZEOF_LONG/2) +# define SIZEOF_ACTUAL_BDIGIT SIZEOF_LONG +# define BDIGIT_DBL unsigned long +# define BDIGIT_DBL_SIGNED long +# define PRI_BDIGIT_PREFIX "h" +# define PRI_BDIGIT_DBL_PREFIX "l" +# endif +#endif +#ifndef SIZEOF_ACTUAL_BDIGIT +# define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGITS +#endif + +#ifdef PRI_BDIGIT_PREFIX +# define PRIdBDIGIT PRI_BDIGIT_PREFIX"d" +# define PRIiBDIGIT PRI_BDIGIT_PREFIX"i" +# define PRIoBDIGIT PRI_BDIGIT_PREFIX"o" +# define PRIuBDIGIT PRI_BDIGIT_PREFIX"u" +# define PRIxBDIGIT PRI_BDIGIT_PREFIX"x" +# define PRIXBDIGIT PRI_BDIGIT_PREFIX"X" +#endif + +#ifdef PRI_BDIGIT_DBL_PREFIX +# define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d" +# define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i" +# define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o" +# define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u" +# define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x" +# define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X" +#endif + +#ifdef __CYGWIN__ +#undef _WIN32 +#endif + +#if defined(_WIN32) || defined(__EMX__) +#define DOSISH 1 +# define DOSISH_DRIVE_LETTER +#endif + +#ifdef AC_APPLE_UNIVERSAL_BUILD +#undef WORDS_BIGENDIAN +#ifdef __BIG_ENDIAN__ +#define WORDS_BIGENDIAN +#endif +#endif + +#ifdef _WIN32 +#include "ruby/win32.h" +#endif + +#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE) +#include /* intern.h needs fd_set definition */ +#endif + +#ifdef __SYMBIAN32__ +# define FALSE 0 +# define TRUE 1 +#endif + +#ifdef RUBY_EXPORT +#undef RUBY_EXTERN + +#ifndef FALSE +# define FALSE 0 +#elif FALSE +# error FALSE must be false +#endif +#ifndef TRUE +# define TRUE 1 +#elif !TRUE +# error TRUE must be true +#endif + +#endif + +#ifndef RUBY_FUNC_EXPORTED +#define RUBY_FUNC_EXPORTED +#endif + +#ifndef RUBY_EXTERN +#define RUBY_EXTERN extern +#endif + +#ifndef EXTERN +#define EXTERN RUBY_EXTERN /* deprecated */ +#endif + +#ifndef RUBY_MBCHAR_MAXSIZE +#define RUBY_MBCHAR_MAXSIZE INT_MAX + /* MB_CUR_MAX will not work well in C locale */ +#endif + +#if defined(__sparc) +void rb_sparc_flush_register_windows(void); +# define FLUSH_REGISTER_WINDOWS rb_sparc_flush_register_windows() +#elif defined(__ia64) +void *rb_ia64_bsp(void); +void rb_ia64_flushrs(void); +# define FLUSH_REGISTER_WINDOWS rb_ia64_flushrs() +#else +# define FLUSH_REGISTER_WINDOWS ((void)0) +#endif + +#if defined(DOSISH) +#define PATH_SEP ";" +#else +#define PATH_SEP ":" +#endif +#define PATH_SEP_CHAR PATH_SEP[0] + +#define PATH_ENV "PATH" + +#if defined(DOSISH) && !defined(__EMX__) +#define ENV_IGNORECASE +#endif + +#ifndef CASEFOLD_FILESYSTEM +# if defined DOSISH +# define CASEFOLD_FILESYSTEM 1 +# else +# define CASEFOLD_FILESYSTEM 0 +# endif +#endif + +#ifndef DLEXT_MAXLEN +#define DLEXT_MAXLEN 4 +#endif + +#ifndef RUBY_PLATFORM +#define RUBY_PLATFORM "unknown-unknown" +#endif + +#ifndef RUBY_ALIAS_FUNCTION_TYPE +#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \ + type prot {return name args;} +#endif +#ifndef RUBY_ALIAS_FUNCTION_VOID +#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) \ + void prot {name args;} +#endif +#ifndef RUBY_ALIAS_FUNCTION +#define RUBY_ALIAS_FUNCTION(prot, name, args) \ + RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args) +#endif + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_DEFINES_H */ diff --git a/vendor/ruby/digest.h b/vendor/ruby/digest.h new file mode 100644 index 0000000..89b26d8 --- /dev/null +++ b/vendor/ruby/digest.h @@ -0,0 +1,32 @@ +/************************************************ + + digest.h - header file for ruby digest modules + + $Author: akr $ + created at: Fri May 25 08:54:56 JST 2001 + + + Copyright (C) 2001-2006 Akinori MUSHA + + $RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $ + $Id: digest.h 25189 2009-10-02 12:04:37Z akr $ + +************************************************/ + +#include "ruby.h" + +#define RUBY_DIGEST_API_VERSION 2 + +typedef void (*rb_digest_hash_init_func_t)(void *); +typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t); +typedef void (*rb_digest_hash_finish_func_t)(void *, unsigned char *); + +typedef struct { + int api_version; + size_t digest_len; + size_t block_len; + size_t ctx_size; + rb_digest_hash_init_func_t init_func; + rb_digest_hash_update_func_t update_func; + rb_digest_hash_finish_func_t finish_func; +} rb_digest_metadata_t; diff --git a/vendor/ruby/encoding.h b/vendor/ruby/encoding.h new file mode 100644 index 0000000..1c5d8da --- /dev/null +++ b/vendor/ruby/encoding.h @@ -0,0 +1,363 @@ +/********************************************************************** + + encoding.h - + + $Author: matz $ + created at: Thu May 24 11:49:41 JST 2007 + + Copyright (C) 2007 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_ENCODING_H +#define RUBY_ENCODING_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include +#include "ruby/oniguruma.h" + +RUBY_SYMBOL_EXPORT_BEGIN + +#define ENCODING_INLINE_MAX 127 +#define ENCODING_SHIFT (FL_USHIFT+10) +#define ENCODING_MASK (((VALUE)ENCODING_INLINE_MAX)<flags &= ~ENCODING_MASK;\ + RBASIC(obj)->flags |= (VALUE)(i) << ENCODING_SHIFT;\ +} while (0) +#define ENCODING_SET(obj,i) rb_enc_set_index((obj), (i)) + +#define ENCODING_GET_INLINED(obj) (int)((RBASIC(obj)->flags & ENCODING_MASK)>>ENCODING_SHIFT) +#define ENCODING_GET(obj) \ + (ENCODING_GET_INLINED(obj) != ENCODING_INLINE_MAX ? \ + ENCODING_GET_INLINED(obj) : \ + rb_enc_get_index(obj)) + +#define ENCODING_IS_ASCII8BIT(obj) (ENCODING_GET_INLINED(obj) == 0) + +#define ENCODING_MAXNAMELEN 42 + +#define ENC_CODERANGE_MASK ((int)(FL_USER8|FL_USER9)) +#define ENC_CODERANGE_UNKNOWN 0 +#define ENC_CODERANGE_7BIT ((int)FL_USER8) +#define ENC_CODERANGE_VALID ((int)FL_USER9) +#define ENC_CODERANGE_BROKEN ((int)(FL_USER8|FL_USER9)) +#define ENC_CODERANGE(obj) ((int)RBASIC(obj)->flags & ENC_CODERANGE_MASK) +#define ENC_CODERANGE_ASCIIONLY(obj) (ENC_CODERANGE(obj) == ENC_CODERANGE_7BIT) +#define ENC_CODERANGE_SET(obj,cr) (RBASIC(obj)->flags = \ + (RBASIC(obj)->flags & ~ENC_CODERANGE_MASK) | (cr)) +#define ENC_CODERANGE_CLEAR(obj) ENC_CODERANGE_SET((obj),0) + +/* assumed ASCII compatibility */ +#define ENC_CODERANGE_AND(a, b) \ + ((a) == ENC_CODERANGE_7BIT ? (b) : \ + (a) == ENC_CODERANGE_VALID ? ((b) == ENC_CODERANGE_7BIT ? ENC_CODERANGE_VALID : (b)) : \ + ENC_CODERANGE_UNKNOWN) + +#define ENCODING_CODERANGE_SET(obj, encindex, cr) \ + do { \ + VALUE rb_encoding_coderange_obj = (obj); \ + ENCODING_SET(rb_encoding_coderange_obj, (encindex)); \ + ENC_CODERANGE_SET(rb_encoding_coderange_obj, (cr)); \ + } while (0) + +typedef OnigEncodingType rb_encoding; + +int rb_char_to_option_kcode(int c, int *option, int *kcode); + +int rb_enc_replicate(const char *, rb_encoding *); +int rb_define_dummy_encoding(const char *); +#define rb_enc_to_index(enc) ((enc) ? ENC_TO_ENCINDEX(enc) : 0) +int rb_enc_get_index(VALUE obj); +void rb_enc_set_index(VALUE obj, int encindex); +int rb_enc_find_index(const char *name); +int rb_to_encoding_index(VALUE); +rb_encoding* rb_to_encoding(VALUE); +rb_encoding* rb_find_encoding(VALUE); +rb_encoding* rb_enc_get(VALUE); +rb_encoding* rb_enc_compatible(VALUE,VALUE); +rb_encoding* rb_enc_check(VALUE,VALUE); +VALUE rb_enc_associate_index(VALUE, int); +VALUE rb_enc_associate(VALUE, rb_encoding*); +void rb_enc_copy(VALUE dst, VALUE src); + +VALUE rb_enc_str_new(const char*, long, rb_encoding*); +VALUE rb_enc_str_new_cstr(const char*, rb_encoding*); +VALUE rb_enc_reg_new(const char*, long, rb_encoding*, int); +PRINTF_ARGS(VALUE rb_enc_sprintf(rb_encoding *, const char*, ...), 2, 3); +VALUE rb_enc_vsprintf(rb_encoding *, const char*, va_list); +long rb_enc_strlen(const char*, const char*, rb_encoding*); +char* rb_enc_nth(const char*, const char*, long, rb_encoding*); +VALUE rb_obj_encoding(VALUE); +VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc); +VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc); + +VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *); +VALUE rb_str_export_to_enc(VALUE, rb_encoding *); +VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to); +VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts); + +#if defined(__GNUC__) && !defined(__PCC__) +#define rb_enc_str_new_cstr(str, enc) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_enc_str_new((str), (long)strlen(str), (enc)) : \ + rb_enc_str_new_cstr((str), (enc)); \ +}) +#endif + +PRINTF_ARGS(NORETURN(void rb_enc_raise(rb_encoding *, VALUE, const char*, ...)), 3, 4); + +/* index -> rb_encoding */ +rb_encoding* rb_enc_from_index(int idx); + +/* name -> rb_encoding */ +rb_encoding * rb_enc_find(const char *name); + +/* rb_encoding * -> name */ +#define rb_enc_name(enc) (enc)->name + +/* rb_encoding * -> minlen/maxlen */ +#define rb_enc_mbminlen(enc) (enc)->min_enc_len +#define rb_enc_mbmaxlen(enc) (enc)->max_enc_len + +/* -> mbclen (no error notification: 0 < ret <= e-p, no exception) */ +int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc); + +/* -> mbclen (only for valid encoding) */ +int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc); + +/* -> chlen, invalid or needmore */ +int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc); +#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret) +#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret) +#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret) +#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret) +#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret) + +/* -> 0x00..0x7f, -1 */ +int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc); + + +/* -> code (and len) or raise exception */ +unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc); + +/* prototype for obsolete function */ +unsigned int rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc); +/* overriding macro */ +#define rb_enc_codepoint(p,e,enc) rb_enc_codepoint_len((p),(e),0,(enc)) +#define rb_enc_mbc_to_codepoint(p, e, enc) ONIGENC_MBC_TO_CODE((enc),(UChar*)(p),(UChar*)(e)) + +/* -> codelen>0 or raise exception */ +int rb_enc_codelen(int code, rb_encoding *enc); +/* -> 0 for invalid codepoint */ +int rb_enc_code_to_mbclen(int code, rb_encoding *enc); +#define rb_enc_code_to_mbclen(c, enc) ONIGENC_CODE_TO_MBCLEN((enc), (c)); + +/* code,ptr,encoding -> write buf */ +#define rb_enc_mbcput(c,buf,enc) ONIGENC_CODE_TO_MBC((enc),(c),(UChar*)(buf)) + +/* start, ptr, end, encoding -> prev_char */ +#define rb_enc_prev_char(s,p,e,enc) ((char *)onigenc_get_prev_char_head((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e))) +/* start, ptr, end, encoding -> next_char */ +#define rb_enc_left_char_head(s,p,e,enc) ((char *)onigenc_get_left_adjust_char_head((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e))) +#define rb_enc_right_char_head(s,p,e,enc) ((char *)onigenc_get_right_adjust_char_head((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e))) +#define rb_enc_step_back(s,p,e,n,enc) ((char *)onigenc_step_back((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e),(int)(n))) + +/* ptr, ptr, encoding -> newline_or_not */ +#define rb_enc_is_newline(p,end,enc) ONIGENC_IS_MBC_NEWLINE((enc),(UChar*)(p),(UChar*)(end)) + +#define rb_enc_isctype(c,t,enc) ONIGENC_IS_CODE_CTYPE((enc),(c),(t)) +#define rb_enc_isascii(c,enc) ONIGENC_IS_CODE_ASCII(c) +#define rb_enc_isalpha(c,enc) ONIGENC_IS_CODE_ALPHA((enc),(c)) +#define rb_enc_islower(c,enc) ONIGENC_IS_CODE_LOWER((enc),(c)) +#define rb_enc_isupper(c,enc) ONIGENC_IS_CODE_UPPER((enc),(c)) +#define rb_enc_ispunct(c,enc) ONIGENC_IS_CODE_PUNCT((enc),(c)) +#define rb_enc_isalnum(c,enc) ONIGENC_IS_CODE_ALNUM((enc),(c)) +#define rb_enc_isprint(c,enc) ONIGENC_IS_CODE_PRINT((enc),(c)) +#define rb_enc_isspace(c,enc) ONIGENC_IS_CODE_SPACE((enc),(c)) +#define rb_enc_isdigit(c,enc) ONIGENC_IS_CODE_DIGIT((enc),(c)) + +#define rb_enc_asciicompat(enc) (rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc)) + +int rb_enc_casefold(char *to, const char *p, const char *e, rb_encoding *enc); +int rb_enc_toupper(int c, rb_encoding *enc); +int rb_enc_tolower(int c, rb_encoding *enc); +ID rb_intern3(const char*, long, rb_encoding*); +ID rb_interned_id_p(const char *, long, rb_encoding *); +int rb_enc_symname_p(const char*, rb_encoding*); +int rb_enc_symname2_p(const char*, long, rb_encoding*); +int rb_enc_str_coderange(VALUE); +long rb_str_coderange_scan_restartable(const char*, const char*, rb_encoding*, int*); +int rb_enc_str_asciionly_p(VALUE); +#define rb_enc_str_asciicompat_p(str) rb_enc_asciicompat(rb_enc_get(str)) +VALUE rb_enc_from_encoding(rb_encoding *enc); +int rb_enc_unicode_p(rb_encoding *enc); +rb_encoding *rb_ascii8bit_encoding(void); +rb_encoding *rb_utf8_encoding(void); +rb_encoding *rb_usascii_encoding(void); +rb_encoding *rb_locale_encoding(void); +rb_encoding *rb_filesystem_encoding(void); +rb_encoding *rb_default_external_encoding(void); +rb_encoding *rb_default_internal_encoding(void); +#ifndef rb_ascii8bit_encindex +int rb_ascii8bit_encindex(void); +#endif +#ifndef rb_utf8_encindex +int rb_utf8_encindex(void); +#endif +#ifndef rb_usascii_encindex +int rb_usascii_encindex(void); +#endif +int rb_locale_encindex(void); +int rb_filesystem_encindex(void); +VALUE rb_enc_default_external(void); +VALUE rb_enc_default_internal(void); +void rb_enc_set_default_external(VALUE encoding); +void rb_enc_set_default_internal(VALUE encoding); +VALUE rb_locale_charmap(VALUE klass); +long rb_memsearch(const void*,long,const void*,long,rb_encoding*); +char *rb_enc_path_next(const char *,const char *,rb_encoding*); +char *rb_enc_path_skip_prefix(const char *,const char *,rb_encoding*); +char *rb_enc_path_last_separator(const char *,const char *,rb_encoding*); +char *rb_enc_path_end(const char *,const char *,rb_encoding*); +const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc); +const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc); +ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc); + +RUBY_EXTERN VALUE rb_cEncoding; +#define ENC_DUMMY_FLAG (1<<24) +#define ENC_INDEX_MASK (~(~0U<<24)) + +#define ENC_TO_ENCINDEX(enc) (int)((enc)->ruby_encoding_index & ENC_INDEX_MASK) + +#define ENC_DUMMY_P(enc) ((enc)->ruby_encoding_index & ENC_DUMMY_FLAG) +#define ENC_SET_DUMMY(enc) ((enc)->ruby_encoding_index |= ENC_DUMMY_FLAG) + +static inline int +rb_enc_dummy_p(rb_encoding *enc) +{ + return ENC_DUMMY_P(enc) != 0; +} + +/* econv stuff */ + +typedef enum { + econv_invalid_byte_sequence, + econv_undefined_conversion, + econv_destination_buffer_full, + econv_source_buffer_empty, + econv_finished, + econv_after_output, + econv_incomplete_input +} rb_econv_result_t; + +typedef struct rb_econv_t rb_econv_t; + +VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts); +int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding); + +int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags); +int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts); + +rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags); +rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts); + +rb_econv_result_t rb_econv_convert(rb_econv_t *ec, + const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end, + unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end, + int flags); +void rb_econv_close(rb_econv_t *ec); + +/* result: 0:success -1:failure */ +int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname); + +/* result: 0:success -1:failure */ +int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name); +int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name); + +VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags); + +/* result: 0:success -1:failure */ +int rb_econv_insert_output(rb_econv_t *ec, + const unsigned char *str, size_t len, const char *str_encoding); + +/* encoding that rb_econv_insert_output doesn't need conversion */ +const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec); + +/* raise an error if the last rb_econv_convert is error */ +void rb_econv_check_error(rb_econv_t *ec); + +/* returns an exception object or nil */ +VALUE rb_econv_make_exception(rb_econv_t *ec); + +int rb_econv_putbackable(rb_econv_t *ec); +void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n); + +/* returns the corresponding ASCII compatible encoding for encname, + * or NULL if encname is not ASCII incompatible encoding. */ +const char *rb_econv_asciicompat_encoding(const char *encname); + +VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags); +VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags); +VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags); +VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags); +VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags); + +void rb_econv_binmode(rb_econv_t *ec); + +/* flags for rb_econv_open */ + +#define ECONV_ERROR_HANDLER_MASK 0x000000ff + +#define ECONV_INVALID_MASK 0x0000000f +#define ECONV_INVALID_REPLACE 0x00000002 + +#define ECONV_UNDEF_MASK 0x000000f0 +#define ECONV_UNDEF_REPLACE 0x00000020 +#define ECONV_UNDEF_HEX_CHARREF 0x00000030 + +#define ECONV_DECORATOR_MASK 0x0000ff00 +#define ECONV_NEWLINE_DECORATOR_MASK 0x00003f00 +#define ECONV_NEWLINE_DECORATOR_READ_MASK 0x00000f00 +#define ECONV_NEWLINE_DECORATOR_WRITE_MASK 0x00003000 + +#define ECONV_UNIVERSAL_NEWLINE_DECORATOR 0x00000100 +#define ECONV_CRLF_NEWLINE_DECORATOR 0x00001000 +#define ECONV_CR_NEWLINE_DECORATOR 0x00002000 +#define ECONV_XML_TEXT_DECORATOR 0x00004000 +#define ECONV_XML_ATTR_CONTENT_DECORATOR 0x00008000 + +#define ECONV_STATEFUL_DECORATOR_MASK 0x00f00000 +#define ECONV_XML_ATTR_QUOTE_DECORATOR 0x00100000 + +#if defined(RUBY_TEST_CRLF_ENVIRONMENT) || defined(_WIN32) +#define ECONV_DEFAULT_NEWLINE_DECORATOR ECONV_CRLF_NEWLINE_DECORATOR +#else +#define ECONV_DEFAULT_NEWLINE_DECORATOR 0 +#endif + +/* end of flags for rb_econv_open */ + +/* flags for rb_econv_convert */ +#define ECONV_PARTIAL_INPUT 0x00010000 +#define ECONV_AFTER_OUTPUT 0x00020000 +/* end of flags for rb_econv_convert */ + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_ENCODING_H */ diff --git a/vendor/ruby/intern.h b/vendor/ruby/intern.h new file mode 100644 index 0000000..8827593 --- /dev/null +++ b/vendor/ruby/intern.h @@ -0,0 +1,956 @@ +/********************************************************************** + + intern.h - + + $Author: nobu $ + created at: Thu Jun 10 14:22:17 JST 1993 + + Copyright (C) 1993-2007 Yukihiro Matsumoto + Copyright (C) 2000 Network Applied Communication Laboratory, Inc. + Copyright (C) 2000 Information-technology Promotion Agency, Japan + +**********************************************************************/ + +#ifndef RUBY_INTERN_H +#define RUBY_INTERN_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/defines.h" +#ifdef RUBY_EXTCONF_H +#include RUBY_EXTCONF_H +#endif + +#ifdef HAVE_STDARG_PROTOTYPES +# include +#else +# include +#endif + +#include "ruby/st.h" + +RUBY_SYMBOL_EXPORT_BEGIN + +/* + * Functions and variables that are used by more than one source file of + * the kernel. + */ + +#define UNLIMITED_ARGUMENTS (-1) + +/* array.c */ +void rb_mem_clear(register VALUE*, register long); +VALUE rb_assoc_new(VALUE, VALUE); +VALUE rb_check_array_type(VALUE); +VALUE rb_ary_new(void); +VALUE rb_ary_new_capa(long capa); +VALUE rb_ary_new_from_args(long n, ...); +VALUE rb_ary_new_from_values(long n, const VALUE *elts); +VALUE rb_ary_tmp_new(long); +void rb_ary_free(VALUE); +void rb_ary_modify(VALUE); +VALUE rb_ary_freeze(VALUE); +VALUE rb_ary_shared_with_p(VALUE, VALUE); +VALUE rb_ary_aref(int, VALUE*, VALUE); +VALUE rb_ary_subseq(VALUE, long, long); +void rb_ary_store(VALUE, long, VALUE); +VALUE rb_ary_dup(VALUE); +VALUE rb_ary_resurrect(VALUE ary); +VALUE rb_ary_to_ary(VALUE); +VALUE rb_ary_to_s(VALUE); +VALUE rb_ary_cat(VALUE, const VALUE *, long); +VALUE rb_ary_push(VALUE, VALUE); +VALUE rb_ary_pop(VALUE); +VALUE rb_ary_shift(VALUE); +VALUE rb_ary_unshift(VALUE, VALUE); +VALUE rb_ary_entry(VALUE, long); +VALUE rb_ary_each(VALUE); +VALUE rb_ary_join(VALUE, VALUE); +VALUE rb_ary_reverse(VALUE); +VALUE rb_ary_rotate(VALUE, long); +VALUE rb_ary_sort(VALUE); +VALUE rb_ary_sort_bang(VALUE); +VALUE rb_ary_delete(VALUE, VALUE); +VALUE rb_ary_delete_at(VALUE, long); +VALUE rb_ary_clear(VALUE); +VALUE rb_ary_plus(VALUE, VALUE); +VALUE rb_ary_concat(VALUE, VALUE); +VALUE rb_ary_assoc(VALUE, VALUE); +VALUE rb_ary_rassoc(VALUE, VALUE); +VALUE rb_ary_includes(VALUE, VALUE); +VALUE rb_ary_cmp(VALUE, VALUE); +VALUE rb_ary_replace(VALUE copy, VALUE orig); +VALUE rb_get_values_at(VALUE, long, int, VALUE*, VALUE(*)(VALUE,long)); +VALUE rb_ary_resize(VALUE ary, long len); +#define rb_ary_new2 rb_ary_new_capa +#define rb_ary_new3 rb_ary_new_from_args +#define rb_ary_new4 rb_ary_new_from_values +/* bignum.c */ +VALUE rb_big_new(long, int); +int rb_bigzero_p(VALUE x); +VALUE rb_big_clone(VALUE); +void rb_big_2comp(VALUE); +VALUE rb_big_norm(VALUE); +void rb_big_resize(VALUE big, long len); +VALUE rb_cstr_to_inum(const char*, int, int); +VALUE rb_str_to_inum(VALUE, int, int); +VALUE rb_cstr2inum(const char*, int); +VALUE rb_str2inum(VALUE, int); +VALUE rb_big2str(VALUE, int); +DEPRECATED(VALUE rb_big2str0(VALUE, int, int)); +SIGNED_VALUE rb_big2long(VALUE); +#define rb_big2int(x) rb_big2long(x) +VALUE rb_big2ulong(VALUE); +#define rb_big2uint(x) rb_big2ulong(x) +DEPRECATED(VALUE rb_big2ulong_pack(VALUE x)); +#if HAVE_LONG_LONG +LONG_LONG rb_big2ll(VALUE); +unsigned LONG_LONG rb_big2ull(VALUE); +#endif /* HAVE_LONG_LONG */ +DEPRECATED(void rb_quad_pack(char*,VALUE)); +DEPRECATED(VALUE rb_quad_unpack(const char*,int)); +void rb_big_pack(VALUE val, unsigned long *buf, long num_longs); +VALUE rb_big_unpack(unsigned long *buf, long num_longs); +int rb_uv_to_utf8(char[6],unsigned long); +VALUE rb_dbl2big(double); +double rb_big2dbl(VALUE); +VALUE rb_big_cmp(VALUE, VALUE); +VALUE rb_big_eq(VALUE, VALUE); +VALUE rb_big_eql(VALUE, VALUE); +VALUE rb_big_plus(VALUE, VALUE); +VALUE rb_big_minus(VALUE, VALUE); +VALUE rb_big_mul(VALUE, VALUE); +VALUE rb_big_div(VALUE, VALUE); +VALUE rb_big_idiv(VALUE, VALUE); +VALUE rb_big_modulo(VALUE, VALUE); +VALUE rb_big_divmod(VALUE, VALUE); +VALUE rb_big_pow(VALUE, VALUE); +VALUE rb_big_and(VALUE, VALUE); +VALUE rb_big_or(VALUE, VALUE); +VALUE rb_big_xor(VALUE, VALUE); +VALUE rb_big_lshift(VALUE, VALUE); +VALUE rb_big_rshift(VALUE, VALUE); + +/* For rb_integer_pack and rb_integer_unpack: */ +/* "MS" in MSWORD and MSBYTE means "most significant" */ +/* "LS" in LSWORD and LSBYTE means "least significant" */ +#define INTEGER_PACK_MSWORD_FIRST 0x01 +#define INTEGER_PACK_LSWORD_FIRST 0x02 +#define INTEGER_PACK_MSBYTE_FIRST 0x10 +#define INTEGER_PACK_LSBYTE_FIRST 0x20 +#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40 +#define INTEGER_PACK_2COMP 0x80 +#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400 +/* For rb_integer_unpack: */ +#define INTEGER_PACK_FORCE_BIGNUM 0x100 +#define INTEGER_PACK_NEGATIVE 0x200 +/* Combinations: */ +#define INTEGER_PACK_LITTLE_ENDIAN \ + (INTEGER_PACK_LSWORD_FIRST | \ + INTEGER_PACK_LSBYTE_FIRST) +#define INTEGER_PACK_BIG_ENDIAN \ + (INTEGER_PACK_MSWORD_FIRST | \ + INTEGER_PACK_MSBYTE_FIRST) +int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags); +VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags); +size_t rb_absint_size(VALUE val, int *nlz_bits_ret); +size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret); +int rb_absint_singlebit_p(VALUE val); + +/* rational.c */ +VALUE rb_rational_raw(VALUE, VALUE); +#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1)) +#define rb_rational_raw2(x,y) rb_rational_raw((x), (y)) +VALUE rb_rational_new(VALUE, VALUE); +#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1)) +#define rb_rational_new2(x,y) rb_rational_new((x), (y)) +VALUE rb_Rational(VALUE, VALUE); +#define rb_Rational1(x) rb_Rational((x), INT2FIX(1)) +#define rb_Rational2(x,y) rb_Rational((x), (y)) +VALUE rb_flt_rationalize_with_prec(VALUE, VALUE); +VALUE rb_flt_rationalize(VALUE); +/* complex.c */ +VALUE rb_complex_raw(VALUE, VALUE); +#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0)) +#define rb_complex_raw2(x,y) rb_complex_raw((x), (y)) +VALUE rb_complex_new(VALUE, VALUE); +#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0)) +#define rb_complex_new2(x,y) rb_complex_new((x), (y)) +VALUE rb_complex_polar(VALUE, VALUE); +VALUE rb_Complex(VALUE, VALUE); +#define rb_Complex1(x) rb_Complex((x), INT2FIX(0)) +#define rb_Complex2(x,y) rb_Complex((x), (y)) +/* class.c */ +VALUE rb_class_boot(VALUE); +VALUE rb_class_new(VALUE); +VALUE rb_mod_init_copy(VALUE, VALUE); +VALUE rb_singleton_class_clone(VALUE); +void rb_singleton_class_attached(VALUE,VALUE); +VALUE rb_make_metaclass(VALUE, VALUE); +void rb_check_inheritable(VALUE); +VALUE rb_class_inherited(VALUE, VALUE); +VALUE rb_define_class_id(ID, VALUE); +VALUE rb_define_class_id_under(VALUE, ID, VALUE); +VALUE rb_module_new(void); +VALUE rb_define_module_id(ID); +VALUE rb_define_module_id_under(VALUE, ID); +VALUE rb_include_class_new(VALUE, VALUE); +VALUE rb_mod_included_modules(VALUE); +VALUE rb_mod_include_p(VALUE, VALUE); +VALUE rb_mod_ancestors(VALUE); +VALUE rb_class_instance_methods(int, VALUE*, VALUE); +VALUE rb_class_public_instance_methods(int, VALUE*, VALUE); +VALUE rb_class_protected_instance_methods(int, VALUE*, VALUE); +VALUE rb_class_private_instance_methods(int, VALUE*, VALUE); +VALUE rb_obj_singleton_methods(int, VALUE*, VALUE); +void rb_define_method_id(VALUE, ID, VALUE (*)(ANYARGS), int); +void rb_frozen_class_p(VALUE); +void rb_undef(VALUE, ID); +void rb_define_protected_method(VALUE, const char*, VALUE (*)(ANYARGS), int); +void rb_define_private_method(VALUE, const char*, VALUE (*)(ANYARGS), int); +void rb_define_singleton_method(VALUE, const char*, VALUE(*)(ANYARGS), int); +VALUE rb_singleton_class(VALUE); +/* compar.c */ +int rb_cmpint(VALUE, VALUE, VALUE); +NORETURN(void rb_cmperr(VALUE, VALUE)); +/* cont.c */ +VALUE rb_fiber_new(VALUE (*)(ANYARGS), VALUE); +VALUE rb_fiber_resume(VALUE fib, int argc, VALUE *args); +VALUE rb_fiber_yield(int argc, VALUE *args); +VALUE rb_fiber_current(void); +VALUE rb_fiber_alive_p(VALUE); +/* enum.c */ +VALUE rb_enum_values_pack(int, const VALUE*); +/* enumerator.c */ +VALUE rb_enumeratorize(VALUE, VALUE, int, VALUE *); +typedef VALUE rb_enumerator_size_func(VALUE, VALUE, VALUE); +VALUE rb_enumeratorize_with_size(VALUE, VALUE, int, VALUE *, rb_enumerator_size_func *); +#ifndef RUBY_EXPORT +#define rb_enumeratorize_with_size(obj, id, argc, argv, size_fn) \ + rb_enumeratorize_with_size(obj, id, argc, argv, (rb_enumerator_size_func *)(size_fn)) +#endif +#define RETURN_SIZED_ENUMERATOR(obj, argc, argv, size_fn) do { \ + if (!rb_block_given_p()) \ + return rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()),\ + (argc), (argv), (size_fn)); \ + } while (0) +#define RETURN_ENUMERATOR(obj, argc, argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0) +/* error.c */ +VALUE rb_exc_new(VALUE, const char*, long); +VALUE rb_exc_new_cstr(VALUE, const char*); +VALUE rb_exc_new_str(VALUE, VALUE); +#define rb_exc_new2 rb_exc_new_cstr +#define rb_exc_new3 rb_exc_new_str +PRINTF_ARGS(NORETURN(void rb_loaderror(const char*, ...)), 1, 2); +PRINTF_ARGS(NORETURN(void rb_loaderror_with_path(VALUE path, const char*, ...)), 2, 3); +PRINTF_ARGS(NORETURN(void rb_name_error(ID, const char*, ...)), 2, 3); +PRINTF_ARGS(NORETURN(void rb_name_error_str(VALUE, const char*, ...)), 2, 3); +NORETURN(void rb_invalid_str(const char*, const char*)); +PRINTF_ARGS(void rb_compile_error(const char*, int, const char*, ...), 3, 4); +PRINTF_ARGS(void rb_compile_error_with_enc(const char*, int, void *, const char*, ...), 4, 5); +PRINTF_ARGS(void rb_compile_error_append(const char*, ...), 1, 2); +NORETURN(void rb_error_frozen(const char*)); +void rb_error_untrusted(VALUE); +void rb_check_frozen(VALUE); +void rb_check_trusted(VALUE); +#define rb_check_frozen_internal(obj) do { \ + VALUE frozen_obj = (obj); \ + if (OBJ_FROZEN(frozen_obj)) { \ + rb_error_frozen(rb_obj_classname(frozen_obj)); \ + } \ + } while (0) +#define rb_check_trusted_internal(obj) ((void) 0) +#ifdef __GNUC__ +#define rb_check_frozen(obj) __extension__({rb_check_frozen_internal(obj);}) +#define rb_check_trusted(obj) __extension__({rb_check_trusted_internal(obj);}) +#else +static inline void +rb_check_frozen_inline(VALUE obj) +{ + rb_check_frozen_internal(obj); +} +#define rb_check_frozen(obj) rb_check_frozen_inline(obj) +static inline void +rb_check_trusted_inline(VALUE obj) +{ + rb_check_trusted_internal(obj); +} +#define rb_check_trusted(obj) rb_check_trusted_inline(obj) +#endif +void rb_check_copyable(VALUE obj, VALUE orig); + +#define OBJ_INIT_COPY(obj, orig) \ + ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1)) + +/* eval.c */ +int rb_sourceline(void); +const char *rb_sourcefile(void); +VALUE rb_check_funcall(VALUE, ID, int, const VALUE*); + +NORETURN(void rb_error_arity(int, int, int)); +#define rb_check_arity rb_check_arity /* for ifdef */ +static inline void +rb_check_arity(int argc, int min, int max) +{ + if ((argc < min) || (max != UNLIMITED_ARGUMENTS && argc > max)) + rb_error_arity(argc, min, max); +} + +#if defined(NFDBITS) && defined(HAVE_RB_FD_INIT) +typedef struct { + int maxfd; + fd_set *fdset; +} rb_fdset_t; + +void rb_fd_init(rb_fdset_t *); +void rb_fd_term(rb_fdset_t *); +void rb_fd_zero(rb_fdset_t *); +void rb_fd_set(int, rb_fdset_t *); +void rb_fd_clr(int, rb_fdset_t *); +int rb_fd_isset(int, const rb_fdset_t *); +void rb_fd_copy(rb_fdset_t *, const fd_set *, int); +void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src); +int rb_fd_select(int, rb_fdset_t *, rb_fdset_t *, rb_fdset_t *, struct timeval *); + +#define rb_fd_ptr(f) ((f)->fdset) +#define rb_fd_max(f) ((f)->maxfd) + +#elif defined(_WIN32) + +typedef struct { + int capa; + fd_set *fdset; +} rb_fdset_t; + +void rb_fd_init(rb_fdset_t *); +void rb_fd_term(rb_fdset_t *); +#define rb_fd_zero(f) ((f)->fdset->fd_count = 0) +void rb_fd_set(int, rb_fdset_t *); +#define rb_fd_clr(n, f) rb_w32_fdclr((n), (f)->fdset) +#define rb_fd_isset(n, f) rb_w32_fdisset((n), (f)->fdset) +#define rb_fd_copy(d, s, n) rb_w32_fd_copy((d), (s), (n)) +void rb_w32_fd_copy(rb_fdset_t *, const fd_set *, int); +#define rb_fd_dup(d, s) rb_w32_fd_dup((d), (s)) +void rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src); +#define rb_fd_select(n, rfds, wfds, efds, timeout) rb_w32_select((n), (rfds) ? ((rb_fdset_t*)(rfds))->fdset : NULL, (wfds) ? ((rb_fdset_t*)(wfds))->fdset : NULL, (efds) ? ((rb_fdset_t*)(efds))->fdset: NULL, (timeout)) +#define rb_fd_resize(n, f) ((void)(f)) + +#define rb_fd_ptr(f) ((f)->fdset) +#define rb_fd_max(f) ((f)->fdset->fd_count) + +#else + +typedef fd_set rb_fdset_t; +#define rb_fd_zero(f) FD_ZERO(f) +#define rb_fd_set(n, f) FD_SET((n), (f)) +#define rb_fd_clr(n, f) FD_CLR((n), (f)) +#define rb_fd_isset(n, f) FD_ISSET((n), (f)) +#define rb_fd_copy(d, s, n) (*(d) = *(s)) +#define rb_fd_dup(d, s) (*(d) = *(s)) +#define rb_fd_resize(n, f) ((void)(f)) +#define rb_fd_ptr(f) (f) +#define rb_fd_init(f) FD_ZERO(f) +#define rb_fd_init_copy(d, s) (*(d) = *(s)) +#define rb_fd_term(f) ((void)(f)) +#define rb_fd_max(f) FD_SETSIZE +#define rb_fd_select(n, rfds, wfds, efds, timeout) select((n), (rfds), (wfds), (efds), (timeout)) + +#endif + +NORETURN(void rb_exc_raise(VALUE)); +NORETURN(void rb_exc_fatal(VALUE)); +VALUE rb_f_exit(int,VALUE*); +VALUE rb_f_abort(int,VALUE*); +void rb_remove_method(VALUE, const char*); +void rb_remove_method_id(VALUE, ID); +#define rb_disable_super(klass, name) ((void)0) +#define rb_enable_super(klass, name) ((void)0) +#define HAVE_RB_DEFINE_ALLOC_FUNC 1 +typedef VALUE (*rb_alloc_func_t)(VALUE); +void rb_define_alloc_func(VALUE, rb_alloc_func_t); +void rb_undef_alloc_func(VALUE); +rb_alloc_func_t rb_get_alloc_func(VALUE); +void rb_clear_cache(void); +void rb_clear_constant_cache(void); +void rb_clear_method_cache_by_class(VALUE); +void rb_alias(VALUE, ID, ID); +void rb_attr(VALUE,ID,int,int,int); +int rb_method_boundp(VALUE, ID, int); +int rb_method_basic_definition_p(VALUE, ID); +VALUE rb_eval_cmd(VALUE, VALUE, int); +int rb_obj_respond_to(VALUE, ID, int); +int rb_respond_to(VALUE, ID); +VALUE rb_f_notimplement(int argc, VALUE *argv, VALUE obj); +void rb_interrupt(void); +VALUE rb_apply(VALUE, ID, VALUE); +void rb_backtrace(void); +ID rb_frame_this_func(void); +VALUE rb_obj_instance_eval(int, VALUE*, VALUE); +VALUE rb_obj_instance_exec(int, VALUE*, VALUE); +VALUE rb_mod_module_eval(int, VALUE*, VALUE); +VALUE rb_mod_module_exec(int, VALUE*, VALUE); +void rb_load(VALUE, int); +void rb_load_protect(VALUE, int, int*); +NORETURN(void rb_jump_tag(int)); +int rb_provided(const char*); +int rb_feature_provided(const char *, const char **); +void rb_provide(const char*); +VALUE rb_f_require(VALUE, VALUE); +VALUE rb_require_safe(VALUE, int); +void rb_obj_call_init(VALUE, int, VALUE*); +VALUE rb_class_new_instance(int, VALUE*, VALUE); +VALUE rb_block_proc(void); +VALUE rb_block_lambda(void); +VALUE rb_proc_new(VALUE (*)(ANYARGS/* VALUE yieldarg[, VALUE procarg] */), VALUE); +VALUE rb_obj_is_proc(VALUE); +VALUE rb_proc_call(VALUE, VALUE); +VALUE rb_proc_call_with_block(VALUE, int argc, const VALUE *argv, VALUE); +int rb_proc_arity(VALUE); +VALUE rb_proc_lambda_p(VALUE); +VALUE rb_binding_new(void); +VALUE rb_obj_method(VALUE, VALUE); +VALUE rb_obj_is_method(VALUE); +VALUE rb_method_call(int, VALUE*, VALUE); +VALUE rb_method_call_with_block(int, VALUE *, VALUE, VALUE); +int rb_mod_method_arity(VALUE, ID); +int rb_obj_method_arity(VALUE, ID); +VALUE rb_protect(VALUE (*)(VALUE), VALUE, int*); +void rb_set_end_proc(void (*)(VALUE), VALUE); +void rb_exec_end_proc(void); +void rb_thread_schedule(void); +void rb_thread_wait_fd(int); +int rb_thread_fd_writable(int); +void rb_thread_fd_close(int); +int rb_thread_alone(void); +DEPRECATED(void rb_thread_polling(void)); +void rb_thread_sleep(int); +void rb_thread_sleep_forever(void); +void rb_thread_sleep_deadly(void); +VALUE rb_thread_stop(void); +VALUE rb_thread_wakeup(VALUE); +VALUE rb_thread_wakeup_alive(VALUE); +VALUE rb_thread_run(VALUE); +VALUE rb_thread_kill(VALUE); +VALUE rb_thread_create(VALUE (*)(ANYARGS), void*); +DEPRECATED(int rb_thread_select(int, fd_set *, fd_set *, fd_set *, struct timeval *)); +int rb_thread_fd_select(int, rb_fdset_t *, rb_fdset_t *, rb_fdset_t *, struct timeval *); +void rb_thread_wait_for(struct timeval); +VALUE rb_thread_current(void); +VALUE rb_thread_main(void); +VALUE rb_thread_local_aref(VALUE, ID); +VALUE rb_thread_local_aset(VALUE, ID, VALUE); +void rb_thread_atfork(void); +void rb_thread_atfork_before_exec(void); +VALUE rb_exec_recursive(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE); +VALUE rb_exec_recursive_paired(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE,VALUE); +VALUE rb_exec_recursive_outer(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE); +VALUE rb_exec_recursive_paired_outer(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE,VALUE); +/* dir.c */ +VALUE rb_dir_getwd(void); +/* file.c */ +VALUE rb_file_s_expand_path(int, VALUE *); +VALUE rb_file_expand_path(VALUE, VALUE); +VALUE rb_file_s_absolute_path(int, VALUE *); +VALUE rb_file_absolute_path(VALUE, VALUE); +VALUE rb_file_dirname(VALUE fname); +int rb_find_file_ext_safe(VALUE*, const char* const*, int); +VALUE rb_find_file_safe(VALUE, int); +int rb_find_file_ext(VALUE*, const char* const*); +VALUE rb_find_file(VALUE); +VALUE rb_file_directory_p(VALUE,VALUE); +VALUE rb_str_encode_ospath(VALUE); +int rb_is_absolute_path(const char *); +/* gc.c */ +NORETURN(void rb_memerror(void)); +int rb_during_gc(void); +void rb_gc_mark_locations(VALUE*, VALUE*); +void rb_mark_tbl(struct st_table*); +void rb_mark_set(struct st_table*); +void rb_mark_hash(struct st_table*); +void rb_gc_mark_maybe(VALUE); +void rb_gc_mark(VALUE); +void rb_gc_force_recycle(VALUE); +void rb_gc(void); +void rb_gc_copy_finalizer(VALUE,VALUE); +void rb_gc_finalize_deferred(void); +void rb_gc_call_finalizer_at_exit(void); +VALUE rb_gc_enable(void); +VALUE rb_gc_disable(void); +VALUE rb_gc_start(void); +DEPRECATED(void rb_gc_set_params(void)); +VALUE rb_define_finalizer(VALUE, VALUE); +VALUE rb_undefine_finalizer(VALUE); +size_t rb_gc_count(void); +size_t rb_gc_stat(VALUE); +VALUE rb_gc_latest_gc_info(VALUE); +/* hash.c */ +void st_foreach_safe(struct st_table *, int (*)(ANYARGS), st_data_t); +VALUE rb_check_hash_type(VALUE); +void rb_hash_foreach(VALUE, int (*)(ANYARGS), VALUE); +VALUE rb_hash(VALUE); +VALUE rb_hash_new(void); +VALUE rb_hash_dup(VALUE); +VALUE rb_hash_freeze(VALUE); +VALUE rb_hash_aref(VALUE, VALUE); +VALUE rb_hash_lookup(VALUE, VALUE); +VALUE rb_hash_lookup2(VALUE, VALUE, VALUE); +VALUE rb_hash_fetch(VALUE, VALUE); +VALUE rb_hash_aset(VALUE, VALUE, VALUE); +VALUE rb_hash_clear(VALUE); +VALUE rb_hash_delete_if(VALUE); +VALUE rb_hash_delete(VALUE,VALUE); +VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone); +typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value); +VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func); +struct st_table *rb_hash_tbl(VALUE); +int rb_path_check(const char*); +int rb_env_path_tainted(void); +VALUE rb_env_clear(void); +/* io.c */ +#define rb_defout rb_stdout +RUBY_EXTERN VALUE rb_fs; +RUBY_EXTERN VALUE rb_output_fs; +RUBY_EXTERN VALUE rb_rs; +RUBY_EXTERN VALUE rb_default_rs; +RUBY_EXTERN VALUE rb_output_rs; +VALUE rb_io_write(VALUE, VALUE); +VALUE rb_io_gets(VALUE); +VALUE rb_io_getbyte(VALUE); +VALUE rb_io_ungetc(VALUE, VALUE); +VALUE rb_io_ungetbyte(VALUE, VALUE); +VALUE rb_io_close(VALUE); +VALUE rb_io_flush(VALUE); +VALUE rb_io_eof(VALUE); +VALUE rb_io_binmode(VALUE); +VALUE rb_io_ascii8bit_binmode(VALUE); +VALUE rb_io_addstr(VALUE, VALUE); +VALUE rb_io_printf(int, VALUE*, VALUE); +VALUE rb_io_print(int, VALUE*, VALUE); +VALUE rb_io_puts(int, VALUE*, VALUE); +VALUE rb_io_fdopen(int, int, const char*); +VALUE rb_io_get_io(VALUE); +VALUE rb_file_open(const char*, const char*); +VALUE rb_file_open_str(VALUE, const char*); +VALUE rb_gets(void); +void rb_write_error(const char*); +void rb_write_error2(const char*, long); +void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds); +int rb_pipe(int *pipes); +int rb_reserved_fd_p(int fd); +int rb_cloexec_open(const char *pathname, int flags, mode_t mode); +int rb_cloexec_dup(int oldfd); +int rb_cloexec_dup2(int oldfd, int newfd); +int rb_cloexec_pipe(int fildes[2]); +int rb_cloexec_fcntl_dupfd(int fd, int minfd); +#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd) +void rb_update_max_fd(int fd); +void rb_fd_fix_cloexec(int fd); +/* marshal.c */ +VALUE rb_marshal_dump(VALUE, VALUE); +VALUE rb_marshal_load(VALUE); +void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE)); +/* numeric.c */ +NORETURN(void rb_num_zerodiv(void)); +#define RB_NUM_COERCE_FUNCS_NEED_OPID 1 +VALUE rb_num_coerce_bin(VALUE, VALUE, ID); +VALUE rb_num_coerce_cmp(VALUE, VALUE, ID); +VALUE rb_num_coerce_relop(VALUE, VALUE, ID); +VALUE rb_num_coerce_bit(VALUE, VALUE, ID); +VALUE rb_num2fix(VALUE); +VALUE rb_fix2str(VALUE, int); +VALUE rb_dbl_cmp(double, double); +/* object.c */ +int rb_eql(VALUE, VALUE); +VALUE rb_any_to_s(VALUE); +VALUE rb_inspect(VALUE); +VALUE rb_obj_is_instance_of(VALUE, VALUE); +VALUE rb_obj_is_kind_of(VALUE, VALUE); +VALUE rb_obj_alloc(VALUE); +VALUE rb_obj_clone(VALUE); +VALUE rb_obj_dup(VALUE); +VALUE rb_obj_init_copy(VALUE,VALUE); +VALUE rb_obj_taint(VALUE); +VALUE rb_obj_tainted(VALUE); +VALUE rb_obj_untaint(VALUE); +VALUE rb_obj_untrust(VALUE); +VALUE rb_obj_untrusted(VALUE); +VALUE rb_obj_trust(VALUE); +VALUE rb_obj_freeze(VALUE); +VALUE rb_obj_frozen_p(VALUE); +VALUE rb_obj_id(VALUE); +VALUE rb_obj_class(VALUE); +VALUE rb_class_real(VALUE); +VALUE rb_class_inherited_p(VALUE, VALUE); +VALUE rb_class_superclass(VALUE); +VALUE rb_class_get_superclass(VALUE); +VALUE rb_convert_type(VALUE,int,const char*,const char*); +VALUE rb_check_convert_type(VALUE,int,const char*,const char*); +VALUE rb_check_to_integer(VALUE, const char *); +VALUE rb_check_to_float(VALUE); +VALUE rb_to_int(VALUE); +VALUE rb_check_to_int(VALUE); +VALUE rb_Integer(VALUE); +VALUE rb_to_float(VALUE); +VALUE rb_Float(VALUE); +VALUE rb_String(VALUE); +VALUE rb_Array(VALUE); +VALUE rb_Hash(VALUE); +double rb_cstr_to_dbl(const char*, int); +double rb_str_to_dbl(VALUE, int); +/* parse.y */ +RUBY_EXTERN int ruby_sourceline; +RUBY_EXTERN char *ruby_sourcefile; +ID rb_id_attrset(ID); +int rb_is_const_id(ID); +int rb_is_global_id(ID); +int rb_is_instance_id(ID); +int rb_is_attrset_id(ID); +int rb_is_class_id(ID); +int rb_is_local_id(ID); +int rb_is_junk_id(ID); +int rb_symname_p(const char*); +int rb_sym_interned_p(VALUE); +VALUE rb_backref_get(void); +void rb_backref_set(VALUE); +VALUE rb_lastline_get(void); +void rb_lastline_set(VALUE); +VALUE rb_sym_all_symbols(void); +/* process.c */ +void rb_last_status_set(int status, rb_pid_t pid); +VALUE rb_last_status_get(void); +struct rb_exec_arg { + VALUE execarg_obj; +}; +DEPRECATED(int rb_proc_exec_n(int, VALUE*, const char*)); +int rb_proc_exec(const char*); +DEPRECATED(VALUE rb_exec_arg_init(int argc, VALUE *argv, int accept_shell, struct rb_exec_arg *e)); +DEPRECATED(int rb_exec_arg_addopt(struct rb_exec_arg *e, VALUE key, VALUE val)); +DEPRECATED(void rb_exec_arg_fixup(struct rb_exec_arg *e)); +DEPRECATED(int rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)); +DEPRECATED(int rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char*, size_t)); +DEPRECATED(int rb_exec(const struct rb_exec_arg*)); +DEPRECATED(int rb_exec_err(const struct rb_exec_arg*, char*, size_t)); +DEPRECATED(rb_pid_t rb_fork(int*, int (*)(void*), void*, VALUE)); +DEPRECATED(rb_pid_t rb_fork_err(int*, int (*)(void*, char*, size_t), void*, VALUE, char*, size_t)); +VALUE rb_f_exec(int,VALUE*); +rb_pid_t rb_waitpid(rb_pid_t pid, int *status, int flags); +void rb_syswait(rb_pid_t pid); +rb_pid_t rb_spawn(int, VALUE*); +rb_pid_t rb_spawn_err(int, VALUE*, char*, size_t); +VALUE rb_proc_times(VALUE); +VALUE rb_detach_process(rb_pid_t pid); +/* range.c */ +VALUE rb_range_new(VALUE, VALUE, int); +VALUE rb_range_beg_len(VALUE, long*, long*, long, int); +int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp); +/* random.c */ +unsigned int rb_genrand_int32(void); +double rb_genrand_real(void); +void rb_reset_random_seed(void); +VALUE rb_random_bytes(VALUE rnd, long n); +VALUE rb_random_int(VALUE rnd, VALUE max); +unsigned int rb_random_int32(VALUE rnd); +double rb_random_real(VALUE rnd); +unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit); +unsigned long rb_genrand_ulong_limited(unsigned long i); +/* re.c */ +#define rb_memcmp memcmp +int rb_memcicmp(const void*,const void*,long); +void rb_match_busy(VALUE); +VALUE rb_reg_nth_defined(int, VALUE); +VALUE rb_reg_nth_match(int, VALUE); +int rb_reg_backref_number(VALUE match, VALUE backref); +VALUE rb_reg_last_match(VALUE); +VALUE rb_reg_match_pre(VALUE); +VALUE rb_reg_match_post(VALUE); +VALUE rb_reg_match_last(VALUE); +#define HAVE_RB_REG_NEW_STR 1 +VALUE rb_reg_new_str(VALUE, int); +VALUE rb_reg_new(const char *, long, int); +VALUE rb_reg_alloc(void); +VALUE rb_reg_init_str(VALUE re, VALUE s, int options); +VALUE rb_reg_match(VALUE, VALUE); +VALUE rb_reg_match2(VALUE); +int rb_reg_options(VALUE); +/* ruby.c */ +#define rb_argv rb_get_argv() +RUBY_EXTERN VALUE rb_argv0; +VALUE rb_get_argv(void); +void *rb_load_file(const char*); +void *rb_load_file_str(VALUE); +/* signal.c */ +VALUE rb_f_kill(int, VALUE*); +#ifdef POSIX_SIGNAL +#define posix_signal ruby_posix_signal +RETSIGTYPE (*posix_signal(int, RETSIGTYPE (*)(int)))(int); +#endif +void rb_trap_exit(void); +void rb_trap_exec(void); +const char *ruby_signal_name(int); +void ruby_default_signal(int); +/* sprintf.c */ +VALUE rb_f_sprintf(int, const VALUE*); +PRINTF_ARGS(VALUE rb_sprintf(const char*, ...), 1, 2); +VALUE rb_vsprintf(const char*, va_list); +PRINTF_ARGS(VALUE rb_str_catf(VALUE, const char*, ...), 2, 3); +VALUE rb_str_vcatf(VALUE, const char*, va_list); +VALUE rb_str_format(int, const VALUE *, VALUE); +/* string.c */ +VALUE rb_str_new(const char*, long); +VALUE rb_str_new_cstr(const char*); +VALUE rb_str_new_shared(VALUE); +VALUE rb_str_new_frozen(VALUE); +VALUE rb_str_new_with_class(VALUE, const char*, long); +VALUE rb_tainted_str_new_cstr(const char*); +VALUE rb_tainted_str_new(const char*, long); +VALUE rb_external_str_new(const char*, long); +VALUE rb_external_str_new_cstr(const char*); +VALUE rb_locale_str_new(const char*, long); +VALUE rb_locale_str_new_cstr(const char*); +VALUE rb_filesystem_str_new(const char*, long); +VALUE rb_filesystem_str_new_cstr(const char*); +VALUE rb_str_buf_new(long); +VALUE rb_str_buf_new_cstr(const char*); +VALUE rb_str_buf_new2(const char*); +VALUE rb_str_tmp_new(long); +VALUE rb_usascii_str_new(const char*, long); +VALUE rb_usascii_str_new_cstr(const char*); +void rb_str_free(VALUE); +void rb_str_shared_replace(VALUE, VALUE); +VALUE rb_str_buf_append(VALUE, VALUE); +VALUE rb_str_buf_cat(VALUE, const char*, long); +VALUE rb_str_buf_cat2(VALUE, const char*); +VALUE rb_str_buf_cat_ascii(VALUE, const char*); +VALUE rb_obj_as_string(VALUE); +VALUE rb_check_string_type(VALUE); +void rb_must_asciicompat(VALUE); +VALUE rb_str_dup(VALUE); +VALUE rb_str_resurrect(VALUE str); +VALUE rb_str_locktmp(VALUE); +VALUE rb_str_unlocktmp(VALUE); +VALUE rb_str_dup_frozen(VALUE); +#define rb_str_dup_frozen rb_str_new_frozen +VALUE rb_str_plus(VALUE, VALUE); +VALUE rb_str_times(VALUE, VALUE); +long rb_str_sublen(VALUE, long); +VALUE rb_str_substr(VALUE, long, long); +VALUE rb_str_subseq(VALUE, long, long); +char *rb_str_subpos(VALUE, long, long*); +void rb_str_modify(VALUE); +void rb_str_modify_expand(VALUE, long); +VALUE rb_str_freeze(VALUE); +void rb_str_set_len(VALUE, long); +VALUE rb_str_resize(VALUE, long); +VALUE rb_str_cat(VALUE, const char*, long); +VALUE rb_str_cat2(VALUE, const char*); +VALUE rb_str_append(VALUE, VALUE); +VALUE rb_str_concat(VALUE, VALUE); +st_index_t rb_memhash(const void *ptr, long len); +st_index_t rb_hash_start(st_index_t); +st_index_t rb_hash_uint32(st_index_t, uint32_t); +st_index_t rb_hash_uint(st_index_t, st_index_t); +st_index_t rb_hash_end(st_index_t); +#define rb_hash_uint32(h, i) st_hash_uint32((h), (i)) +#define rb_hash_uint(h, i) st_hash_uint((h), (i)) +#define rb_hash_end(h) st_hash_end(h) +st_index_t rb_str_hash(VALUE); +int rb_str_hash_cmp(VALUE,VALUE); +int rb_str_comparable(VALUE, VALUE); +int rb_str_cmp(VALUE, VALUE); +VALUE rb_str_equal(VALUE str1, VALUE str2); +VALUE rb_str_drop_bytes(VALUE, long); +void rb_str_update(VALUE, long, long, VALUE); +VALUE rb_str_replace(VALUE, VALUE); +VALUE rb_str_inspect(VALUE); +VALUE rb_str_dump(VALUE); +VALUE rb_str_split(VALUE, const char*); +void rb_str_associate(VALUE, VALUE); +VALUE rb_str_associated(VALUE); +void rb_str_setter(VALUE, ID, VALUE*); +VALUE rb_str_intern(VALUE); +VALUE rb_sym_to_s(VALUE); +long rb_str_strlen(VALUE); +VALUE rb_str_length(VALUE); +long rb_str_offset(VALUE, long); +size_t rb_str_capacity(VALUE); +VALUE rb_str_ellipsize(VALUE, long); +VALUE rb_str_scrub(VALUE, VALUE); +#if defined(__GNUC__) && !defined(__PCC__) +#define rb_str_new_cstr(str) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_str_new((str), (long)strlen(str)) : \ + rb_str_new_cstr(str); \ +}) +#define rb_tainted_str_new_cstr(str) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_tainted_str_new((str), (long)strlen(str)) : \ + rb_tainted_str_new_cstr(str); \ +}) +#define rb_usascii_str_new_cstr(str) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_usascii_str_new((str), (long)strlen(str)) : \ + rb_usascii_str_new_cstr(str); \ +}) +#define rb_external_str_new_cstr(str) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_external_str_new((str), (long)strlen(str)) : \ + rb_external_str_new_cstr(str); \ +}) +#define rb_locale_str_new_cstr(str) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_locale_str_new((str), (long)strlen(str)) : \ + rb_locale_str_new_cstr(str); \ +}) +#define rb_str_buf_new_cstr(str) __extension__ ( \ +{ \ + (__builtin_constant_p(str)) ? \ + rb_str_buf_cat(rb_str_buf_new((long)strlen(str)), \ + (str), (long)strlen(str)) : \ + rb_str_buf_new_cstr(str); \ +}) +#define rb_str_buf_cat2(str, ptr) __extension__ ( \ +{ \ + (__builtin_constant_p(ptr)) ? \ + rb_str_buf_cat((str), (ptr), (long)strlen(ptr)) : \ + rb_str_buf_cat2((str), (ptr)); \ +}) +#define rb_str_cat2(str, ptr) __extension__ ( \ +{ \ + (__builtin_constant_p(ptr)) ? \ + rb_str_cat((str), (ptr), (long)strlen(ptr)) : \ + rb_str_cat2((str), (ptr)); \ +}) +#define rb_exc_new_cstr(klass, ptr) __extension__ ( \ +{ \ + (__builtin_constant_p(ptr)) ? \ + rb_exc_new((klass), (ptr), (long)strlen(ptr)) : \ + rb_exc_new_cstr((klass), (ptr)); \ +}) +#endif +#define rb_str_new2 rb_str_new_cstr +#define rb_str_new3 rb_str_new_shared +#define rb_str_new4 rb_str_new_frozen +#define rb_str_new5 rb_str_new_with_class +#define rb_tainted_str_new2 rb_tainted_str_new_cstr +#define rb_str_buf_new2 rb_str_buf_new_cstr +#define rb_usascii_str_new2 rb_usascii_str_new_cstr +/* struct.c */ +VALUE rb_struct_new(VALUE, ...); +VALUE rb_struct_define(const char*, ...); +VALUE rb_struct_define_under(VALUE, const char*, ...); +VALUE rb_struct_alloc(VALUE, VALUE); +VALUE rb_struct_initialize(VALUE, VALUE); +VALUE rb_struct_aref(VALUE, VALUE); +VALUE rb_struct_aset(VALUE, VALUE, VALUE); +VALUE rb_struct_getmember(VALUE, ID); +DEPRECATED(VALUE rb_struct_iv_get(VALUE, const char*)); +VALUE rb_struct_s_members(VALUE); +VALUE rb_struct_members(VALUE); +VALUE rb_struct_alloc_noinit(VALUE); +VALUE rb_struct_define_without_accessor(const char *, VALUE, rb_alloc_func_t, ...); +VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...); + +/* thread.c */ +typedef void rb_unblock_function_t(void *); +typedef VALUE rb_blocking_function_t(void *); +void rb_thread_check_ints(void); +int rb_thread_interrupted(VALUE thval); + +/* Use rb_thread_call_without_gvl family instead. */ +DEPRECATED(VALUE rb_thread_blocking_region(rb_blocking_function_t *func, void *data1, + rb_unblock_function_t *ubf, void *data2)); +#define RUBY_UBF_IO ((rb_unblock_function_t *)-1) +#define RUBY_UBF_PROCESS ((rb_unblock_function_t *)-1) +VALUE rb_mutex_new(void); +VALUE rb_mutex_locked_p(VALUE mutex); +VALUE rb_mutex_trylock(VALUE mutex); +VALUE rb_mutex_lock(VALUE mutex); +VALUE rb_mutex_unlock(VALUE mutex); +VALUE rb_mutex_sleep(VALUE self, VALUE timeout); +VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg); +/* time.c */ +VALUE rb_time_new(time_t, long); +VALUE rb_time_nano_new(time_t, long); +VALUE rb_time_num_new(VALUE, VALUE); +struct timeval rb_time_interval(VALUE num); +struct timeval rb_time_timeval(VALUE time); +struct timespec rb_time_timespec(VALUE time); +/* variable.c */ +VALUE rb_mod_name(VALUE); +VALUE rb_class_path(VALUE); +VALUE rb_class_path_cached(VALUE); +void rb_set_class_path(VALUE, VALUE, const char*); +void rb_set_class_path_string(VALUE, VALUE, VALUE); +VALUE rb_path_to_class(VALUE); +VALUE rb_path2class(const char*); +void rb_name_class(VALUE, ID); +VALUE rb_class_name(VALUE); +void rb_autoload(VALUE, ID, const char*); +VALUE rb_autoload_load(VALUE, ID); +VALUE rb_autoload_p(VALUE, ID); +VALUE rb_f_trace_var(int, VALUE*); +VALUE rb_f_untrace_var(int, VALUE*); +VALUE rb_f_global_variables(void); +void rb_alias_variable(ID, ID); +struct st_table* rb_generic_ivar_table(VALUE); +void rb_copy_generic_ivar(VALUE,VALUE); +void rb_free_generic_ivar(VALUE); +VALUE rb_ivar_get(VALUE, ID); +VALUE rb_ivar_set(VALUE, ID, VALUE); +VALUE rb_ivar_defined(VALUE, ID); +void rb_ivar_foreach(VALUE, int (*)(ANYARGS), st_data_t); +st_index_t rb_ivar_count(VALUE); +VALUE rb_attr_get(VALUE, ID); +VALUE rb_obj_instance_variables(VALUE); +VALUE rb_obj_remove_instance_variable(VALUE, VALUE); +void *rb_mod_const_at(VALUE, void*); +void *rb_mod_const_of(VALUE, void*); +VALUE rb_const_list(void*); +VALUE rb_mod_constants(int, VALUE *, VALUE); +VALUE rb_mod_remove_const(VALUE, VALUE); +int rb_const_defined(VALUE, ID); +int rb_const_defined_at(VALUE, ID); +int rb_const_defined_from(VALUE, ID); +VALUE rb_const_get(VALUE, ID); +VALUE rb_const_get_at(VALUE, ID); +VALUE rb_const_get_from(VALUE, ID); +void rb_const_set(VALUE, ID, VALUE); +VALUE rb_const_remove(VALUE, ID); +VALUE rb_mod_const_missing(VALUE,VALUE); +VALUE rb_cvar_defined(VALUE, ID); +void rb_cvar_set(VALUE, ID, VALUE); +VALUE rb_cvar_get(VALUE, ID); +void rb_cv_set(VALUE, const char*, VALUE); +VALUE rb_cv_get(VALUE, const char*); +void rb_define_class_variable(VALUE, const char*, VALUE); +VALUE rb_mod_class_variables(int, VALUE*, VALUE); +VALUE rb_mod_remove_cvar(VALUE, VALUE); + +ID rb_frame_callee(void); +VALUE rb_str_succ(VALUE); +VALUE rb_time_succ(VALUE); +void rb_frame_pop(void); +int rb_frame_method_id_and_class(ID *idp, VALUE *klassp); +VALUE rb_make_backtrace(void); +VALUE rb_make_exception(int, VALUE*); + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_INTERN_H */ diff --git a/vendor/ruby/io.h b/vendor/ruby/io.h new file mode 100644 index 0000000..1034938 --- /dev/null +++ b/vendor/ruby/io.h @@ -0,0 +1,214 @@ +/********************************************************************** + + rubyio.h - + + $Author: nobu $ + created at: Fri Nov 12 16:47:09 JST 1993 + + Copyright (C) 1993-2007 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_IO_H +#define RUBY_IO_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include +#include +#include "ruby/encoding.h" + +#if defined(HAVE_STDIO_EXT_H) +#include +#endif + +#include "ruby/config.h" +#if defined(HAVE_POLL) +# ifdef _AIX +# define reqevents events +# define rtnevents revents +# endif +# include +# ifdef _AIX +# undef reqevents +# undef rtnevents +# undef events +# undef revents +# endif +# define RB_WAITFD_IN POLLIN +# define RB_WAITFD_PRI POLLPRI +# define RB_WAITFD_OUT POLLOUT +#else +# define RB_WAITFD_IN 0x001 +# define RB_WAITFD_PRI 0x002 +# define RB_WAITFD_OUT 0x004 +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +typedef struct { + char *ptr; /* off + len <= capa */ + int off; + int len; + int capa; +} rb_io_buffer_t; + +typedef struct rb_io_t { + int fd; /* file descriptor */ + FILE *stdio_file; /* stdio ptr for read/write if available */ + int mode; /* mode flags: FMODE_XXXs */ + rb_pid_t pid; /* child's pid (for pipes) */ + int lineno; /* number of lines read */ + VALUE pathv; /* pathname for file */ + void (*finalize)(struct rb_io_t*,int); /* finalize proc */ + + rb_io_buffer_t wbuf, rbuf; + + VALUE tied_io_for_writing; + + /* + * enc enc2 read action write action + * NULL NULL force_encoding(default_external) write the byte sequence of str + * e1 NULL force_encoding(e1) convert str.encoding to e1 + * e1 e2 convert from e2 to e1 convert str.encoding to e2 + */ + struct rb_io_enc_t { + rb_encoding *enc; + rb_encoding *enc2; + int ecflags; + VALUE ecopts; + } encs; + + rb_econv_t *readconv; + rb_io_buffer_t cbuf; + + rb_econv_t *writeconv; + VALUE writeconv_asciicompat; + int writeconv_pre_ecflags; + VALUE writeconv_pre_ecopts; + int writeconv_initialized; + + VALUE write_lock; +} rb_io_t; + +#define HAVE_RB_IO_T 1 + +#define FMODE_READABLE 0x00000001 +#define FMODE_WRITABLE 0x00000002 +#define FMODE_READWRITE (FMODE_READABLE|FMODE_WRITABLE) +#define FMODE_BINMODE 0x00000004 +#define FMODE_SYNC 0x00000008 +#define FMODE_TTY 0x00000010 +#define FMODE_DUPLEX 0x00000020 +#define FMODE_APPEND 0x00000040 +#define FMODE_CREATE 0x00000080 +/* #define FMODE_NOREVLOOKUP 0x00000100 */ +#define FMODE_WSPLIT 0x00000200 +#define FMODE_WSPLIT_INITIALIZED 0x00000400 +#define FMODE_TRUNC 0x00000800 +#define FMODE_TEXTMODE 0x00001000 +/* #define FMODE_PREP 0x00010000 */ +#define FMODE_SETENC_BY_BOM 0x00100000 + +#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr) + +#define RB_IO_BUFFER_INIT(buf) do {\ + (buf).ptr = NULL;\ + (buf).off = 0;\ + (buf).len = 0;\ + (buf).capa = 0;\ +} while (0) + +#define MakeOpenFile(obj, fp) do {\ + if (RFILE(obj)->fptr) {\ + rb_io_close(obj);\ + rb_io_fptr_finalize(RFILE(obj)->fptr);\ + RFILE(obj)->fptr = 0;\ + }\ + (fp) = 0;\ + RB_IO_FPTR_NEW(fp);\ + RFILE(obj)->fptr = (fp);\ +} while (0) + +#define RB_IO_FPTR_NEW(fp) do {\ + (fp) = ALLOC(rb_io_t);\ + (fp)->fd = -1;\ + (fp)->stdio_file = NULL;\ + (fp)->mode = 0;\ + (fp)->pid = 0;\ + (fp)->lineno = 0;\ + (fp)->pathv = Qnil;\ + (fp)->finalize = 0;\ + RB_IO_BUFFER_INIT((fp)->wbuf);\ + RB_IO_BUFFER_INIT((fp)->rbuf);\ + RB_IO_BUFFER_INIT((fp)->cbuf);\ + (fp)->readconv = NULL;\ + (fp)->writeconv = NULL;\ + (fp)->writeconv_asciicompat = Qnil;\ + (fp)->writeconv_pre_ecflags = 0;\ + (fp)->writeconv_pre_ecopts = Qnil;\ + (fp)->writeconv_initialized = 0;\ + (fp)->tied_io_for_writing = 0;\ + (fp)->encs.enc = NULL;\ + (fp)->encs.enc2 = NULL;\ + (fp)->encs.ecflags = 0;\ + (fp)->encs.ecopts = Qnil;\ + (fp)->write_lock = 0;\ +} while (0) + +FILE *rb_io_stdio_file(rb_io_t *fptr); + +FILE *rb_fdopen(int, const char*); +int rb_io_modestr_fmode(const char *modestr); +int rb_io_modestr_oflags(const char *modestr); +int rb_io_oflags_fmode(int oflags); +void rb_io_check_writable(rb_io_t*); +void rb_io_check_readable(rb_io_t*); +void rb_io_check_char_readable(rb_io_t *fptr); +void rb_io_check_byte_readable(rb_io_t *fptr); +int rb_io_fptr_finalize(rb_io_t*); +void rb_io_synchronized(rb_io_t*); +void rb_io_check_initialized(rb_io_t*); +void rb_io_check_closed(rb_io_t*); +VALUE rb_io_get_io(VALUE io); +VALUE rb_io_check_io(VALUE io); +VALUE rb_io_get_write_io(VALUE io); +VALUE rb_io_set_write_io(VALUE io, VALUE w); +int rb_io_wait_readable(int); +int rb_io_wait_writable(int); +int rb_wait_for_single_fd(int fd, int events, struct timeval *tv); +void rb_io_set_nonblock(rb_io_t *fptr); +int rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p); +ssize_t rb_io_bufwrite(VALUE io, const void *buf, size_t size); + +/* compatibility for ruby 1.8 and older */ +#define rb_io_mode_flags(modestr) rb_io_modestr_fmode(modestr) +#define rb_io_modenum_flags(oflags) rb_io_oflags_fmode(oflags) + +VALUE rb_io_taint_check(VALUE); +NORETURN(void rb_eof_error(void)); + +void rb_io_read_check(rb_io_t*); +int rb_io_read_pending(rb_io_t*); +DEPRECATED(void rb_read_check(FILE*)); + +struct stat; +VALUE rb_stat_new(const struct stat *); + +/* gc.c */ + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_IO_H */ diff --git a/vendor/ruby/missing.h b/vendor/ruby/missing.h new file mode 100644 index 0000000..abd4b99 --- /dev/null +++ b/vendor/ruby/missing.h @@ -0,0 +1,244 @@ +/************************************************ + + missing.h - prototype for *.c in ./missing, and + for missing timeval struct + + $Author: nobu $ + created at: Sat May 11 23:46:03 JST 2002 + +************************************************/ + +#ifndef RUBY_MISSING_H +#define RUBY_MISSING_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/config.h" +#include +#include /* for INFINITY and NAN */ +#ifdef RUBY_EXTCONF_H +#include RUBY_EXTCONF_H +#endif + +#if !defined(HAVE_STRUCT_TIMEVAL) || !defined(HAVE_STRUCT_TIMESPEC) +#if defined(HAVE_TIME_H) +# include +#endif +#if defined(HAVE_SYS_TIME_H) +# include +#endif +#endif + +#ifndef RUBY_SYMBOL_EXPORT_BEGIN +# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */ +# define RUBY_SYMBOL_EXPORT_END /* end */ +#endif + +#if !defined(HAVE_STRUCT_TIMEVAL) +struct timeval { + time_t tv_sec; /* seconds */ + long tv_usec; /* microseconds */ +}; +#endif /* HAVE_STRUCT_TIMEVAL */ + +#if !defined(HAVE_STRUCT_TIMESPEC) +struct timespec { + time_t tv_sec; /* seconds */ + long tv_nsec; /* nanoseconds */ +}; +#endif + +#if !defined(HAVE_STRUCT_TIMEZONE) +struct timezone { + int tz_minuteswest; + int tz_dsttime; +}; +#endif + +#ifdef RUBY_EXPORT +#undef RUBY_EXTERN +#endif +#ifndef RUBY_EXTERN +#define RUBY_EXTERN extern +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +#ifndef HAVE_ACOSH +RUBY_EXTERN double acosh(double); +RUBY_EXTERN double asinh(double); +RUBY_EXTERN double atanh(double); +#endif + +#ifndef HAVE_CRYPT +RUBY_EXTERN char *crypt(const char *, const char *); +#endif + +#ifndef HAVE_DUP2 +RUBY_EXTERN int dup2(int, int); +#endif + +#ifndef HAVE_EACCESS +RUBY_EXTERN int eaccess(const char*, int); +#endif + +#ifndef HAVE_ROUND +RUBY_EXTERN double round(double); /* numeric.c */ +#endif + +#ifndef HAVE_FINITE +RUBY_EXTERN int finite(double); +#endif + +#ifndef HAVE_FLOCK +RUBY_EXTERN int flock(int, int); +#endif + +/* +#ifndef HAVE_FREXP +RUBY_EXTERN double frexp(double, int *); +#endif +*/ + +#ifndef HAVE_HYPOT +RUBY_EXTERN double hypot(double, double); +#endif + +#ifndef HAVE_ERF +RUBY_EXTERN double erf(double); +RUBY_EXTERN double erfc(double); +#endif + +#ifndef HAVE_TGAMMA +RUBY_EXTERN double tgamma(double); +#endif + +#ifndef HAVE_LGAMMA_R +RUBY_EXTERN double lgamma_r(double, int *); +#endif + +#ifndef HAVE_CBRT +RUBY_EXTERN double cbrt(double); +#endif + +#if !defined(INFINITY) || !defined(NAN) +union bytesequence4_or_float { + unsigned char bytesequence[4]; + float float_value; +}; +#endif + +#ifdef INFINITY +# define HAVE_INFINITY +#else +/** @internal */ +RUBY_EXTERN const union bytesequence4_or_float rb_infinity; +# define INFINITY (rb_infinity.float_value) +#endif + +#ifdef NAN +# define HAVE_NAN +#else +/** @internal */ +RUBY_EXTERN const union bytesequence4_or_float rb_nan; +# define NAN (rb_nan.float_value) +#endif + +#ifndef isinf +# ifndef HAVE_ISINF +# if defined(HAVE_FINITE) && defined(HAVE_ISNAN) +# ifdef HAVE_IEEEFP_H +# include +# endif +# define isinf(x) (!finite(x) && !isnan(x)) +# else +RUBY_EXTERN int isinf(double); +# endif +# endif +#endif + +#ifndef isnan +# ifndef HAVE_ISNAN +RUBY_EXTERN int isnan(double); +# endif +#endif + +/* +#ifndef HAVE_MEMCMP +RUBY_EXTERN int memcmp(const void *, const void *, size_t); +#endif +*/ + +#ifndef HAVE_MEMMOVE +RUBY_EXTERN void *memmove(void *, const void *, size_t); +#endif + +/* +#ifndef HAVE_MODF +RUBY_EXTERN double modf(double, double *); +#endif +*/ + +#ifndef HAVE_STRCHR +RUBY_EXTERN char *strchr(const char *, int); +RUBY_EXTERN char *strrchr(const char *, int); +#endif + +#ifndef HAVE_STRERROR +RUBY_EXTERN char *strerror(int); +#endif + +#ifndef HAVE_STRSTR +RUBY_EXTERN char *strstr(const char *, const char *); +#endif + +/* +#ifndef HAVE_STRTOL +RUBY_EXTERN long strtol(const char *, char **, int); +#endif +*/ + +#ifndef HAVE_STRLCPY +RUBY_EXTERN size_t strlcpy(char *, const char*, size_t); +#endif + +#ifndef HAVE_STRLCAT +RUBY_EXTERN size_t strlcat(char *, const char*, size_t); +#endif + +#ifndef HAVE_SIGNBIT +RUBY_EXTERN int signbit(double x); +#endif + +#ifndef HAVE_FFS +RUBY_EXTERN int ffs(int); +#endif + +#ifdef BROKEN_CLOSE +#include +#include +RUBY_EXTERN int ruby_getpeername(int, struct sockaddr *, socklen_t *); +RUBY_EXTERN int ruby_getsockname(int, struct sockaddr *, socklen_t *); +RUBY_EXTERN int ruby_shutdown(int, int); +RUBY_EXTERN int ruby_close(int); +#endif + +#ifndef HAVE_SETPROCTITLE +RUBY_EXTERN void setproctitle(const char *fmt, ...); +#endif + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_MISSING_H */ diff --git a/vendor/ruby/oniguruma.h b/vendor/ruby/oniguruma.h new file mode 100644 index 0000000..6a26ee4 --- /dev/null +++ b/vendor/ruby/oniguruma.h @@ -0,0 +1,835 @@ +#ifndef ONIGURUMA_H +#define ONIGURUMA_H +/********************************************************************** + oniguruma.h - Onigmo (Oniguruma-mod) (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2009 K.Kosako + * Copyright (c) 2011-2013 K.Takata + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#define ONIGURUMA +#define ONIGURUMA_VERSION_MAJOR 5 +#define ONIGURUMA_VERSION_MINOR 13 +#define ONIGURUMA_VERSION_TEENY 5 + +#ifdef __cplusplus +# ifndef HAVE_PROTOTYPES +# define HAVE_PROTOTYPES 1 +# endif +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif + +/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */ +#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4 +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif + +#ifdef HAVE_STDARG_H +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif + +#ifndef P_ +#if defined(__STDC__) || defined(_WIN32) +# define P_(args) args +#else +# define P_(args) () +#endif +#endif + +#ifndef PV_ +#ifdef HAVE_STDARG_PROTOTYPES +# define PV_(args) args +#else +# define PV_(args) () +#endif +#endif + +#ifndef ONIG_EXTERN +#ifdef RUBY_EXTERN +#define ONIG_EXTERN RUBY_EXTERN +#else +#if defined(_WIN32) && !defined(__GNUC__) +#if defined(EXPORT) || defined(RUBY_EXPORT) +#define ONIG_EXTERN extern __declspec(dllexport) +#else +#define ONIG_EXTERN extern __declspec(dllimport) +#endif +#endif +#endif +#endif + +#ifndef ONIG_EXTERN +#define ONIG_EXTERN extern +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +#include /* for size_t */ + +/* PART: character encoding */ + +#ifndef ONIG_ESCAPE_UCHAR_COLLISION +#define UChar OnigUChar +#endif + +typedef unsigned char OnigUChar; +typedef unsigned int OnigCodePoint; +typedef unsigned int OnigCtype; +typedef size_t OnigDistance; +typedef ptrdiff_t OnigPosition; + +#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0) + +typedef unsigned int OnigCaseFoldType; /* case fold flag */ + +ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag; + +/* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA (1<<1) */ +/* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH (1<<2) */ +#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20) +#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30) + +#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR +#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag + + +#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3 +#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13 +/* 13 => Unicode:0x1ffc */ + +/* code range */ +#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0]) +#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1] +#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2] + +typedef struct { + int byte_len; /* argument(original) character(s) byte length */ + int code_len; /* number of code */ + OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN]; +} OnigCaseFoldCodeItem; + +typedef struct { + OnigCodePoint esc; + OnigCodePoint anychar; + OnigCodePoint anytime; + OnigCodePoint zero_or_one_time; + OnigCodePoint one_or_more_time; + OnigCodePoint anychar_anytime; +} OnigMetaCharTableType; + +typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg); + +typedef struct OnigEncodingTypeST { + int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, struct OnigEncodingTypeST* enc); + const char* name; + int max_enc_len; + int min_enc_len; + int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); + OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); + int (*code_to_mbclen)(OnigCodePoint code, struct OnigEncodingTypeST* enc); + int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, struct OnigEncodingTypeST* enc); + int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, struct OnigEncodingTypeST* enc); + int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, struct OnigEncodingTypeST* enc); + int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], struct OnigEncodingTypeST* enc); + int (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end); + int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, struct OnigEncodingTypeST* enc); + int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], struct OnigEncodingTypeST* enc); + OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); + int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); + int ruby_encoding_index; + unsigned int flags; +} OnigEncodingType; + +typedef OnigEncodingType* OnigEncoding; + +ONIG_EXTERN OnigEncodingType OnigEncodingASCII; + +#define ONIG_ENCODING_ASCII (&OnigEncodingASCII) + +#define ONIG_ENCODING_UNDEF ((OnigEncoding )0) + + +/* work size */ +#define ONIGENC_CODE_TO_MBC_MAXLEN 7 +#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18 +/* 18: 6(max-byte) * 3(case-fold chars) */ + +/* character types */ +#define ONIGENC_CTYPE_NEWLINE 0 +#define ONIGENC_CTYPE_ALPHA 1 +#define ONIGENC_CTYPE_BLANK 2 +#define ONIGENC_CTYPE_CNTRL 3 +#define ONIGENC_CTYPE_DIGIT 4 +#define ONIGENC_CTYPE_GRAPH 5 +#define ONIGENC_CTYPE_LOWER 6 +#define ONIGENC_CTYPE_PRINT 7 +#define ONIGENC_CTYPE_PUNCT 8 +#define ONIGENC_CTYPE_SPACE 9 +#define ONIGENC_CTYPE_UPPER 10 +#define ONIGENC_CTYPE_XDIGIT 11 +#define ONIGENC_CTYPE_WORD 12 +#define ONIGENC_CTYPE_ALNUM 13 /* alpha || digit */ +#define ONIGENC_CTYPE_ASCII 14 +#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII + +/* flags */ +#define ONIGENC_FLAG_NONE 0U +#define ONIGENC_FLAG_UNICODE 1U + +#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e) + +#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF) +#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1) +#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1) +#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128) +#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128) +#define ONIGENC_IS_MBC_WORD(enc,s,end) \ + ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end)) +#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \ + onigenc_ascii_is_code_ctype( \ + ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc) +#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE) + + +#define ONIGENC_NAME(enc) ((enc)->name) + +#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \ + (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc) +#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \ + (enc)->is_allowed_reverse_match(s,end,enc) +#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) \ + (enc)->left_adjust_char_head(start, s, end, enc) +#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \ + (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc) +#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \ + (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc) +#define ONIGENC_STEP_BACK(enc,start,s,end,n) \ + onigenc_step_back((enc),(start),(s),(end),(n)) + +#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n) +#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r)) +#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r) + +#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1) +#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1) + +#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n)) +#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1) +#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r)) + +#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc) + +ONIG_EXTERN +int onigenc_mbclen_approximate P_((const OnigUChar* p,const OnigUChar* e, struct OnigEncodingTypeST* enc)); + +#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen_approximate(p,e,enc) +#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len) +#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc) +#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len) +#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc) +#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc) +#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc) +#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc) +#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \ + (enc)->property_name_to_ctype(enc,p,end) + +#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc) + +#define ONIGENC_IS_CODE_NEWLINE(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE) +#define ONIGENC_IS_CODE_GRAPH(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH) +#define ONIGENC_IS_CODE_PRINT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT) +#define ONIGENC_IS_CODE_ALNUM(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM) +#define ONIGENC_IS_CODE_ALPHA(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA) +#define ONIGENC_IS_CODE_LOWER(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER) +#define ONIGENC_IS_CODE_UPPER(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER) +#define ONIGENC_IS_CODE_CNTRL(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL) +#define ONIGENC_IS_CODE_PUNCT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT) +#define ONIGENC_IS_CODE_SPACE(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE) +#define ONIGENC_IS_CODE_BLANK(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK) +#define ONIGENC_IS_CODE_DIGIT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT) +#define ONIGENC_IS_CODE_XDIGIT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT) +#define ONIGENC_IS_CODE_WORD(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD) + +#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \ + (enc)->get_ctype_code_range(ctype,sbout,ranges,enc) + +ONIG_EXTERN +OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n)); + + +/* encoding API */ +ONIG_EXTERN +int onigenc_init P_((void)); +ONIG_EXTERN +int onigenc_set_default_encoding P_((OnigEncoding enc)); +ONIG_EXTERN +OnigEncoding onigenc_get_default_encoding P_((void)); +ONIG_EXTERN +void onigenc_set_default_caseconv_table P_((const OnigUChar* table)); +ONIG_EXTERN +OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev)); +ONIG_EXTERN +OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end)); +ONIG_EXTERN +OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end)); +ONIG_EXTERN +OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end)); +ONIG_EXTERN +int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end)); +ONIG_EXTERN +int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p)); +ONIG_EXTERN +int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p)); + + + +/* PART: regular expression */ + +/* config parameters */ +#define ONIG_NREGION 10 +#define ONIG_MAX_BACKREF_NUM 1000 +#define ONIG_MAX_REPEAT_NUM 100000 +#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000 +/* constants */ +#define ONIG_MAX_ERROR_MESSAGE_LEN 90 + +typedef unsigned int OnigOptionType; + +#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE + +/* options */ +#define ONIG_OPTION_NONE 0U +#define ONIG_OPTION_IGNORECASE 1U +#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1) +#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1) +#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE +#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1) +#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1) +#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1) +#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1) +#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1) +#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1) +/* options (search time) */ +#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1) +#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1) +#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1) +/* options (ctype range) */ +#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_POSIX_REGION << 1) +#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1) +#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1) +/* options (newline) */ +#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1) +#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF /* limit */ + +#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt)) +#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt)) +#define ONIG_IS_OPTION_ON(options,option) ((options) & (option)) + +/* syntax */ +typedef struct { + unsigned int op; + unsigned int op2; + unsigned int behavior; + OnigOptionType options; /* default option */ + OnigMetaCharTableType meta_char_table; +} OnigSyntaxType; + +ONIG_EXTERN const OnigSyntaxType OnigSyntaxASIS; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58_NG; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxRuby; +ONIG_EXTERN const OnigSyntaxType OnigSyntaxPython; + +/* predefined syntaxes (see regsyntax.c) */ +#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS) +#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic) +#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended) +#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs) +#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep) +#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex) +#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava) +#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58) +#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG) +#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl) +#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) +#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython) + +/* default syntax */ +ONIG_EXTERN const OnigSyntaxType* OnigDefaultSyntax; +#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax + +/* syntax (operators) */ +#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0) +#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1) /* . */ +#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2) /* * */ +#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3) +#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4) /* + */ +#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5) +#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6) /* ? */ +#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7) +#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8) /* {lower,upper} */ +#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9) /* \{lower,upper\} */ +#define ONIG_SYN_OP_VBAR_ALT (1U<<10) /* | */ +#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11) /* \| */ +#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12) /* (...) */ +#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13) /* \(...\) */ +#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14) /* \A, \Z, \z */ +#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15) /* \G */ +#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16) /* \num */ +#define ONIG_SYN_OP_BRACKET_CC (1U<<17) /* [...] */ +#define ONIG_SYN_OP_ESC_W_WORD (1U<<18) /* \w, \W */ +#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19) /* \<. \> */ +#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20) /* \b, \B */ +#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21) /* \s, \S */ +#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22) /* \d, \D */ +#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23) /* ^, $ */ +#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24) /* [:xxxx:] */ +#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25) /* ??,*?,+?,{n,m}? */ +#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26) /* \n,\r,\t,\a ... */ +#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27) /* \cx */ +#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28) /* \OOO */ +#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29) /* \xHH */ +#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30) /* \x{7HHHHHHH} */ +#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31) /* \o{OOO} */ /* NOTIMPL */ + +#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0) /* \Q...\E */ +#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1) /* (?...) */ +#define ONIG_SYN_OP2_OPTION_PERL (1U<<2) /* (?imsxadlu), (?-imsx), (?^imsxalu) */ +#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3) /* (?imxadu), (?-imx) */ +#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4) /* ?+,*+,++ */ +#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5) /* {n,m}+ */ +#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6) /* [...&&..[..]..] */ +#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7) /* (?...) */ +#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8) /* \k */ +#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9) /* \g, \g */ +#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10) /* (?@..),(?@..) */ +#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11) /* \C-x */ +#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12) /* \M-x */ +#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13) /* \v as VTAB */ +#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14) /* \uHHHH */ +#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15) /* \`, \' */ +#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16) /* \p{...}, \P{...} */ +#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */ +/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */ +#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */ +#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */ +#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21) /* \R as (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) */ +#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22) /* \X as (?>\P{M}\p{M}*) */ +#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23) /* \v, \V -- Perl */ /* NOTIMPL */ +#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24) /* \h, \H -- Perl */ /* NOTIMPL */ +#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25) /* \K */ +#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26) /* \g{name}, \g{n} */ +#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27) /* (?&name), (?n), (?R), (?0) */ +#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28) /* (?|...) */ /* NOTIMPL */ +#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29) /* (?(cond)yes...|no...) */ +#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30) /* (?P...), (?P=name), (?P>name) -- Python/PCRE */ +#define ONIG_SYN_OP2_OPTION_JAVA (1U<<31) /* (?idmsux), (?-idmsux) */ /* NOTIMPL */ + +/* syntax (behavior) */ +#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31) /* not implemented */ +#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0) /* ?, *, +, {n,m} */ +#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1) /* error or ignore */ +#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2) /* ...)... */ +#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3) /* {??? */ +#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4) /* {,n} => {0,n} */ +#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5) /* /(\1)/,/\1()/ ..*/ +#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6) /* (?<=a|bc) */ +#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7) /* see doc/RE */ +#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?)(?) */ +#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */ +#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10) /* (?)(?)(?&x) */ + +/* syntax (behavior) in char class [...] */ +#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */ +#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21) /* [..\w..] etc.. */ +#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22) +#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23) /* [0-9-a]=[0-9\-a] */ +/* syntax (behavior) warning */ +#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24) /* [,-,] */ +#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25) /* (?:a*)+ */ +#define ONIG_SYN_WARN_CC_DUP (1U<<26) /* [aa] */ + +/* meta character specifiers (onig_set_meta_char()) */ +#define ONIG_META_CHAR_ESCAPE 0 +#define ONIG_META_CHAR_ANYCHAR 1 +#define ONIG_META_CHAR_ANYTIME 2 +#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3 +#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4 +#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5 + +#define ONIG_INEFFECTIVE_META_CHAR 0 + +/* error codes */ +#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000) +/* normal return */ +#define ONIG_NORMAL 0 +#define ONIG_MISMATCH -1 +#define ONIG_NO_SUPPORT_CONFIG -2 + +/* internal error */ +#define ONIGERR_MEMORY -5 +#define ONIGERR_TYPE_BUG -6 +#define ONIGERR_PARSER_BUG -11 +#define ONIGERR_STACK_BUG -12 +#define ONIGERR_UNDEFINED_BYTECODE -13 +#define ONIGERR_UNEXPECTED_BYTECODE -14 +#define ONIGERR_MATCH_STACK_LIMIT_OVER -15 +#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21 +#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22 +/* general error */ +#define ONIGERR_INVALID_ARGUMENT -30 +/* syntax error */ +#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100 +#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101 +#define ONIGERR_EMPTY_CHAR_CLASS -102 +#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103 +#define ONIGERR_END_PATTERN_AT_ESCAPE -104 +#define ONIGERR_END_PATTERN_AT_META -105 +#define ONIGERR_END_PATTERN_AT_CONTROL -106 +#define ONIGERR_META_CODE_SYNTAX -108 +#define ONIGERR_CONTROL_CODE_SYNTAX -109 +#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110 +#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111 +#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112 +#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113 +#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114 +#define ONIGERR_NESTED_REPEAT_OPERATOR -115 +#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116 +#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117 +#define ONIGERR_END_PATTERN_IN_GROUP -118 +#define ONIGERR_UNDEFINED_GROUP_OPTION -119 +#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121 +#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122 +#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123 +#define ONIGERR_INVALID_CONDITION_PATTERN -124 +/* values error (syntax error) */ +#define ONIGERR_TOO_BIG_NUMBER -200 +#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201 +#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202 +#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203 +#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204 +#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205 +#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206 +#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207 +#define ONIGERR_INVALID_BACKREF -208 +#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209 +#define ONIGERR_TOO_SHORT_DIGITS -210 +#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212 +#define ONIGERR_EMPTY_GROUP_NAME -214 +#define ONIGERR_INVALID_GROUP_NAME -215 +#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216 +#define ONIGERR_UNDEFINED_NAME_REFERENCE -217 +#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218 +#define ONIGERR_MULTIPLEX_DEFINED_NAME -219 +#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220 +#define ONIGERR_NEVER_ENDING_RECURSION -221 +#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222 +#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223 +#define ONIGERR_INVALID_CODE_POINT_VALUE -400 +#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400 +#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401 +#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402 +#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403 + +/* errors related to thread */ +#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001 + + +/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */ +#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31 +#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \ + ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i]) + +typedef struct OnigCaptureTreeNodeStruct { + int group; /* group number */ + OnigPosition beg; + OnigPosition end; + int allocated; + int num_childs; + struct OnigCaptureTreeNodeStruct** childs; +} OnigCaptureTreeNode; + +/* match result region type */ +struct re_registers { + int allocated; + int num_regs; + OnigPosition* beg; + OnigPosition* end; + /* extended */ + OnigCaptureTreeNode* history_root; /* capture history tree root */ +}; + +/* capture tree traverse */ +#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1 +#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2 +#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \ + ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST ) + + +#define ONIG_REGION_NOTPOS -1 + +typedef struct re_registers OnigRegion; + +typedef struct { + OnigEncoding enc; + OnigUChar* par; + OnigUChar* par_end; +} OnigErrorInfo; + +typedef struct { + int lower; + int upper; +} OnigRepeatRange; + +typedef void (*OnigWarnFunc) P_((const char* s)); +extern void onig_null_warn P_((const char* s)); +#define ONIG_NULL_WARN onig_null_warn + +#define ONIG_CHAR_TABLE_SIZE 256 + +/* regex_t state */ +#define ONIG_STATE_NORMAL 0 +#define ONIG_STATE_SEARCHING 1 +#define ONIG_STATE_COMPILING -1 +#define ONIG_STATE_MODIFY -2 + +#define ONIG_STATE(reg) \ + ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state) + +typedef struct re_pattern_buffer { + /* common members of BBuf(bytes-buffer) */ + unsigned char* p; /* compiled pattern */ + unsigned int used; /* used space for p */ + unsigned int alloc; /* allocated space for p */ + + int state; /* normal, searching, compiling */ + int num_mem; /* used memory(...) num counted from 1 */ + int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */ + int num_null_check; /* OP_NULL_CHECK_START/END id counter */ + int num_comb_exp_check; /* combination explosion check */ + int num_call; /* number of subexp call */ + unsigned int capture_history; /* (?@...) flag (1-31) */ + unsigned int bt_mem_start; /* need backtrack flag */ + unsigned int bt_mem_end; /* need backtrack flag */ + int stack_pop_level; + int repeat_range_alloc; + OnigRepeatRange* repeat_range; + + OnigEncoding enc; + OnigOptionType options; + const OnigSyntaxType* syntax; + OnigCaseFoldType case_fold_flag; + void* name_table; + + /* optimization info (string search, char-map and anchors) */ + int optimize; /* optimize flag */ + int threshold_len; /* search str-length for apply optimize */ + int anchor; /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */ + OnigDistance anchor_dmin; /* (SEMI_)END_BUF anchor distance */ + OnigDistance anchor_dmax; /* (SEMI_)END_BUF anchor distance */ + int sub_anchor; /* start-anchor for exact or map */ + unsigned char *exact; + unsigned char *exact_end; + unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */ + int *int_map; /* BM skip for exact_len > 255 */ + int *int_map_backward; /* BM skip for backward search */ + OnigDistance dmin; /* min-distance of exact or map */ + OnigDistance dmax; /* max-distance of exact or map */ + + /* regex_t link chain */ + struct re_pattern_buffer* chain; /* escape compile-conflict */ +} OnigRegexType; + +typedef OnigRegexType* OnigRegex; + +#ifndef ONIG_ESCAPE_REGEX_T_COLLISION + typedef OnigRegexType regex_t; +#endif + + +typedef struct { + int num_of_elements; + OnigEncoding pattern_enc; + OnigEncoding target_enc; + OnigSyntaxType* syntax; + OnigOptionType option; + OnigCaseFoldType case_fold_flag; +} OnigCompileInfo; + +/* Oniguruma Native API */ +ONIG_EXTERN +int onig_init P_((void)); +ONIG_EXTERN +int onig_error_code_to_str PV_((OnigUChar* s, OnigPosition err_code, ...)); +ONIG_EXTERN +void onig_set_warn_func P_((OnigWarnFunc f)); +ONIG_EXTERN +void onig_set_verb_warn_func P_((OnigWarnFunc f)); +ONIG_EXTERN +int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo)); +ONIG_EXTERN +int onig_reg_init P_((OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax)); +ONIG_EXTERN +int onig_new_without_alloc P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); +ONIG_EXTERN +int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); +ONIG_EXTERN +void onig_free P_((OnigRegex)); +ONIG_EXTERN +void onig_free_body P_((OnigRegex)); +ONIG_EXTERN +int onig_recompile P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); +ONIG_EXTERN +int onig_recompile_deluxe P_((OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); +ONIG_EXTERN +OnigPosition onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option)); +ONIG_EXTERN +OnigPosition onig_search_gpos P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option)); +ONIG_EXTERN +OnigPosition onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option)); +ONIG_EXTERN +OnigRegion* onig_region_new P_((void)); +ONIG_EXTERN +void onig_region_init P_((OnigRegion* region)); +ONIG_EXTERN +void onig_region_free P_((OnigRegion* region, int free_self)); +ONIG_EXTERN +void onig_region_copy P_((OnigRegion* to, OnigRegion* from)); +ONIG_EXTERN +void onig_region_clear P_((OnigRegion* region)); +ONIG_EXTERN +int onig_region_resize P_((OnigRegion* region, int n)); +ONIG_EXTERN +int onig_region_set P_((OnigRegion* region, int at, int beg, int end)); +ONIG_EXTERN +int onig_name_to_group_numbers P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums)); +ONIG_EXTERN +int onig_name_to_backref_number P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region)); +ONIG_EXTERN +int onig_foreach_name P_((OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg)); +ONIG_EXTERN +int onig_number_of_names P_((OnigRegex reg)); +ONIG_EXTERN +int onig_number_of_captures P_((OnigRegex reg)); +ONIG_EXTERN +int onig_number_of_capture_histories P_((OnigRegex reg)); +ONIG_EXTERN +OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region)); +ONIG_EXTERN +int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg)); +ONIG_EXTERN +int onig_noname_group_capture_is_active P_((OnigRegex reg)); +ONIG_EXTERN +OnigEncoding onig_get_encoding P_((OnigRegex reg)); +ONIG_EXTERN +OnigOptionType onig_get_options P_((OnigRegex reg)); +ONIG_EXTERN +OnigCaseFoldType onig_get_case_fold_flag P_((OnigRegex reg)); +ONIG_EXTERN +const OnigSyntaxType* onig_get_syntax P_((OnigRegex reg)); +ONIG_EXTERN +int onig_set_default_syntax P_((const OnigSyntaxType* syntax)); +ONIG_EXTERN +void onig_copy_syntax P_((OnigSyntaxType* to, const OnigSyntaxType* from)); +ONIG_EXTERN +unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op)); +ONIG_EXTERN +void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2)); +ONIG_EXTERN +void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior)); +ONIG_EXTERN +void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options)); +ONIG_EXTERN +int onig_set_meta_char P_((OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code)); +ONIG_EXTERN +void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from)); +ONIG_EXTERN +OnigCaseFoldType onig_get_default_case_fold_flag P_((void)); +ONIG_EXTERN +int onig_set_default_case_fold_flag P_((OnigCaseFoldType case_fold_flag)); +ONIG_EXTERN +unsigned int onig_get_match_stack_limit_size P_((void)); +ONIG_EXTERN +int onig_set_match_stack_limit_size P_((unsigned int size)); +ONIG_EXTERN +int onig_end P_((void)); +ONIG_EXTERN +const char* onig_version P_((void)); +ONIG_EXTERN +const char* onig_copyright P_((void)); + +RUBY_SYMBOL_EXPORT_END + +#ifdef __cplusplus +#if 0 +{ /* satisfy cc-mode */ +#endif +} +#endif + +#endif /* ONIGURUMA_H */ diff --git a/vendor/ruby/re.h b/vendor/ruby/re.h new file mode 100644 index 0000000..af6074f --- /dev/null +++ b/vendor/ruby/re.h @@ -0,0 +1,71 @@ +/********************************************************************** + + re.h - + + $Author: nobu $ + created at: Thu Sep 30 14:18:32 JST 1993 + + Copyright (C) 1993-2007 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_RE_H +#define RUBY_RE_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include +#include + +#include "ruby/regex.h" + +RUBY_SYMBOL_EXPORT_BEGIN + +typedef struct re_pattern_buffer Regexp; + +struct rmatch_offset { + long beg; + long end; +}; + +struct rmatch { + struct re_registers regs; + + int char_offset_updated; + int char_offset_num_allocated; + struct rmatch_offset *char_offset; +}; + +struct RMatch { + struct RBasic basic; + VALUE str; + struct rmatch *rmatch; + VALUE regexp; /* RRegexp */ +}; + +#define RMATCH(obj) (R_CAST(RMatch)(obj)) +#define RMATCH_REGS(obj) (&(R_CAST(RMatch)(obj))->rmatch->regs) + +VALUE rb_reg_regcomp(VALUE); +long rb_reg_search(VALUE, VALUE, long, int); +VALUE rb_reg_regsub(VALUE, VALUE, struct re_registers *, VALUE); +long rb_reg_adjust_startpos(VALUE, VALUE, long, int); +void rb_match_busy(VALUE); +VALUE rb_reg_quote(VALUE); +regex_t *rb_reg_prepare_re(VALUE re, VALUE str); + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_RE_H */ diff --git a/vendor/ruby/regex.h b/vendor/ruby/regex.h new file mode 100644 index 0000000..5ccc0aa --- /dev/null +++ b/vendor/ruby/regex.h @@ -0,0 +1,46 @@ +/********************************************************************** + + regex.h - + + $Author: nobu $ + + Copyright (C) 1993-2007 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef ONIGURUMA_REGEX_H +#define ONIGURUMA_REGEX_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#ifdef RUBY +#include "ruby/oniguruma.h" +#else +#include "oniguruma.h" +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +#ifndef ONIG_RUBY_M17N + +ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding; + +#define mbclen(p,e,enc) rb_enc_mbclen((p),(e),(enc)) + +#endif /* ifndef ONIG_RUBY_M17N */ + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* ONIGURUMA_REGEX_H */ diff --git a/vendor/ruby/ruby.h b/vendor/ruby/ruby.h new file mode 100644 index 0000000..10ac202 --- /dev/null +++ b/vendor/ruby/ruby.h @@ -0,0 +1,1872 @@ +/********************************************************************** + + ruby/ruby.h - + + $Author: ko1 $ + created at: Thu Jun 10 14:26:32 JST 1993 + + Copyright (C) 1993-2008 Yukihiro Matsumoto + Copyright (C) 2000 Network Applied Communication Laboratory, Inc. + Copyright (C) 2000 Information-technology Promotion Agency, Japan + +**********************************************************************/ + +#ifndef RUBY_RUBY_H +#define RUBY_RUBY_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/config.h" +#ifdef RUBY_EXTCONF_H +#include RUBY_EXTCONF_H +#endif + +#include "defines.h" + +#define NORETURN_STYLE_NEW 1 +#ifndef NORETURN +# define NORETURN(x) x +#endif +#ifndef DEPRECATED +# define DEPRECATED(x) x +#endif +#ifndef NOINLINE +# define NOINLINE(x) x +#endif +#ifndef UNREACHABLE +# define UNREACHABLE /* unreachable */ +#endif + +#ifdef __GNUC__ +#define PRINTF_ARGS(decl, string_index, first_to_check) \ + decl __attribute__((format(printf, string_index, first_to_check))) +#else +#define PRINTF_ARGS(decl, string_index, first_to_check) decl +#endif + +#ifdef HAVE_INTRINSICS_H +# include +#endif + +#include + +RUBY_SYMBOL_EXPORT_BEGIN + +/* Make alloca work the best possible way. */ +#ifdef __GNUC__ +# ifndef atarist +# ifndef alloca +# define alloca __builtin_alloca +# endif +# endif /* atarist */ +#else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX +#pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca(); +# endif +# endif /* AIX */ +# endif /* HAVE_ALLOCA_H */ +#endif /* __GNUC__ */ + +#if defined HAVE_UINTPTR_T && 0 +typedef uintptr_t VALUE; +typedef uintptr_t ID; +# define SIGNED_VALUE intptr_t +# define SIZEOF_VALUE SIZEOF_UINTPTR_T +# undef PRI_VALUE_PREFIX +#elif SIZEOF_LONG == SIZEOF_VOIDP +typedef unsigned long VALUE; +typedef unsigned long ID; +# define SIGNED_VALUE long +# define SIZEOF_VALUE SIZEOF_LONG +# define PRI_VALUE_PREFIX "l" +#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP +typedef unsigned LONG_LONG VALUE; +typedef unsigned LONG_LONG ID; +# define SIGNED_VALUE LONG_LONG +# define LONG_LONG_VALUE 1 +# define SIZEOF_VALUE SIZEOF_LONG_LONG +# define PRI_VALUE_PREFIX PRI_LL_PREFIX +#else +# error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<---- +#endif + +typedef char ruby_check_sizeof_int[SIZEOF_INT == sizeof(int) ? 1 : -1]; +typedef char ruby_check_sizeof_long[SIZEOF_LONG == sizeof(long) ? 1 : -1]; +#ifdef HAVE_LONG_LONG +typedef char ruby_check_sizeof_long_long[SIZEOF_LONG_LONG == sizeof(LONG_LONG) ? 1 : -1]; +#endif +typedef char ruby_check_sizeof_voidp[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1]; + +#ifndef PRI_INT_PREFIX +#define PRI_INT_PREFIX "" +#endif +#ifndef PRI_LONG_PREFIX +#define PRI_LONG_PREFIX "l" +#endif + +#if SIZEOF_LONG == 8 +#define PRI_64_PREFIX PRI_LONG_PREFIX +#elif SIZEOF_LONG_LONG == 8 +#define PRI_64_PREFIX PRI_LL_PREFIX +#endif + +#if defined PRIdPTR && !defined PRI_VALUE_PREFIX +#define PRIdVALUE PRIdPTR +#define PRIoVALUE PRIoPTR +#define PRIuVALUE PRIuPTR +#define PRIxVALUE PRIxPTR +#define PRIXVALUE PRIXPTR +#define PRIsVALUE PRIiPTR +#else +#define PRIdVALUE PRI_VALUE_PREFIX"d" +#define PRIoVALUE PRI_VALUE_PREFIX"o" +#define PRIuVALUE PRI_VALUE_PREFIX"u" +#define PRIxVALUE PRI_VALUE_PREFIX"x" +#define PRIXVALUE PRI_VALUE_PREFIX"X" +#define PRIsVALUE PRI_VALUE_PREFIX"i" +#endif +#ifndef PRI_VALUE_PREFIX +# define PRI_VALUE_PREFIX "" +#endif + +#ifndef PRI_TIMET_PREFIX +# if SIZEOF_TIME_T == SIZEOF_INT +# define PRI_TIMET_PREFIX +# elif SIZEOF_TIME_T == SIZEOF_LONG +# define PRI_TIMET_PREFIX "l" +# elif SIZEOF_TIME_T == SIZEOF_LONG_LONG +# define PRI_TIMET_PREFIX PRI_LL_PREFIX +# endif +#endif + +#if defined PRI_PTRDIFF_PREFIX +#elif SIZEOF_PTRDIFF_T == SIZEOF_INT +# define PRI_PTRDIFF_PREFIX "" +#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG +# define PRI_PTRDIFF_PREFIX "l" +#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG +# define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX +#endif +#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d" +#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i" +#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o" +#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u" +#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x" +#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X" + +#if defined PRI_SIZE_PREFIX +#elif SIZEOF_SIZE_T == SIZEOF_INT +# define PRI_SIZE_PREFIX "" +#elif SIZEOF_SIZE_T == SIZEOF_LONG +# define PRI_SIZE_PREFIX "l" +#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG +# define PRI_SIZE_PREFIX PRI_LL_PREFIX +#endif +#define PRIdSIZE PRI_SIZE_PREFIX"d" +#define PRIiSIZE PRI_SIZE_PREFIX"i" +#define PRIoSIZE PRI_SIZE_PREFIX"o" +#define PRIuSIZE PRI_SIZE_PREFIX"u" +#define PRIxSIZE PRI_SIZE_PREFIX"x" +#define PRIXSIZE PRI_SIZE_PREFIX"X" + +#ifdef __STDC__ +# include +#else +# ifndef LONG_MAX +# ifdef HAVE_LIMITS_H +# include +# else + /* assuming 32bit(2's complement) long */ +# define LONG_MAX 2147483647 +# endif +# endif +# ifndef LONG_MIN +# define LONG_MIN (-LONG_MAX-1) +# endif +# ifndef CHAR_BIT +# define CHAR_BIT 8 +# endif +#endif + +#ifdef HAVE_LONG_LONG +# ifndef LLONG_MAX +# ifdef LONG_LONG_MAX +# define LLONG_MAX LONG_LONG_MAX +# else +# ifdef _I64_MAX +# define LLONG_MAX _I64_MAX +# else + /* assuming 64bit(2's complement) long long */ +# define LLONG_MAX 9223372036854775807LL +# endif +# endif +# endif +# ifndef LLONG_MIN +# ifdef LONG_LONG_MIN +# define LLONG_MIN LONG_LONG_MIN +# else +# ifdef _I64_MIN +# define LLONG_MIN _I64_MIN +# else +# define LLONG_MIN (-LLONG_MAX-1) +# endif +# endif +# endif +#endif + +#define FIXNUM_MAX (LONG_MAX>>1) +#define FIXNUM_MIN RSHIFT((long)LONG_MIN,1) + +#define INT2FIX(i) ((VALUE)(((SIGNED_VALUE)(i))<<1 | FIXNUM_FLAG)) +#define LONG2FIX(i) INT2FIX(i) +#define rb_fix_new(v) INT2FIX(v) +VALUE rb_int2inum(SIGNED_VALUE); + +#define rb_int_new(v) rb_int2inum(v) +VALUE rb_uint2inum(VALUE); + +#define rb_uint_new(v) rb_uint2inum(v) + +#ifdef HAVE_LONG_LONG +VALUE rb_ll2inum(LONG_LONG); +#define LL2NUM(v) rb_ll2inum(v) +VALUE rb_ull2inum(unsigned LONG_LONG); +#define ULL2NUM(v) rb_ull2inum(v) +#endif + +#ifndef OFFT2NUM +#if SIZEOF_OFF_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) +# define OFFT2NUM(v) LL2NUM(v) +#elif SIZEOF_OFF_T == SIZEOF_LONG +# define OFFT2NUM(v) LONG2NUM(v) +#else +# define OFFT2NUM(v) INT2NUM(v) +#endif +#endif + +#if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) +# define SIZET2NUM(v) ULL2NUM(v) +# define SSIZET2NUM(v) LL2NUM(v) +#elif SIZEOF_SIZE_T == SIZEOF_LONG +# define SIZET2NUM(v) ULONG2NUM(v) +# define SSIZET2NUM(v) LONG2NUM(v) +#else +# define SIZET2NUM(v) UINT2NUM(v) +# define SSIZET2NUM(v) INT2NUM(v) +#endif + +#ifndef SIZE_MAX +# if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) +# define SIZE_MAX ULLONG_MAX +# define SIZE_MIN ULLONG_MIN +# elif SIZEOF_SIZE_T == SIZEOF_LONG +# define SIZE_MAX ULONG_MAX +# define SIZE_MIN ULONG_MIN +# elif SIZEOF_SIZE_T == SIZEOF_INT +# define SIZE_MAX UINT_MAX +# define SIZE_MIN UINT_MIN +# else +# define SIZE_MAX USHRT_MAX +# define SIZE_MIN USHRT_MIN +# endif +#endif + +#ifndef SSIZE_MAX +# if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) +# define SSIZE_MAX LLONG_MAX +# define SSIZE_MIN LLONG_MIN +# elif SIZEOF_SIZE_T == SIZEOF_LONG +# define SSIZE_MAX LONG_MAX +# define SSIZE_MIN LONG_MIN +# elif SIZEOF_SIZE_T == SIZEOF_INT +# define SSIZE_MAX INT_MAX +# define SSIZE_MIN INT_MIN +# else +# define SSIZE_MAX SHRT_MAX +# define SSIZE_MIN SHRT_MIN +# endif +#endif + +#if SIZEOF_INT < SIZEOF_VALUE +NORETURN(void rb_out_of_int(SIGNED_VALUE num)); +#endif + +#if SIZEOF_INT < SIZEOF_LONG +static inline int +rb_long2int_inline(long n) +{ + int i = (int)n; + if ((long)i != n) + rb_out_of_int(n); + + return i; +} +#define rb_long2int(n) rb_long2int_inline(n) +#else +#define rb_long2int(n) ((int)(n)) +#endif + +#ifndef PIDT2NUM +#define PIDT2NUM(v) LONG2NUM(v) +#endif +#ifndef NUM2PIDT +#define NUM2PIDT(v) NUM2LONG(v) +#endif +#ifndef UIDT2NUM +#define UIDT2NUM(v) LONG2NUM(v) +#endif +#ifndef NUM2UIDT +#define NUM2UIDT(v) NUM2LONG(v) +#endif +#ifndef GIDT2NUM +#define GIDT2NUM(v) LONG2NUM(v) +#endif +#ifndef NUM2GIDT +#define NUM2GIDT(v) NUM2LONG(v) +#endif +#ifndef NUM2MODET +#define NUM2MODET(v) NUM2INT(v) +#endif +#ifndef MODET2NUM +#define MODET2NUM(v) INT2NUM(v) +#endif + +#define FIX2LONG(x) ((long)RSHIFT((SIGNED_VALUE)(x),1)) +#define FIX2ULONG(x) ((unsigned long)FIX2LONG(x)) +#define FIXNUM_P(f) (((int)(SIGNED_VALUE)(f))&FIXNUM_FLAG) +#define POSFIXABLE(f) ((f) < FIXNUM_MAX+1) +#define NEGFIXABLE(f) ((f) >= FIXNUM_MIN) +#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f)) + +#define IMMEDIATE_P(x) ((VALUE)(x) & IMMEDIATE_MASK) + +#define SYMBOL_P(x) (((VALUE)(x)&~((~(VALUE)0)<= SIZEOF_DOUBLE +#define USE_FLONUM 1 +#else +#define USE_FLONUM 0 +#endif +#endif + +#if USE_FLONUM +#define FLONUM_P(x) ((((int)(SIGNED_VALUE)(x))&FLONUM_MASK) == FLONUM_FLAG) +#else +#define FLONUM_P(x) 0 +#endif + +/* Module#methods, #singleton_methods and so on return Symbols */ +#define USE_SYMBOL_AS_METHOD_NAME 1 + +/* +!USE_FLONUM +------------------------- +...xxxx xxx1 Fixnum +...0000 1110 Symbol +...0000 0000 Qfalse +...0000 0010 Qtrue +...0000 0100 Qnil +...0000 0110 Qundef + +USE_FLONUM +------------------------- +...xxxx xxx1 Fixnum +...xxxx xx10 Flonum +...0000 1100 Symbol +...0000 0000 Qfalse 0x00 = 0 +...0000 1000 Qnil 0x08 = 8 +...0001 0100 Qtrue 0x14 = 20 +...0011 0100 Qundef 0x34 = 52 + */ + +/* special constants - i.e. non-zero and non-fixnum constants */ +enum ruby_special_consts { +#if USE_FLONUM + RUBY_Qfalse = 0x00, + RUBY_Qtrue = 0x14, + RUBY_Qnil = 0x08, + RUBY_Qundef = 0x34, + + RUBY_IMMEDIATE_MASK = 0x07, + RUBY_FIXNUM_FLAG = 0x01, + RUBY_FLONUM_MASK = 0x03, + RUBY_FLONUM_FLAG = 0x02, + RUBY_SYMBOL_FLAG = 0x0c, + RUBY_SPECIAL_SHIFT = 8 +#else + RUBY_Qfalse = 0, + RUBY_Qtrue = 2, + RUBY_Qnil = 4, + RUBY_Qundef = 6, + + RUBY_IMMEDIATE_MASK = 0x03, + RUBY_FIXNUM_FLAG = 0x01, + RUBY_FLONUM_MASK = 0x00, /* any values ANDed with FLONUM_MASK cannot be FLONUM_FLAG */ + RUBY_FLONUM_FLAG = 0x02, + RUBY_SYMBOL_FLAG = 0x0e, + RUBY_SPECIAL_SHIFT = 8 +#endif +}; + +#define Qfalse ((VALUE)RUBY_Qfalse) +#define Qtrue ((VALUE)RUBY_Qtrue) +#define Qnil ((VALUE)RUBY_Qnil) +#define Qundef ((VALUE)RUBY_Qundef) /* undefined value for placeholder */ +#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK +#define FIXNUM_FLAG RUBY_FIXNUM_FLAG +#if USE_FLONUM +#define FLONUM_MASK RUBY_FLONUM_MASK +#define FLONUM_FLAG RUBY_FLONUM_FLAG +#endif +#define SYMBOL_FLAG RUBY_SYMBOL_FLAG + +#define RTEST(v) !(((VALUE)(v) & ~Qnil) == 0) +#define NIL_P(v) !((VALUE)(v) != Qnil) + +#define CLASS_OF(v) rb_class_of((VALUE)(v)) + +enum ruby_value_type { + RUBY_T_NONE = 0x00, + + RUBY_T_OBJECT = 0x01, + RUBY_T_CLASS = 0x02, + RUBY_T_MODULE = 0x03, + RUBY_T_FLOAT = 0x04, + RUBY_T_STRING = 0x05, + RUBY_T_REGEXP = 0x06, + RUBY_T_ARRAY = 0x07, + RUBY_T_HASH = 0x08, + RUBY_T_STRUCT = 0x09, + RUBY_T_BIGNUM = 0x0a, + RUBY_T_FILE = 0x0b, + RUBY_T_DATA = 0x0c, + RUBY_T_MATCH = 0x0d, + RUBY_T_COMPLEX = 0x0e, + RUBY_T_RATIONAL = 0x0f, + + RUBY_T_NIL = 0x11, + RUBY_T_TRUE = 0x12, + RUBY_T_FALSE = 0x13, + RUBY_T_SYMBOL = 0x14, + RUBY_T_FIXNUM = 0x15, + + RUBY_T_UNDEF = 0x1b, + RUBY_T_NODE = 0x1c, + RUBY_T_ICLASS = 0x1d, + RUBY_T_ZOMBIE = 0x1e, + + RUBY_T_MASK = 0x1f +}; + +#define T_NONE RUBY_T_NONE +#define T_NIL RUBY_T_NIL +#define T_OBJECT RUBY_T_OBJECT +#define T_CLASS RUBY_T_CLASS +#define T_ICLASS RUBY_T_ICLASS +#define T_MODULE RUBY_T_MODULE +#define T_FLOAT RUBY_T_FLOAT +#define T_STRING RUBY_T_STRING +#define T_REGEXP RUBY_T_REGEXP +#define T_ARRAY RUBY_T_ARRAY +#define T_HASH RUBY_T_HASH +#define T_STRUCT RUBY_T_STRUCT +#define T_BIGNUM RUBY_T_BIGNUM +#define T_FILE RUBY_T_FILE +#define T_FIXNUM RUBY_T_FIXNUM +#define T_TRUE RUBY_T_TRUE +#define T_FALSE RUBY_T_FALSE +#define T_DATA RUBY_T_DATA +#define T_MATCH RUBY_T_MATCH +#define T_SYMBOL RUBY_T_SYMBOL +#define T_RATIONAL RUBY_T_RATIONAL +#define T_COMPLEX RUBY_T_COMPLEX +#define T_UNDEF RUBY_T_UNDEF +#define T_NODE RUBY_T_NODE +#define T_ZOMBIE RUBY_T_ZOMBIE +#define T_MASK RUBY_T_MASK + +#define BUILTIN_TYPE(x) (int)(((struct RBasic*)(x))->flags & T_MASK) + +static inline int rb_type(VALUE obj); +#define TYPE(x) rb_type((VALUE)(x)) + +/* RB_GC_GUARD_PTR() is an intermediate macro, and has no effect by + * itself. don't use it directly */ +#ifdef __GNUC__ +#define RB_GC_GUARD_PTR(ptr) \ + __extension__ ({volatile VALUE *rb_gc_guarded_ptr = (ptr); rb_gc_guarded_ptr;}) +#else +#ifdef _MSC_VER +#pragma optimize("", off) +static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr;} +#pragma optimize("", on) +#else +volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr); +#define HAVE_RB_GC_GUARDED_PTR 1 +#endif +#define RB_GC_GUARD_PTR(ptr) rb_gc_guarded_ptr(ptr) +#endif +#define RB_GC_GUARD(v) (*RB_GC_GUARD_PTR(&(v))) + +#ifdef __GNUC__ +#define RB_UNUSED_VAR(x) x __attribute__ ((unused)) +#else +#define RB_UNUSED_VAR(x) x +#endif + +void rb_check_type(VALUE,int); +#define Check_Type(v,t) rb_check_type((VALUE)(v),(t)) + +VALUE rb_str_to_str(VALUE); +VALUE rb_string_value(volatile VALUE*); +char *rb_string_value_ptr(volatile VALUE*); +char *rb_string_value_cstr(volatile VALUE*); + +#define StringValue(v) rb_string_value(&(v)) +#define StringValuePtr(v) rb_string_value_ptr(&(v)) +#define StringValueCStr(v) rb_string_value_cstr(&(v)) + +void rb_check_safe_obj(VALUE); +DEPRECATED(void rb_check_safe_str(VALUE)); +#define SafeStringValue(v) do {\ + StringValue(v);\ + rb_check_safe_obj(v);\ +} while (0) +/* obsolete macro - use SafeStringValue(v) */ +#define Check_SafeStr(v) rb_check_safe_str((VALUE)(v)) + +VALUE rb_str_export(VALUE); +#define ExportStringValue(v) do {\ + SafeStringValue(v);\ + (v) = rb_str_export(v);\ +} while (0) +VALUE rb_str_export_locale(VALUE); + +VALUE rb_get_path(VALUE); +#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v)) + +VALUE rb_get_path_no_checksafe(VALUE); +#define FilePathStringValue(v) ((v) = rb_get_path_no_checksafe(v)) + +#define RUBY_SAFE_LEVEL_MAX 3 +void rb_secure(int); +int rb_safe_level(void); +void rb_set_safe_level(int); +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +int ruby_safe_level_4_error(void) __attribute__((error("$SAFE=4 is obsolete"))); +int ruby_safe_level_4_warning(void) __attribute__((warning("$SAFE=4 is obsolete"))); +# ifdef RUBY_EXPORT +# define ruby_safe_level_4_warning() ruby_safe_level_4_error() +# endif +#define RUBY_SAFE_LEVEL_INVALID_P(level) \ + __extension__(__builtin_constant_p(level) && \ + ((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level))) +#define RUBY_SAFE_LEVEL_CHECK(level, type) \ + (RUBY_SAFE_LEVEL_INVALID_P(level) ? ruby_safe_level_4_##type() : (level)) +#define rb_secure(level) rb_secure(RUBY_SAFE_LEVEL_CHECK(level, warning)) +#define rb_set_safe_level(level) rb_set_safe_level(RUBY_SAFE_LEVEL_CHECK(level, error)) +#endif +void rb_set_safe_level_force(int); +void rb_secure_update(VALUE); +NORETURN(void rb_insecure_operation(void)); + +VALUE rb_errinfo(void); +void rb_set_errinfo(VALUE); + +SIGNED_VALUE rb_num2long(VALUE); +VALUE rb_num2ulong(VALUE); +static inline long +rb_num2long_inline(VALUE x) +{ + if (FIXNUM_P(x)) + return FIX2LONG(x); + else + return (long)rb_num2long(x); +} +#define NUM2LONG(x) rb_num2long_inline(x) +static inline unsigned long +rb_num2ulong_inline(VALUE x) +{ + if (FIXNUM_P(x)) + return (unsigned long)FIX2LONG(x); + else + return (unsigned long)rb_num2ulong(x); +} +#define NUM2ULONG(x) rb_num2ulong_inline(x) +#if SIZEOF_INT < SIZEOF_LONG +long rb_num2int(VALUE); +long rb_fix2int(VALUE); +#define FIX2INT(x) ((int)rb_fix2int((VALUE)(x))) + +static inline int +rb_num2int_inline(VALUE x) +{ + if (FIXNUM_P(x)) + return FIX2INT(x); + else + return (int)rb_num2int(x); +} +#define NUM2INT(x) rb_num2int_inline(x) + +unsigned long rb_num2uint(VALUE); +#define NUM2UINT(x) ((unsigned int)rb_num2uint(x)) +unsigned long rb_fix2uint(VALUE); +#define FIX2UINT(x) ((unsigned int)rb_fix2uint(x)) +#else /* SIZEOF_INT < SIZEOF_LONG */ +#define NUM2INT(x) ((int)NUM2LONG(x)) +#define NUM2UINT(x) ((unsigned int)NUM2ULONG(x)) +#define FIX2INT(x) ((int)FIX2LONG(x)) +#define FIX2UINT(x) ((unsigned int)FIX2ULONG(x)) +#endif /* SIZEOF_INT < SIZEOF_LONG */ + +short rb_num2short(VALUE); +unsigned short rb_num2ushort(VALUE); +short rb_fix2short(VALUE); +unsigned short rb_fix2ushort(VALUE); +#define FIX2SHORT(x) (rb_fix2short((VALUE)(x))) +static inline short +rb_num2short_inline(VALUE x) +{ + if (FIXNUM_P(x)) + return FIX2SHORT(x); + else + return rb_num2short(x); +} + +#define NUM2SHORT(x) rb_num2short_inline(x) +#define NUM2USHORT(x) rb_num2ushort(x) + +#ifdef HAVE_LONG_LONG +LONG_LONG rb_num2ll(VALUE); +unsigned LONG_LONG rb_num2ull(VALUE); +static inline LONG_LONG +rb_num2ll_inline(VALUE x) +{ + if (FIXNUM_P(x)) + return FIX2LONG(x); + else + return rb_num2ll(x); +} +# define NUM2LL(x) rb_num2ll_inline(x) +# define NUM2ULL(x) rb_num2ull(x) +#endif + +#if !defined(NUM2OFFT) +# if defined(HAVE_LONG_LONG) && SIZEOF_OFF_T > SIZEOF_LONG +# define NUM2OFFT(x) ((off_t)NUM2LL(x)) +# else +# define NUM2OFFT(x) NUM2LONG(x) +# endif +#endif + +#if defined(HAVE_LONG_LONG) && SIZEOF_SIZE_T > SIZEOF_LONG +# define NUM2SIZET(x) ((size_t)NUM2ULL(x)) +# define NUM2SSIZET(x) ((ssize_t)NUM2LL(x)) +#else +# define NUM2SIZET(x) NUM2ULONG(x) +# define NUM2SSIZET(x) NUM2LONG(x) +#endif + +double rb_num2dbl(VALUE); +#define NUM2DBL(x) rb_num2dbl((VALUE)(x)) + +VALUE rb_uint2big(VALUE); +VALUE rb_int2big(SIGNED_VALUE); + +VALUE rb_newobj(void); +VALUE rb_newobj_of(VALUE, VALUE); +VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type); +#define NEWOBJ(obj,type) type *(obj) = (type*)rb_newobj() +#define NEWOBJ_OF(obj,type,klass,flags) type *(obj) = (type*)rb_newobj_of(klass, flags) +#define OBJSETUP(obj,c,t) rb_obj_setup(obj, c, t) /* use NEWOBJ_OF instead of NEWOBJ()+OBJSETUP() */ +#define CLONESETUP(clone,obj) do {\ + OBJSETUP((clone),rb_singleton_class_clone((VALUE)(obj)),RBASIC(obj)->flags);\ + rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)(clone));\ + if (FL_TEST((obj), FL_EXIVAR)) rb_copy_generic_ivar((VALUE)(clone),(VALUE)(obj));\ +} while (0) +#define DUPSETUP(dup,obj) do {\ + OBJSETUP((dup),rb_obj_class(obj), (RBASIC(obj)->flags)&(T_MASK|FL_EXIVAR|FL_TAINT)); \ + if (FL_TEST((obj), FL_EXIVAR)) rb_copy_generic_ivar((VALUE)(dup),(VALUE)(obj));\ +} while (0) + +#ifndef USE_RGENGC +#define USE_RGENGC 1 +#endif + +#ifndef RGENGC_WB_PROTECTED_ARRAY +#define RGENGC_WB_PROTECTED_ARRAY 1 +#endif +#ifndef RGENGC_WB_PROTECTED_HASH +#define RGENGC_WB_PROTECTED_HASH 1 +#endif +#ifndef RGENGC_WB_PROTECTED_STRUCT +#define RGENGC_WB_PROTECTED_STRUCT 1 +#endif +#ifndef RGENGC_WB_PROTECTED_STRING +#define RGENGC_WB_PROTECTED_STRING 1 +#endif +#ifndef RGENGC_WB_PROTECTED_OBJECT +#define RGENGC_WB_PROTECTED_OBJECT 1 +#endif +#ifndef RGENGC_WB_PROTECTED_REGEXP +#define RGENGC_WB_PROTECTED_REGEXP 1 +#endif +#ifndef RGENGC_WB_PROTECTED_CLASS +#define RGENGC_WB_PROTECTED_CLASS 1 +#endif +#ifndef RGENGC_WB_PROTECTED_FLOAT +#define RGENGC_WB_PROTECTED_FLOAT 1 +#endif +#ifndef RGENGC_WB_PROTECTED_COMPLEX +#define RGENGC_WB_PROTECTED_COMPLEX 1 +#endif +#ifndef RGENGC_WB_PROTECTED_RATIONAL +#define RGENGC_WB_PROTECTED_RATIONAL 1 +#endif +#ifndef RGENGC_WB_PROTECTED_BIGNUM +#define RGENGC_WB_PROTECTED_BIGNUM 1 +#endif +#ifndef RGENGC_WB_PROTECTED_NODE_CREF +#define RGENGC_WB_PROTECTED_NODE_CREF 1 +#endif + +struct RBasic { + VALUE flags; + const VALUE klass; +} +#ifdef __GNUC__ + __attribute__((aligned(sizeof(VALUE)))) +#endif +; + +VALUE rb_obj_hide(VALUE obj); +VALUE rb_obj_reveal(VALUE obj, VALUE klass); /* do not use this API to change klass information */ + +#define RBASIC_CLASS(obj) (RBASIC(obj)->klass) + +#define ROBJECT_EMBED_LEN_MAX 3 +struct RObject { + struct RBasic basic; + union { + struct { + long numiv; + VALUE *ivptr; + struct st_table *iv_index_tbl; /* shortcut for RCLASS_IV_INDEX_TBL(rb_obj_class(obj)) */ + } heap; + VALUE ary[ROBJECT_EMBED_LEN_MAX]; + } as; +}; +#define ROBJECT_EMBED FL_USER1 +#define ROBJECT_NUMIV(o) \ + ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ + ROBJECT_EMBED_LEN_MAX : \ + ROBJECT(o)->as.heap.numiv) +#define ROBJECT_IVPTR(o) \ + ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ + ROBJECT(o)->as.ary : \ + ROBJECT(o)->as.heap.ivptr) +#define ROBJECT_IV_INDEX_TBL(o) \ + ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ + RCLASS_IV_INDEX_TBL(rb_obj_class(o)) : \ + ROBJECT(o)->as.heap.iv_index_tbl) + +/** @internal */ +typedef struct rb_classext_struct rb_classext_t; + +struct RClass { + struct RBasic basic; + VALUE super; + rb_classext_t *ptr; + struct method_table_wrapper *m_tbl_wrapper; +}; +#define RCLASS_SUPER(c) rb_class_get_superclass(c) +#define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m) +#define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m) +#define RMODULE_M_TBL(m) RCLASS_M_TBL(m) +#define RMODULE_SUPER(m) RCLASS_SUPER(m) +#define RMODULE_IS_OVERLAID FL_USER2 +#define RMODULE_IS_REFINEMENT FL_USER3 +#define RMODULE_INCLUDED_INTO_REFINEMENT FL_USER4 + +struct RFloat { + struct RBasic basic; + double float_value; +}; + +double rb_float_value(VALUE); +VALUE rb_float_new(double); +VALUE rb_float_new_in_heap(double); + +#define RFLOAT_VALUE(v) rb_float_value(v) +#define DBL2NUM(dbl) rb_float_new(dbl) + +#define ELTS_SHARED FL_USER2 + +#define RSTRING_EMBED_LEN_MAX ((int)((sizeof(VALUE)*3)/sizeof(char)-1)) +struct RString { + struct RBasic basic; + union { + struct { + long len; + char *ptr; + union { + long capa; + VALUE shared; + } aux; + } heap; + char ary[RSTRING_EMBED_LEN_MAX + 1]; + } as; +}; +#define RSTRING_NOEMBED FL_USER1 +#define RSTRING_FSTR FL_USER17 +#define RSTRING_EMBED_LEN_MASK (FL_USER2|FL_USER3|FL_USER4|FL_USER5|FL_USER6) +#define RSTRING_EMBED_LEN_SHIFT (FL_USHIFT+2) +#define RSTRING_EMBED_LEN(str) \ + (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ + (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT)) +#define RSTRING_LEN(str) \ + (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ + RSTRING_EMBED_LEN(str) : \ + RSTRING(str)->as.heap.len) +#define RSTRING_PTR(str) \ + (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ + RSTRING(str)->as.ary : \ + RSTRING(str)->as.heap.ptr) +#define RSTRING_END(str) \ + (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ + (RSTRING(str)->as.ary + RSTRING_EMBED_LEN(str)) : \ + (RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len)) +#define RSTRING_LENINT(str) rb_long2int(RSTRING_LEN(str)) +#define RSTRING_GETMEM(str, ptrvar, lenvar) \ + (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ + ((ptrvar) = RSTRING(str)->as.ary, (lenvar) = RSTRING_EMBED_LEN(str)) : \ + ((ptrvar) = RSTRING(str)->as.heap.ptr, (lenvar) = RSTRING(str)->as.heap.len)) + +#define RARRAY_EMBED_LEN_MAX 3 +struct RArray { + struct RBasic basic; + union { + struct { + long len; + union { + long capa; + VALUE shared; + } aux; + const VALUE *ptr; + } heap; + const VALUE ary[RARRAY_EMBED_LEN_MAX]; + } as; +}; +#define RARRAY_EMBED_FLAG FL_USER1 +/* FL_USER2 is for ELTS_SHARED */ +#define RARRAY_EMBED_LEN_MASK (FL_USER4|FL_USER3) +#define RARRAY_EMBED_LEN_SHIFT (FL_USHIFT+3) +#define RARRAY_LEN(a) \ + ((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \ + (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ + (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)) : \ + RARRAY(a)->as.heap.len) + +#define RARRAY_LENINT(ary) rb_long2int(RARRAY_LEN(ary)) + +#define RARRAY_CONST_PTR(a) \ + ((const VALUE *)((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \ + RARRAY(a)->as.ary : \ + RARRAY(a)->as.heap.ptr)) + +#define RARRAY_PTR_USE_START(a) ((VALUE *)RARRAY_CONST_PTR(a)) +#define RARRAY_PTR_USE_END(a) /* */ + +#define RARRAY_PTR_USE(ary, ptr_name, expr) do { \ + const VALUE _ary = (ary); \ + VALUE *ptr_name = (VALUE *)RARRAY_PTR_USE_START(_ary); \ + expr; \ + RARRAY_PTR_USE_END(_ary); \ +} while (0) + +#define RARRAY_AREF(a, i) (RARRAY_CONST_PTR(a)[i]) +#define RARRAY_ASET(a, i, v) do { \ + const VALUE _ary_ = (a); \ + RB_OBJ_WRITE(_ary_, &RARRAY_CONST_PTR(_ary_)[i], (v)); \ +} while (0) + +#define RARRAY_PTR(a) ((VALUE *)RARRAY_CONST_PTR(RGENGC_WB_PROTECTED_ARRAY ? OBJ_WB_UNPROTECT((VALUE)a) : ((VALUE)a))) + +struct RRegexp { + struct RBasic basic; + struct re_pattern_buffer *ptr; + const VALUE src; + unsigned long usecnt; +}; +#define RREGEXP_SRC(r) RREGEXP(r)->src +#define RREGEXP_SRC_PTR(r) RSTRING_PTR(RREGEXP(r)->src) +#define RREGEXP_SRC_LEN(r) RSTRING_LEN(RREGEXP(r)->src) +#define RREGEXP_SRC_END(r) RSTRING_END(RREGEXP(r)->src) + +struct RHash { + struct RBasic basic; + struct st_table *ntbl; /* possibly 0 */ + int iter_lev; + const VALUE ifnone; +}; +/* RHASH_TBL allocates st_table if not available. */ +#define RHASH_TBL(h) rb_hash_tbl(h) +#define RHASH_ITER_LEV(h) (RHASH(h)->iter_lev) +#define RHASH_IFNONE(h) (RHASH(h)->ifnone) +#define RHASH_SIZE(h) (RHASH(h)->ntbl ? (st_index_t)RHASH(h)->ntbl->num_entries : 0) +#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0) +#define RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone) + +struct RFile { + struct RBasic basic; + struct rb_io_t *fptr; +}; + +struct RRational { + struct RBasic basic; + const VALUE num; + const VALUE den; +}; + +#define RRATIONAL_SET_NUM(rat, n) RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->num,(n)) +#define RRATIONAL_SET_DEN(rat, d) RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->den,(d)) + +struct RComplex { + struct RBasic basic; + const VALUE real; + const VALUE imag; +}; + +#define RCOMPLEX_SET_REAL(cmp, r) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->real,(r)) +#define RCOMPLEX_SET_IMAG(cmp, i) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->imag,(i)) + +struct RData { + struct RBasic basic; + void (*dmark)(void*); + void (*dfree)(void*); + void *data; +}; + +typedef struct rb_data_type_struct rb_data_type_t; + +struct rb_data_type_struct { + const char *wrap_struct_name; + struct { + void (*dmark)(void*); + void (*dfree)(void*); + size_t (*dsize)(const void *); + void *reserved[2]; /* For future extension. + This array *must* be filled with ZERO. */ + } function; + const rb_data_type_t *parent; + void *data; /* This area can be used for any purpose + by a programmer who define the type. */ + VALUE flags; /* FL_WB_PROTECTED */ +}; + +#define HAVE_TYPE_RB_DATA_TYPE_T 1 +#define HAVE_RB_DATA_TYPE_T_FUNCTION 1 +#define HAVE_RB_DATA_TYPE_T_PARENT 1 + +struct RTypedData { + struct RBasic basic; + const rb_data_type_t *type; + VALUE typed_flag; /* 1 or not */ + void *data; +}; + +#define DATA_PTR(dta) (RDATA(dta)->data) + +#define RTYPEDDATA_P(v) (RTYPEDDATA(v)->typed_flag == 1) +#define RTYPEDDATA_TYPE(v) (RTYPEDDATA(v)->type) +#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data) + +/* +#define RUBY_DATA_FUNC(func) ((void (*)(void*))(func)) +*/ +typedef void (*RUBY_DATA_FUNC)(void*); + +VALUE rb_data_object_alloc(VALUE,void*,RUBY_DATA_FUNC,RUBY_DATA_FUNC); +VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *); +int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent); +int rb_typeddata_is_kind_of(VALUE, const rb_data_type_t *); +void *rb_check_typeddata(VALUE, const rb_data_type_t *); +#define Check_TypedStruct(v,t) rb_check_typeddata((VALUE)(v),(t)) +#define RUBY_DEFAULT_FREE ((RUBY_DATA_FUNC)-1) +#define RUBY_NEVER_FREE ((RUBY_DATA_FUNC)0) +#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE +#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE + +/* bits for rb_data_type_struct::flags */ +#define RUBY_TYPED_FREE_IMMEDIATELY 1 /* TYPE field */ +#define RUBY_TYPED_WB_PROTECTED FL_WB_PROTECTED + +#define Data_Wrap_Struct(klass,mark,free,sval)\ + rb_data_object_alloc((klass),(sval),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free)) + +#define Data_Make_Struct(klass,type,mark,free,sval) (\ + (sval) = ALLOC(type),\ + memset((sval), 0, sizeof(type)),\ + Data_Wrap_Struct((klass),(mark),(free),(sval))\ +) + +#define TypedData_Wrap_Struct(klass,data_type,sval)\ + rb_data_typed_object_alloc((klass),(sval),(data_type)) + +#define TypedData_Make_Struct(klass, type, data_type, sval) (\ + (sval) = ALLOC(type),\ + memset((sval), 0, sizeof(type)),\ + TypedData_Wrap_Struct((klass),(data_type),(sval))\ +) + +#define Data_Get_Struct(obj,type,sval) do {\ + Check_Type((obj), T_DATA); \ + (sval) = (type*)DATA_PTR(obj);\ +} while (0) + +#define TypedData_Get_Struct(obj,type,data_type,sval) do {\ + (sval) = (type*)rb_check_typeddata((obj), (data_type)); \ +} while (0) + +#define RSTRUCT_EMBED_LEN_MAX 3 +struct RStruct { + struct RBasic basic; + union { + struct { + long len; + const VALUE *ptr; + } heap; + const VALUE ary[RSTRUCT_EMBED_LEN_MAX]; + } as; +}; +#define RSTRUCT_EMBED_LEN_MASK (FL_USER2|FL_USER1) +#define RSTRUCT_EMBED_LEN_SHIFT (FL_USHIFT+1) +#define RSTRUCT_LEN(st) \ + ((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ? \ + (long)((RBASIC(st)->flags >> RSTRUCT_EMBED_LEN_SHIFT) & \ + (RSTRUCT_EMBED_LEN_MASK >> RSTRUCT_EMBED_LEN_SHIFT)) : \ + RSTRUCT(st)->as.heap.len) +#define RSTRUCT_LENINT(st) rb_long2int(RSTRUCT_LEN(st)) +#define RSTRUCT_CONST_PTR(st) \ + ((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ? \ + RSTRUCT(st)->as.ary : \ + RSTRUCT(st)->as.heap.ptr) +#define RSTRUCT_PTR(st) ((VALUE *)RSTRUCT_CONST_PTR(RGENGC_WB_PROTECTED_STRUCT ? OBJ_WB_UNPROTECT((VALUE)st) : (VALUE)st)) + +#define RSTRUCT_SET(st, idx, v) RB_OBJ_WRITE(st, &RSTRUCT_CONST_PTR(st)[idx], (v)) +#define RSTRUCT_GET(st, idx) (RSTRUCT_CONST_PTR(st)[idx]) + +#define RBIGNUM_EMBED_LEN_NUMBITS 3 +#ifndef RBIGNUM_EMBED_LEN_MAX +# if (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) < (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1 +# define RBIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) +# else +# define RBIGNUM_EMBED_LEN_MAX ((1 << RBIGNUM_EMBED_LEN_NUMBITS)-1) +# endif +#endif +struct RBignum { + struct RBasic basic; + union { + struct { + long len; + BDIGIT *digits; + } heap; + BDIGIT ary[RBIGNUM_EMBED_LEN_MAX]; + } as; +}; +#define RBIGNUM_SIGN_BIT FL_USER1 +/* sign: positive:1, negative:0 */ +#define RBIGNUM_SIGN(b) ((RBASIC(b)->flags & RBIGNUM_SIGN_BIT) != 0) +#define RBIGNUM_SET_SIGN(b,sign) \ + ((sign) ? (RBASIC(b)->flags |= RBIGNUM_SIGN_BIT) \ + : (RBASIC(b)->flags &= ~RBIGNUM_SIGN_BIT)) +#define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b) +#define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b)) + +#define RBIGNUM_EMBED_FLAG FL_USER2 +#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3) +#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+RBIGNUM_EMBED_LEN_NUMBITS) +#define RBIGNUM_LEN(b) \ + ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ + (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \ + (RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \ + RBIGNUM(b)->as.heap.len) +/* LSB:RBIGNUM_DIGITS(b)[0], MSB:RBIGNUM_DIGITS(b)[RBIGNUM_LEN(b)-1] */ +#define RBIGNUM_DIGITS(b) \ + ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ + RBIGNUM(b)->as.ary : \ + RBIGNUM(b)->as.heap.digits) +#define RBIGNUM_LENINT(b) rb_long2int(RBIGNUM_LEN(b)) + +#define R_CAST(st) (struct st*) +#define RBASIC(obj) (R_CAST(RBasic)(obj)) +#define ROBJECT(obj) (R_CAST(RObject)(obj)) +#define RCLASS(obj) (R_CAST(RClass)(obj)) +#define RMODULE(obj) RCLASS(obj) +#define RFLOAT(obj) (R_CAST(RFloat)(obj)) +#define RSTRING(obj) (R_CAST(RString)(obj)) +#define RREGEXP(obj) (R_CAST(RRegexp)(obj)) +#define RARRAY(obj) (R_CAST(RArray)(obj)) +#define RHASH(obj) (R_CAST(RHash)(obj)) +#define RDATA(obj) (R_CAST(RData)(obj)) +#define RTYPEDDATA(obj) (R_CAST(RTypedData)(obj)) +#define RSTRUCT(obj) (R_CAST(RStruct)(obj)) +#define RBIGNUM(obj) (R_CAST(RBignum)(obj)) +#define RFILE(obj) (R_CAST(RFile)(obj)) +#define RRATIONAL(obj) (R_CAST(RRational)(obj)) +#define RCOMPLEX(obj) (R_CAST(RComplex)(obj)) + +#define FL_SINGLETON FL_USER0 +#define FL_WB_PROTECTED (((VALUE)1)<<5) +#define FL_PROMOTED (((VALUE)1)<<6) +#define FL_FINALIZE (((VALUE)1)<<7) +#define FL_TAINT (((VALUE)1)<<8) +#define FL_UNTRUSTED FL_TAINT +#define FL_EXIVAR (((VALUE)1)<<10) +#define FL_FREEZE (((VALUE)1)<<11) + +#define FL_USHIFT 12 + +#define FL_USER0 (((VALUE)1)<<(FL_USHIFT+0)) +#define FL_USER1 (((VALUE)1)<<(FL_USHIFT+1)) +#define FL_USER2 (((VALUE)1)<<(FL_USHIFT+2)) +#define FL_USER3 (((VALUE)1)<<(FL_USHIFT+3)) +#define FL_USER4 (((VALUE)1)<<(FL_USHIFT+4)) +#define FL_USER5 (((VALUE)1)<<(FL_USHIFT+5)) +#define FL_USER6 (((VALUE)1)<<(FL_USHIFT+6)) +#define FL_USER7 (((VALUE)1)<<(FL_USHIFT+7)) +#define FL_USER8 (((VALUE)1)<<(FL_USHIFT+8)) +#define FL_USER9 (((VALUE)1)<<(FL_USHIFT+9)) +#define FL_USER10 (((VALUE)1)<<(FL_USHIFT+10)) +#define FL_USER11 (((VALUE)1)<<(FL_USHIFT+11)) +#define FL_USER12 (((VALUE)1)<<(FL_USHIFT+12)) +#define FL_USER13 (((VALUE)1)<<(FL_USHIFT+13)) +#define FL_USER14 (((VALUE)1)<<(FL_USHIFT+14)) +#define FL_USER15 (((VALUE)1)<<(FL_USHIFT+15)) +#define FL_USER16 (((VALUE)1)<<(FL_USHIFT+16)) +#define FL_USER17 (((VALUE)1)<<(FL_USHIFT+17)) +#define FL_USER18 (((VALUE)1)<<(FL_USHIFT+18)) +#define FL_USER19 (((VALUE)1)<<(FL_USHIFT+19)) + +#define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x)) + +#define FL_ABLE(x) (!SPECIAL_CONST_P(x) && BUILTIN_TYPE(x) != T_NODE) +#define FL_TEST_RAW(x,f) (RBASIC(x)->flags&(f)) +#define FL_TEST(x,f) (FL_ABLE(x)?FL_TEST_RAW((x),(f)):0) +#define FL_ANY(x,f) FL_TEST((x),(f)) +#define FL_ALL(x,f) (FL_TEST((x),(f)) == (f)) +#define FL_SET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags |= (f);} while (0) +#define FL_UNSET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags &= ~(f);} while (0) +#define FL_REVERSE(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags ^= (f);} while (0) + +#define OBJ_TAINTED(x) (!!FL_TEST((x), FL_TAINT)) +#define OBJ_TAINT(x) FL_SET((x), FL_TAINT) +#define OBJ_UNTRUSTED(x) OBJ_TAINTED(x) +#define OBJ_UNTRUST(x) OBJ_TAINT(x) +#define OBJ_INFECT(x,s) do { \ + if (FL_ABLE(x) && FL_ABLE(s)) \ + RBASIC(x)->flags |= RBASIC(s)->flags & FL_TAINT; \ +} while (0) + +#define OBJ_FROZEN(x) (!!(FL_ABLE(x)?(RBASIC(x)->flags&(FL_FREEZE)):(FIXNUM_P(x)||FLONUM_P(x)||SYMBOL_P(x)))) +#define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE) + +#if USE_RGENGC +#define OBJ_PROMOTED(x) (SPECIAL_CONST_P(x) ? 0 : FL_TEST_RAW((x), FL_PROMOTED)) +#define OBJ_WB_PROTECTED(x) (SPECIAL_CONST_P(x) ? 1 : FL_TEST_RAW((x), FL_WB_PROTECTED)) +#define OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__) + +void rb_gc_writebarrier(VALUE a, VALUE b); +void rb_gc_writebarrier_unprotect_promoted(VALUE obj); + +#else /* USE_RGENGC */ +#define OBJ_PROMOTED(x) 0 +#define OBJ_WB_PROTECTED(x) 0 +#define OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__) +#endif + +/* Write barrier (WB) interfaces: + * - RB_OBJ_WRITE(a, slot, b): WB for new reference from `a' to `b'. + * Write `b' into `*slot'. `slot' is a pointer in `a'. + * - RB_OBJ_WRITTEN(a, oldv, b): WB for new reference from `a' to `b'. + * This doesn't write any values, but only a WB declaration. + * `oldv' is replaced value with `b' (not used in current Ruby). + * + * NOTE: The following core interfaces can be changed in the future. + * Please catch up if you want to insert WB into C-extensions + * correctly. + */ +#define RB_OBJ_WRITE(a, slot, b) rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__) +#define RB_OBJ_WRITTEN(a, oldv, b) rb_obj_written((VALUE)(a), (VALUE)(oldv), (VALUE)(b), __FILE__, __LINE__) + +#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT +#define USE_RGENGC_LOGGING_WB_UNPROTECT 0 +#endif + +#if USE_RGENGC_LOGGING_WB_UNPROTECT +void rb_gc_unprotect_logging(void *objptr, const char *filename, int line); +#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging +#endif + +static inline VALUE +rb_obj_wb_unprotect(VALUE x, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line)) +{ +#ifdef RGENGC_LOGGING_WB_UNPROTECT + RGENGC_LOGGING_WB_UNPROTECT((void *)x, filename, line); +#endif + +#if USE_RGENGC + /* `x' should be an RVALUE object */ + if (FL_TEST_RAW((x), FL_WB_PROTECTED)) { + if (FL_TEST_RAW((x), FL_PROMOTED)) { + rb_gc_writebarrier_unprotect_promoted(x); + } + RBASIC(x)->flags &= ~FL_WB_PROTECTED; + } +#endif + return x; +} + +static inline VALUE +rb_obj_written(VALUE a, RB_UNUSED_VAR(VALUE oldv), VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line)) +{ +#ifdef RGENGC_LOGGING_OBJ_WRITTEN + RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line); +#endif + +#if USE_RGENGC + /* `a' should be an RVALUE object */ + if (FL_TEST_RAW((a), FL_PROMOTED) && !SPECIAL_CONST_P(b)) { + rb_gc_writebarrier(a, b); + } +#endif + + return a; +} + +static inline VALUE +rb_obj_write(VALUE a, VALUE *slot, VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line)) +{ +#ifdef RGENGC_LOGGING_WRITE + RGENGC_LOGGING_WRITE(a, slot, b, filename, line); +#endif + + *slot = b; + +#if USE_RGENGC + rb_obj_written(a, Qundef /* ignore `oldv' now */, b, filename, line); +#endif + return a; +} + +#if SIZEOF_INT < SIZEOF_LONG +# define INT2NUM(v) INT2FIX((int)(v)) +# define UINT2NUM(v) LONG2FIX((unsigned int)(v)) +#else +static inline VALUE +rb_int2num_inline(int v) +{ + if (FIXABLE(v)) + return INT2FIX(v); + else + return rb_int2big(v); +} +#define INT2NUM(x) rb_int2num_inline(x) + +static inline VALUE +rb_uint2num_inline(unsigned int v) +{ + if (POSFIXABLE(v)) + return LONG2FIX(v); + else + return rb_uint2big(v); +} +#define UINT2NUM(x) rb_uint2num_inline(x) +#endif + +static inline VALUE +rb_long2num_inline(long v) +{ + if (FIXABLE(v)) + return LONG2FIX(v); + else + return rb_int2big(v); +} +#define LONG2NUM(x) rb_long2num_inline(x) + +static inline VALUE +rb_ulong2num_inline(unsigned long v) +{ + if (POSFIXABLE(v)) + return LONG2FIX(v); + else + return rb_uint2big(v); +} +#define ULONG2NUM(x) rb_ulong2num_inline(x) + +static inline char +rb_num2char_inline(VALUE x) +{ + if ((TYPE(x) == T_STRING) && (RSTRING_LEN(x)>=1)) + return RSTRING_PTR(x)[0]; + else + return (char)(NUM2INT(x) & 0xff); +} +#define NUM2CHR(x) rb_num2char_inline(x) + +#define CHR2FIX(x) INT2FIX((long)((x)&0xff)) + +#define ALLOC_N(type,n) ((type*)xmalloc2((n),sizeof(type))) +#define ALLOC(type) ((type*)xmalloc(sizeof(type))) +#define REALLOC_N(var,type,n) ((var)=(type*)xrealloc2((char*)(var),(n),sizeof(type))) + +#define ALLOCA_N(type,n) ((type*)alloca(sizeof(type)*(n))) + +void *rb_alloc_tmp_buffer(volatile VALUE *store, long len) RUBY_ATTR_ALLOC_SIZE((2)); +void rb_free_tmp_buffer(volatile VALUE *store); +/* allocates _n_ bytes temporary buffer and stores VALUE including it + * in _v_. _n_ may be evaluated twice. */ +#ifdef C_ALLOCA +# define ALLOCV(v, n) rb_alloc_tmp_buffer(&(v), (n)) +#else +# define ALLOCV(v, n) ((n) < 1024 ? (RB_GC_GUARD(v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n))) +#endif +#define ALLOCV_N(type, v, n) ((type*)ALLOCV((v), sizeof(type)*(n))) +#define ALLOCV_END(v) rb_free_tmp_buffer(&(v)) + +#define MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(n)) +#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(n)) +#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n)) +#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n)) + +void rb_obj_infect(VALUE,VALUE); + +typedef int ruby_glob_func(const char*,VALUE, void*); +void rb_glob(const char*,void(*)(const char*,VALUE,void*),VALUE); +int ruby_glob(const char*,int,ruby_glob_func*,VALUE); +int ruby_brace_glob(const char*,int,ruby_glob_func*,VALUE); + +VALUE rb_define_class(const char*,VALUE); +VALUE rb_define_module(const char*); +VALUE rb_define_class_under(VALUE, const char*, VALUE); +VALUE rb_define_module_under(VALUE, const char*); + +void rb_include_module(VALUE,VALUE); +void rb_extend_object(VALUE,VALUE); +void rb_prepend_module(VALUE,VALUE); + +struct rb_global_variable; + +typedef VALUE rb_gvar_getter_t(ID id, void *data, struct rb_global_variable *gvar); +typedef void rb_gvar_setter_t(VALUE val, ID id, void *data, struct rb_global_variable *gvar); +typedef void rb_gvar_marker_t(VALUE *var); + +VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar); +void rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); +void rb_gvar_undef_marker(VALUE *var); + +VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar); +void rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); +void rb_gvar_val_marker(VALUE *var); + +VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar); +void rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); +void rb_gvar_var_marker(VALUE *var); + +void rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); + +void rb_define_variable(const char*,VALUE*); +void rb_define_virtual_variable(const char*,VALUE(*)(ANYARGS),void(*)(ANYARGS)); +void rb_define_hooked_variable(const char*,VALUE*,VALUE(*)(ANYARGS),void(*)(ANYARGS)); +void rb_define_readonly_variable(const char*,VALUE*); +void rb_define_const(VALUE,const char*,VALUE); +void rb_define_global_const(const char*,VALUE); + +#define RUBY_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))(func)) +void rb_define_method(VALUE,const char*,VALUE(*)(ANYARGS),int); +void rb_define_module_function(VALUE,const char*,VALUE(*)(ANYARGS),int); +void rb_define_global_function(const char*,VALUE(*)(ANYARGS),int); + +void rb_undef_method(VALUE,const char*); +void rb_define_alias(VALUE,const char*,const char*); +void rb_define_attr(VALUE,const char*,int,int); + +void rb_global_variable(VALUE*); +void rb_gc_register_mark_object(VALUE); +void rb_gc_register_address(VALUE*); +void rb_gc_unregister_address(VALUE*); + +ID rb_intern(const char*); +ID rb_intern2(const char*, long); +ID rb_intern_str(VALUE str); +const char *rb_id2name(ID); +ID rb_check_id(volatile VALUE *); +ID rb_to_id(VALUE); +VALUE rb_id2str(ID); + +#define CONST_ID_CACHE(result, str) \ + { \ + static ID rb_intern_id_cache; \ + if (!rb_intern_id_cache) \ + rb_intern_id_cache = rb_intern2((str), (long)strlen(str)); \ + result rb_intern_id_cache; \ + } +#define CONST_ID(var, str) \ + do CONST_ID_CACHE((var) =, (str)) while (0) +#ifdef __GNUC__ +/* __builtin_constant_p and statement expression is available + * since gcc-2.7.2.3 at least. */ +#define rb_intern(str) \ + (__builtin_constant_p(str) ? \ + __extension__ (CONST_ID_CACHE((ID), (str))) : \ + rb_intern(str)) +#define rb_intern_const(str) \ + (__builtin_constant_p(str) ? \ + __extension__ (rb_intern2((str), (long)strlen(str))) : \ + (rb_intern)(str)) +#else +#define rb_intern_const(str) rb_intern2((str), (long)strlen(str)) +#endif + +const char *rb_class2name(VALUE); +const char *rb_obj_classname(VALUE); + +void rb_p(VALUE); + +VALUE rb_eval_string(const char*); +VALUE rb_eval_string_protect(const char*, int*); +VALUE rb_eval_string_wrap(const char*, int*); +VALUE rb_funcall(VALUE, ID, int, ...); +VALUE rb_funcallv(VALUE, ID, int, const VALUE*); +VALUE rb_funcallv_public(VALUE, ID, int, const VALUE*); +#define rb_funcall2 rb_funcallv +#define rb_funcall3 rb_funcallv_public +VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE*); +VALUE rb_funcall_with_block(VALUE, ID, int, const VALUE*, VALUE); +int rb_scan_args(int, const VALUE*, const char*, ...); +VALUE rb_call_super(int, const VALUE*); + +/* rb_scan_args() format allows ':' for optional hash */ +#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1 + +VALUE rb_gv_set(const char*, VALUE); +VALUE rb_gv_get(const char*); +VALUE rb_iv_get(VALUE, const char*); +VALUE rb_iv_set(VALUE, const char*, VALUE); + +VALUE rb_equal(VALUE,VALUE); + +VALUE *rb_ruby_verbose_ptr(void); +VALUE *rb_ruby_debug_ptr(void); +#define ruby_verbose (*rb_ruby_verbose_ptr()) +#define ruby_debug (*rb_ruby_debug_ptr()) + +PRINTF_ARGS(NORETURN(void rb_raise(VALUE, const char*, ...)), 2, 3); +PRINTF_ARGS(NORETURN(void rb_fatal(const char*, ...)), 1, 2); +PRINTF_ARGS(NORETURN(void rb_bug(const char*, ...)), 1, 2); +NORETURN(void rb_bug_errno(const char*, int)); +NORETURN(void rb_sys_fail(const char*)); +NORETURN(void rb_sys_fail_str(VALUE)); +NORETURN(void rb_mod_sys_fail(VALUE, const char*)); +NORETURN(void rb_mod_sys_fail_str(VALUE, VALUE)); +NORETURN(void rb_readwrite_sys_fail(int, const char*)); +NORETURN(void rb_iter_break(void)); +NORETURN(void rb_iter_break_value(VALUE)); +NORETURN(void rb_exit(int)); +NORETURN(void rb_notimplement(void)); +VALUE rb_syserr_new(int, const char *); +VALUE rb_syserr_new_str(int n, VALUE arg); +NORETURN(void rb_syserr_fail(int, const char*)); +NORETURN(void rb_syserr_fail_str(int, VALUE)); +NORETURN(void rb_mod_syserr_fail(VALUE, int, const char*)); +NORETURN(void rb_mod_syserr_fail_str(VALUE, int, VALUE)); + +/* reports if `-W' specified */ +PRINTF_ARGS(void rb_warning(const char*, ...), 1, 2); +PRINTF_ARGS(void rb_compile_warning(const char *, int, const char*, ...), 3, 4); +PRINTF_ARGS(void rb_sys_warning(const char*, ...), 1, 2); +/* reports always */ +PRINTF_ARGS(void rb_warn(const char*, ...), 1, 2); +PRINTF_ARGS(void rb_compile_warn(const char *, int, const char*, ...), 3, 4); + +/* for rb_readwrite_sys_fail first argument */ +#define RB_IO_WAIT_READABLE 0 +#define RB_IO_WAIT_WRITABLE 1 + +#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1 +#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \ + VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg +typedef VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)); + +#if defined RB_BLOCK_CALL_FUNC_STRICT && RB_BLOCK_CALL_FUNC_STRICT +typedef rb_block_call_func *rb_block_call_func_t; +#else +typedef VALUE (*rb_block_call_func_t)(ANYARGS); +#endif + +VALUE rb_each(VALUE); +VALUE rb_yield(VALUE); +VALUE rb_yield_values(int n, ...); +VALUE rb_yield_values2(int n, const VALUE *argv); +VALUE rb_yield_splat(VALUE); +VALUE rb_yield_block(VALUE, VALUE, int, const VALUE *, VALUE); /* rb_block_call_func */ +int rb_block_given_p(void); +void rb_need_block(void); +VALUE rb_iterate(VALUE(*)(VALUE),VALUE,VALUE(*)(ANYARGS),VALUE); +VALUE rb_block_call(VALUE,ID,int,const VALUE*,rb_block_call_func_t,VALUE); +VALUE rb_rescue(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE); +VALUE rb_rescue2(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE,...); +VALUE rb_ensure(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE); +VALUE rb_catch(const char*,VALUE(*)(ANYARGS),VALUE); +VALUE rb_catch_obj(VALUE,VALUE(*)(ANYARGS),VALUE); +NORETURN(void rb_throw(const char*,VALUE)); +NORETURN(void rb_throw_obj(VALUE,VALUE)); + +VALUE rb_require(const char*); + +RUBY_EXTERN VALUE rb_mKernel; +RUBY_EXTERN VALUE rb_mComparable; +RUBY_EXTERN VALUE rb_mEnumerable; +RUBY_EXTERN VALUE rb_mErrno; +RUBY_EXTERN VALUE rb_mFileTest; +RUBY_EXTERN VALUE rb_mGC; +RUBY_EXTERN VALUE rb_mMath; +RUBY_EXTERN VALUE rb_mProcess; +RUBY_EXTERN VALUE rb_mWaitReadable; +RUBY_EXTERN VALUE rb_mWaitWritable; + +RUBY_EXTERN VALUE rb_cBasicObject; +RUBY_EXTERN VALUE rb_cObject; +RUBY_EXTERN VALUE rb_cArray; +RUBY_EXTERN VALUE rb_cBignum; +RUBY_EXTERN VALUE rb_cBinding; +RUBY_EXTERN VALUE rb_cClass; +RUBY_EXTERN VALUE rb_cCont; +RUBY_EXTERN VALUE rb_cDir; +RUBY_EXTERN VALUE rb_cData; +RUBY_EXTERN VALUE rb_cFalseClass; +RUBY_EXTERN VALUE rb_cEncoding; +RUBY_EXTERN VALUE rb_cEnumerator; +RUBY_EXTERN VALUE rb_cFile; +RUBY_EXTERN VALUE rb_cFixnum; +RUBY_EXTERN VALUE rb_cFloat; +RUBY_EXTERN VALUE rb_cHash; +RUBY_EXTERN VALUE rb_cInteger; +RUBY_EXTERN VALUE rb_cIO; +RUBY_EXTERN VALUE rb_cMatch; +RUBY_EXTERN VALUE rb_cMethod; +RUBY_EXTERN VALUE rb_cModule; +RUBY_EXTERN VALUE rb_cNameErrorMesg; +RUBY_EXTERN VALUE rb_cNilClass; +RUBY_EXTERN VALUE rb_cNumeric; +RUBY_EXTERN VALUE rb_cProc; +RUBY_EXTERN VALUE rb_cRandom; +RUBY_EXTERN VALUE rb_cRange; +RUBY_EXTERN VALUE rb_cRational; +RUBY_EXTERN VALUE rb_cComplex; +RUBY_EXTERN VALUE rb_cRegexp; +RUBY_EXTERN VALUE rb_cStat; +RUBY_EXTERN VALUE rb_cString; +RUBY_EXTERN VALUE rb_cStruct; +RUBY_EXTERN VALUE rb_cSymbol; +RUBY_EXTERN VALUE rb_cThread; +RUBY_EXTERN VALUE rb_cTime; +RUBY_EXTERN VALUE rb_cTrueClass; +RUBY_EXTERN VALUE rb_cUnboundMethod; + +RUBY_EXTERN VALUE rb_eException; +RUBY_EXTERN VALUE rb_eStandardError; +RUBY_EXTERN VALUE rb_eSystemExit; +RUBY_EXTERN VALUE rb_eInterrupt; +RUBY_EXTERN VALUE rb_eSignal; +RUBY_EXTERN VALUE rb_eFatal; +RUBY_EXTERN VALUE rb_eArgError; +RUBY_EXTERN VALUE rb_eEOFError; +RUBY_EXTERN VALUE rb_eIndexError; +RUBY_EXTERN VALUE rb_eStopIteration; +RUBY_EXTERN VALUE rb_eKeyError; +RUBY_EXTERN VALUE rb_eRangeError; +RUBY_EXTERN VALUE rb_eIOError; +RUBY_EXTERN VALUE rb_eRuntimeError; +RUBY_EXTERN VALUE rb_eSecurityError; +RUBY_EXTERN VALUE rb_eSystemCallError; +RUBY_EXTERN VALUE rb_eThreadError; +RUBY_EXTERN VALUE rb_eTypeError; +RUBY_EXTERN VALUE rb_eZeroDivError; +RUBY_EXTERN VALUE rb_eNotImpError; +RUBY_EXTERN VALUE rb_eNoMemError; +RUBY_EXTERN VALUE rb_eNoMethodError; +RUBY_EXTERN VALUE rb_eFloatDomainError; +RUBY_EXTERN VALUE rb_eLocalJumpError; +RUBY_EXTERN VALUE rb_eSysStackError; +RUBY_EXTERN VALUE rb_eRegexpError; +RUBY_EXTERN VALUE rb_eEncodingError; +RUBY_EXTERN VALUE rb_eEncCompatError; + +RUBY_EXTERN VALUE rb_eScriptError; +RUBY_EXTERN VALUE rb_eNameError; +RUBY_EXTERN VALUE rb_eSyntaxError; +RUBY_EXTERN VALUE rb_eLoadError; + +RUBY_EXTERN VALUE rb_eMathDomainError; + +RUBY_EXTERN VALUE rb_stdin, rb_stdout, rb_stderr; + +static inline VALUE +rb_class_of(VALUE obj) +{ + if (IMMEDIATE_P(obj)) { + if (FIXNUM_P(obj)) return rb_cFixnum; + if (FLONUM_P(obj)) return rb_cFloat; + if (obj == Qtrue) return rb_cTrueClass; + if (SYMBOL_P(obj)) return rb_cSymbol; + } + else if (!RTEST(obj)) { + if (obj == Qnil) return rb_cNilClass; + if (obj == Qfalse) return rb_cFalseClass; + } + return RBASIC(obj)->klass; +} + +static inline int +rb_type(VALUE obj) +{ + if (IMMEDIATE_P(obj)) { + if (FIXNUM_P(obj)) return T_FIXNUM; + if (FLONUM_P(obj)) return T_FLOAT; + if (obj == Qtrue) return T_TRUE; + if (SYMBOL_P(obj)) return T_SYMBOL; + if (obj == Qundef) return T_UNDEF; + } + else if (!RTEST(obj)) { + if (obj == Qnil) return T_NIL; + if (obj == Qfalse) return T_FALSE; + } + return BUILTIN_TYPE(obj); +} + +#define RB_FLOAT_TYPE_P(obj) (FLONUM_P(obj) || (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == T_FLOAT)) + +#define RB_TYPE_P(obj, type) ( \ + ((type) == T_FIXNUM) ? FIXNUM_P(obj) : \ + ((type) == T_TRUE) ? ((obj) == Qtrue) : \ + ((type) == T_FALSE) ? ((obj) == Qfalse) : \ + ((type) == T_NIL) ? ((obj) == Qnil) : \ + ((type) == T_UNDEF) ? ((obj) == Qundef) : \ + ((type) == T_SYMBOL) ? SYMBOL_P(obj) : \ + ((type) == T_FLOAT) ? RB_FLOAT_TYPE_P(obj) : \ + (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == (type))) + +#ifdef __GNUC__ +#define rb_type_p(obj, type) \ + __extension__ (__builtin_constant_p(type) ? RB_TYPE_P((obj), (type)) : \ + rb_type(obj) == (type)) +#else +#define rb_type_p(obj, type) (rb_type(obj) == (type)) +#endif + +#ifdef __GNUC__ +#define rb_special_const_p(obj) \ + __extension__ ({VALUE special_const_obj = (obj); (int)(SPECIAL_CONST_P(special_const_obj) ? Qtrue : Qfalse);}) +#else +static inline int +rb_special_const_p(VALUE obj) +{ + if (SPECIAL_CONST_P(obj)) return (int)Qtrue; + return (int)Qfalse; +} +#endif + +#include "ruby/intern.h" + +#if defined(EXTLIB) && defined(USE_DLN_A_OUT) +/* hook for external modules */ +static char *dln_libs_to_be_linked[] = { EXTLIB, 0 }; +#endif + +#define RUBY_VM 1 /* YARV */ +#define HAVE_NATIVETHREAD +int ruby_native_thread_p(void); + +/* traditional set_trace_func events */ +#define RUBY_EVENT_NONE 0x0000 +#define RUBY_EVENT_LINE 0x0001 +#define RUBY_EVENT_CLASS 0x0002 +#define RUBY_EVENT_END 0x0004 +#define RUBY_EVENT_CALL 0x0008 +#define RUBY_EVENT_RETURN 0x0010 +#define RUBY_EVENT_C_CALL 0x0020 +#define RUBY_EVENT_C_RETURN 0x0040 +#define RUBY_EVENT_RAISE 0x0080 +#define RUBY_EVENT_ALL 0x00ff + +/* for TracePoint extended events */ +#define RUBY_EVENT_B_CALL 0x0100 +#define RUBY_EVENT_B_RETURN 0x0200 +#define RUBY_EVENT_THREAD_BEGIN 0x0400 +#define RUBY_EVENT_THREAD_END 0x0800 +#define RUBY_EVENT_TRACEPOINT_ALL 0xffff + +/* special events */ +#define RUBY_EVENT_SPECIFIED_LINE 0x010000 +#define RUBY_EVENT_COVERAGE 0x020000 + +/* internal events */ +#define RUBY_INTERNAL_EVENT_SWITCH 0x040000 +#define RUBY_EVENT_SWITCH 0x040000 /* obsolete name. this macro is for compatibility */ + /* 0x080000 */ +#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000 +#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000 +#define RUBY_INTERNAL_EVENT_GC_START 0x400000 +#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000 +#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000 +#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x1f00000 +#define RUBY_INTERNAL_EVENT_MASK 0xfffe0000 + +typedef unsigned long rb_event_flag_t; +typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass); + +#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1 +void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); +int rb_remove_event_hook(rb_event_hook_func_t func); + +/* locale insensitive functions */ + +#define rb_isascii(c) ((unsigned long)(c) < 128) +int rb_isalnum(int c); +int rb_isalpha(int c); +int rb_isblank(int c); +int rb_iscntrl(int c); +int rb_isdigit(int c); +int rb_isgraph(int c); +int rb_islower(int c); +int rb_isprint(int c); +int rb_ispunct(int c); +int rb_isspace(int c); +int rb_isupper(int c); +int rb_isxdigit(int c); +int rb_tolower(int c); +int rb_toupper(int c); + +#ifndef ISPRINT +#define ISASCII(c) rb_isascii((unsigned char)(c)) +#undef ISPRINT +#define ISPRINT(c) rb_isprint((unsigned char)(c)) +#define ISGRAPH(c) rb_isgraph((unsigned char)(c)) +#define ISSPACE(c) rb_isspace((unsigned char)(c)) +#define ISUPPER(c) rb_isupper((unsigned char)(c)) +#define ISLOWER(c) rb_islower((unsigned char)(c)) +#define ISALNUM(c) rb_isalnum((unsigned char)(c)) +#define ISALPHA(c) rb_isalpha((unsigned char)(c)) +#define ISDIGIT(c) rb_isdigit((unsigned char)(c)) +#define ISXDIGIT(c) rb_isxdigit((unsigned char)(c)) +#endif +#define TOUPPER(c) rb_toupper((unsigned char)(c)) +#define TOLOWER(c) rb_tolower((unsigned char)(c)) + +int st_locale_insensitive_strcasecmp(const char *s1, const char *s2); +int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n); +#define STRCASECMP(s1, s2) (st_locale_insensitive_strcasecmp((s1), (s2))) +#define STRNCASECMP(s1, s2, n) (st_locale_insensitive_strncasecmp((s1), (s2), (n))) + +unsigned long ruby_strtoul(const char *str, char **endptr, int base); +#define STRTOUL(str, endptr, base) (ruby_strtoul((str), (endptr), (base))) + +#define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();} + +PRINTF_ARGS(int ruby_snprintf(char *str, size_t n, char const *fmt, ...), 3, 4); +int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap); + +#ifndef RUBY_DONT_SUBST +#include "ruby/subst.h" +#endif + +/** + * @defgroup embed CRuby Embedding APIs + * CRuby interpreter APIs. These are APIs to embed MRI interpreter into your + * program. + * These functions are not a part of Ruby extension library API. + * Extension libraries of Ruby should not depend on these functions. + * @{ + */ + +/** @defgroup ruby1 ruby(1) implementation + * A part of the implementation of ruby(1) command. + * Other programs that embed Ruby interpreter do not always need to use these + * functions. + * @{ + */ + +void ruby_sysinit(int *argc, char ***argv); +void ruby_init(void); +void* ruby_options(int argc, char** argv); +int ruby_executable_node(void *n, int *status); +int ruby_run_node(void *n); + +/* version.c */ +void ruby_show_version(void); +void ruby_show_copyright(void); + + +/*! A convenience macro to call ruby_init_stack(). Must be placed just after + * variable declarations */ +#define RUBY_INIT_STACK \ + VALUE variable_in_this_stack_frame; \ + ruby_init_stack(&variable_in_this_stack_frame); +/*! @} */ + +#ifdef __ia64 +void ruby_init_stack(volatile VALUE*, void*); +#define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp()) +#else +void ruby_init_stack(volatile VALUE*); +#endif +#define Init_stack(addr) ruby_init_stack(addr) + +int ruby_setup(void); +int ruby_cleanup(volatile int); + +void ruby_finalize(void); +NORETURN(void ruby_stop(int)); + +void ruby_set_stack_size(size_t); +int ruby_stack_check(void); +size_t ruby_stack_length(VALUE**); + +int ruby_exec_node(void *n); + +void ruby_script(const char* name); +void ruby_set_script_name(VALUE name); + +void ruby_prog_init(void); +void ruby_set_argv(int, char**); +void *ruby_process_options(int, char**); +void ruby_init_loadpath(void); +void ruby_incpush(const char*); +void ruby_sig_finalize(void); + +/*! @} */ + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif +#endif /* RUBY_RUBY_H */ diff --git a/vendor/ruby/st.h b/vendor/ruby/st.h new file mode 100644 index 0000000..975da65 --- /dev/null +++ b/vendor/ruby/st.h @@ -0,0 +1,154 @@ +/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ + +/* @(#) st.h 5.1 89/12/14 */ + +#ifndef RUBY_ST_H +#define RUBY_ST_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/defines.h" + +RUBY_SYMBOL_EXPORT_BEGIN + +#if SIZEOF_LONG == SIZEOF_VOIDP +typedef unsigned long st_data_t; +#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP +typedef unsigned LONG_LONG st_data_t; +#else +# error ---->> st.c requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<---- +#endif +#define ST_DATA_T_DEFINED + +#ifndef CHAR_BIT +# ifdef HAVE_LIMITS_H +# include +# else +# define CHAR_BIT 8 +# endif +#endif +#ifndef _ +# define _(args) args +#endif +#ifndef ANYARGS +# ifdef __cplusplus +# define ANYARGS ... +# else +# define ANYARGS +# endif +#endif + +typedef struct st_table st_table; + +typedef st_data_t st_index_t; +typedef int st_compare_func(st_data_t, st_data_t); +typedef st_index_t st_hash_func(st_data_t); + +typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index_t) ? 1 : -1]; +#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP + +struct st_hash_type { + int (*compare)(ANYARGS /*st_data_t, st_data_t*/); /* st_compare_func* */ + st_index_t (*hash)(ANYARGS /*st_data_t*/); /* st_hash_func* */ +}; + +#define ST_INDEX_BITS (sizeof(st_index_t) * CHAR_BIT) + +#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR) && defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P) +# define ST_DATA_COMPATIBLE_P(type) \ + __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0) +#else +# define ST_DATA_COMPATIBLE_P(type) 0 +#endif + +struct st_table { + const struct st_hash_type *type; + st_index_t num_bins; + unsigned int entries_packed : 1; +#ifdef __GNUC__ + /* + * C spec says, + * A bit-field shall have a type that is a qualified or unqualified + * version of _Bool, signed int, unsigned int, or some other + * implementation-defined type. It is implementation-defined whether + * atomic types are permitted. + * In short, long and long long bit-field are implementation-defined + * feature. Therefore we want to supress a warning explicitly. + */ + __extension__ +#endif + st_index_t num_entries : ST_INDEX_BITS - 1; + union { + struct { + struct st_table_entry **bins; + struct st_table_entry *head, *tail; + } big; + struct { + struct st_packed_entry *entries; + st_index_t real_entries; + } packed; + } as; +}; + +#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0) + +enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; + +st_table *st_init_table(const struct st_hash_type *); +st_table *st_init_table_with_size(const struct st_hash_type *, st_index_t); +st_table *st_init_numtable(void); +st_table *st_init_numtable_with_size(st_index_t); +st_table *st_init_strtable(void); +st_table *st_init_strtable_with_size(st_index_t); +st_table *st_init_strcasetable(void); +st_table *st_init_strcasetable_with_size(st_index_t); +int st_delete(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ +int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t); +int st_shift(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ +int st_insert(st_table *, st_data_t, st_data_t); +int st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t)); +int st_lookup(st_table *, st_data_t, st_data_t *); +int st_get_key(st_table *, st_data_t, st_data_t *); +typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing); +int st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg); +int st_foreach(st_table *, int (*)(ANYARGS), st_data_t); +int st_foreach_check(st_table *, int (*)(ANYARGS), st_data_t, st_data_t); +int st_reverse_foreach(st_table *, int (*)(ANYARGS), st_data_t); +st_index_t st_keys(st_table *table, st_data_t *keys, st_index_t size); +st_index_t st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never); +st_index_t st_values(st_table *table, st_data_t *values, st_index_t size); +st_index_t st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never); +void st_add_direct(st_table *, st_data_t, st_data_t); +void st_free_table(st_table *); +void st_cleanup_safe(st_table *, st_data_t); +void st_clear(st_table *); +st_table *st_copy(st_table *); +int st_numcmp(st_data_t, st_data_t); +st_index_t st_numhash(st_data_t); +int st_locale_insensitive_strcasecmp(const char *s1, const char *s2); +int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n); +#define st_strcasecmp st_locale_insensitive_strcasecmp +#define st_strncasecmp st_locale_insensitive_strncasecmp +size_t st_memsize(const st_table *); +st_index_t st_hash(const void *ptr, size_t len, st_index_t h); +st_index_t st_hash_uint32(st_index_t h, uint32_t i); +st_index_t st_hash_uint(st_index_t h, st_index_t i); +st_index_t st_hash_end(st_index_t h); +st_index_t st_hash_start(st_index_t h); +#define st_hash_start(h) ((st_index_t)(h)) + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_ST_H */ diff --git a/vendor/ruby/subst.h b/vendor/ruby/subst.h new file mode 100644 index 0000000..1f0e6db --- /dev/null +++ b/vendor/ruby/subst.h @@ -0,0 +1,19 @@ +#ifndef RUBY_SUBST_H +#define RUBY_SUBST_H 1 + +#undef snprintf +#undef vsnprintf +#define snprintf ruby_snprintf +#define vsnprintf ruby_vsnprintf + +#ifdef BROKEN_CLOSE +#undef getpeername +#define getpeername ruby_getpeername +#undef getsockname +#define getsockname ruby_getsockname +#undef shutdown +#define shutdown ruby_shutdown +#undef close +#define close ruby_close +#endif +#endif diff --git a/vendor/ruby/thread.h b/vendor/ruby/thread.h new file mode 100644 index 0000000..550f678 --- /dev/null +++ b/vendor/ruby/thread.h @@ -0,0 +1,45 @@ +/********************************************************************** + + thread.h - + + $Author: matz $ + created at: Tue Jul 10 17:35:43 JST 2012 + + Copyright (C) 2007 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_THREAD_H +#define RUBY_THREAD_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/intern.h" + +RUBY_SYMBOL_EXPORT_BEGIN + +void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1); + +void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1, + rb_unblock_function_t *ubf, void *data2); +void *rb_thread_call_without_gvl2(void *(*func)(void *), void *data1, + rb_unblock_function_t *ubf, void *data2); + +#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_AFTER 0x01 +#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_ + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_THREAD_H */ diff --git a/vendor/ruby/util.h b/vendor/ruby/util.h new file mode 100644 index 0000000..6521493 --- /dev/null +++ b/vendor/ruby/util.h @@ -0,0 +1,95 @@ +/********************************************************************** + + util.h - + + $Author: nobu $ + created at: Thu Mar 9 11:55:53 JST 1995 + + Copyright (C) 1993-2007 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_UTIL_H +#define RUBY_UTIL_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +#include "ruby/defines.h" +#ifdef RUBY_EXTCONF_H +#include RUBY_EXTCONF_H +#endif + +#ifndef _ +#ifdef __cplusplus +# ifndef HAVE_PROTOTYPES +# define HAVE_PROTOTYPES 1 +# endif +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif +#ifdef HAVE_PROTOTYPES +# define _(args) args +#else +# define _(args) () +#endif +#ifdef HAVE_STDARG_PROTOTYPES +# define __(args) args +#else +# define __(args) () +#endif +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +#define scan_oct(s,l,e) ((int)ruby_scan_oct((s),(l),(e))) +unsigned long ruby_scan_oct(const char *, size_t, size_t *); +#define scan_hex(s,l,e) ((int)ruby_scan_hex((s),(l),(e))) +unsigned long ruby_scan_hex(const char *, size_t, size_t *); + +void ruby_qsort(void *, const size_t, const size_t, + int (*)(const void *, const void *, void *), void *); + +void ruby_setenv(const char *, const char *); +void ruby_unsetenv(const char *); +#undef setenv +#undef unsetenv +#define setenv(name,val) ruby_setenv((name),(val)) +#define unsetenv(name,val) ruby_unsetenv(name) + +char *ruby_strdup(const char *); +#undef strdup +#define strdup(s) ruby_strdup(s) + +char *ruby_getcwd(void); +#define my_getcwd() ruby_getcwd() + +double ruby_strtod(const char *, char **); +#undef strtod +#define strtod(s,e) ruby_strtod((s),(e)) + +#if defined _MSC_VER && _MSC_VER >= 1300 +#pragma warning(push) +#pragma warning(disable:4723) +#endif +#if defined _MSC_VER && _MSC_VER >= 1300 +#pragma warning(pop) +#endif + +void ruby_each_words(const char *, void (*)(const char*, int, void*), void *); + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_UTIL_H */ diff --git a/vendor/ruby/version.h b/vendor/ruby/version.h new file mode 100644 index 0000000..18c0e5a --- /dev/null +++ b/vendor/ruby/version.h @@ -0,0 +1,74 @@ +/********************************************************************** + + ruby/version.h - + + $Author: nobu $ + created at: Wed May 13 12:56:56 JST 2009 + + Copyright (C) 1993-2009 Yukihiro Matsumoto + Copyright (C) 2000 Network Applied Communication Laboratory, Inc. + Copyright (C) 2000 Information-technology Promotion Agency, Japan + +**********************************************************************/ + +/* + * This file contains only + * - never-changable informations, and + * - interfaces accessible from extension libraries. + * + * Never try to check RUBY_VERSION_CODE etc in extension libraries, + * check the features with mkmf.rb instead. + */ + +#ifndef RUBY_VERSION_H +#define RUBY_VERSION_H 1 + +/* The origin. */ +#define RUBY_AUTHOR "Yukihiro Matsumoto" +#define RUBY_BIRTH_YEAR 1993 +#define RUBY_BIRTH_MONTH 2 +#define RUBY_BIRTH_DAY 24 + +/* API version */ +#define RUBY_API_VERSION_MAJOR 2 +#define RUBY_API_VERSION_MINOR 1 +#define RUBY_API_VERSION_TEENY 0 +#define RUBY_API_VERSION_CODE (RUBY_API_VERSION_MAJOR*10000+RUBY_API_VERSION_MINOR*100+RUBY_API_VERSION_TEENY) + +#ifdef RUBY_EXTERN +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +/* + * Interfaces from extension libraries. + * + * Before using these infos, think thrice whether they are really + * necessary or not, and if the answer was yes, think twice a week + * later again. + */ +RUBY_EXTERN const int ruby_api_version[3]; +RUBY_EXTERN const char ruby_version[]; +RUBY_EXTERN const char ruby_release_date[]; +RUBY_EXTERN const char ruby_platform[]; +RUBY_EXTERN const int ruby_patchlevel; +RUBY_EXTERN const char ruby_description[]; +RUBY_EXTERN const char ruby_copyright[]; +RUBY_EXTERN const char ruby_engine[]; + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif +#endif + +#endif diff --git a/vendor/ruby/vm.h b/vendor/ruby/vm.h new file mode 100644 index 0000000..6b7b81c --- /dev/null +++ b/vendor/ruby/vm.h @@ -0,0 +1,64 @@ +/********************************************************************** + + ruby/vm.h - + + $Author: nobu $ + created at: Sat May 31 15:17:36 2008 + + Copyright (C) 2008 Yukihiro Matsumoto + +**********************************************************************/ + +#ifndef RUBY_VM_H +#define RUBY_VM_H 1 + +#if defined(__cplusplus) +extern "C" { +#if 0 +} /* satisfy cc-mode */ +#endif +#endif + +RUBY_SYMBOL_EXPORT_BEGIN + +/* Place holder. + * + * We will prepare VM creation/control APIs on 1.9.2 or later. + * If you have an interest about it, please see mvm branch. + * http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/mvm/ + */ + +/* VM type declaration */ +typedef struct rb_vm_struct ruby_vm_t; + +/* core API */ +int ruby_vm_destruct(ruby_vm_t *vm); + +/** + * ruby_vm_at_exit registers a function _func_ to be invoked when a VM + * passed away. Functions registered this way runs in reverse order + * of registration, just like END {} block does. The difference is + * its timing to be triggered. ruby_vm_at_exit functions runs when a + * VM _passed_ _away_, while END {} blocks runs just _before_ a VM + * _is_ _passing_ _away_. + * + * You cannot register a function to another VM than where you are in. + * So where to register is intuitive, omitted. OTOH the argument + * _func_ cannot know which VM it is in because at the time of + * invocation, the VM has already died and there is no execution + * context. The VM itself is passed as the first argument to it. + * + * @param[in] func the function to register. + */ +void ruby_vm_at_exit(void(*func)(ruby_vm_t *)); + +RUBY_SYMBOL_EXPORT_END + +#if defined(__cplusplus) +#if 0 +{ /* satisfy cc-mode */ +#endif +} /* extern "C" { */ +#endif + +#endif /* RUBY_VM_H */ diff --git a/vendor/x86_64-darwin13.0/ruby/config.h b/vendor/x86_64-darwin13.0/ruby/config.h new file mode 100644 index 0000000..0b59635 --- /dev/null +++ b/vendor/x86_64-darwin13.0/ruby/config.h @@ -0,0 +1,326 @@ +#ifndef INCLUDE_RUBY_CONFIG_H +#define INCLUDE_RUBY_CONFIG_H 1 +/* confdefs.h */ +#define CANONICALIZATION_FOR_MATHN 1 +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define __EXTENSIONS__ 1 +#define _ALL_SOURCE 1 +#define _GNU_SOURCE 1 +#define _POSIX_PTHREAD_SEMANTICS 1 +#define _TANDEM_SOURCE 1 +#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)") +#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop") +#define HAVE_CRT_EXTERNS_H 1 +#define HAVE_LIBDL 1 +#define HAVE_DIRENT_H 1 +#define HAVE__BOOL 1 +#define HAVE_STDBOOL_H 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_SYS_FILE_H 1 +#define HAVE_SYS_IOCTL_H 1 +#define HAVE_SYS_SYSCALL_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_SYS_FCNTL_H 1 +#define HAVE_SYS_SELECT_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_SYS_TIMES_H 1 +#define HAVE_SYS_PARAM_H 1 +#define HAVE_PWD_H 1 +#define HAVE_GRP_H 1 +#define HAVE_UTIME_H 1 +#define HAVE_SYS_RESOURCE_H 1 +#define HAVE_FLOAT_H 1 +#define HAVE_LANGINFO_H 1 +#define HAVE_LOCALE_H 1 +#define HAVE_TIME_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_MALLOC_MALLOC_H 1 +#define HAVE_LONG_LONG 1 +#define HAVE_OFF_T 1 +#define SIZEOF_INT 4 +#define SIZEOF_SHORT 2 +#define SIZEOF_LONG 8 +#define SIZEOF_LONG_LONG 8 +#define SIZEOF___INT64 0 +#define SIZEOF___INT128 16 +#define SIZEOF_OFF_T 8 +#define SIZEOF_VOIDP 8 +#define SIZEOF_FLOAT 4 +#define SIZEOF_DOUBLE 8 +#define SIZEOF_TIME_T 8 +#define SIZEOF_CLOCK_T 8 +#define PRI_LL_PREFIX "ll" +#define rb_pid_t pid_t +#define SIGNEDNESS_OF_PID_T -1 +#define PIDT2NUM(v) INT2NUM(v) +#define NUM2PIDT(v) NUM2INT(v) +#define PRI_PIDT_PREFIX PRI_INT_PREFIX +#define rb_uid_t uid_t +#define SIGNEDNESS_OF_UID_T +1 +#define UIDT2NUM(v) UINT2NUM(v) +#define NUM2UIDT(v) NUM2UINT(v) +#define PRI_UIDT_PREFIX PRI_INT_PREFIX +#define rb_gid_t gid_t +#define SIGNEDNESS_OF_GID_T +1 +#define GIDT2NUM(v) UINT2NUM(v) +#define NUM2GIDT(v) NUM2UINT(v) +#define PRI_GIDT_PREFIX PRI_INT_PREFIX +#define rb_time_t time_t +#define SIGNEDNESS_OF_TIME_T -1 +#define TIMET2NUM(v) LONG2NUM(v) +#define NUM2TIMET(v) NUM2LONG(v) +#define PRI_TIMET_PREFIX PRI_LONG_PREFIX +#define rb_dev_t dev_t +#define SIGNEDNESS_OF_DEV_T -1 +#define DEVT2NUM(v) INT2NUM(v) +#define NUM2DEVT(v) NUM2INT(v) +#define PRI_DEVT_PREFIX PRI_INT_PREFIX +#define rb_mode_t mode_t +#define SIGNEDNESS_OF_MODE_T +1 +#define MODET2NUM(v) UINT2NUM(v) +#define NUM2MODET(v) NUM2UINT(v) +#define PRI_MODET_PREFIX PRI_INT_PREFIX +#define rb_rlim_t rlim_t +#define SIGNEDNESS_OF_RLIM_T +1 +#define RLIM2NUM(v) ULL2NUM(v) +#define NUM2RLIM(v) NUM2ULL(v) +#define PRI_RLIM_PREFIX PRI_LL_PREFIX +#define rb_off_t off_t +#define SIGNEDNESS_OF_OFF_T -1 +#define OFFT2NUM(v) LL2NUM(v) +#define NUM2OFFT(v) NUM2LL(v) +#define PRI_OFFT_PREFIX PRI_LL_PREFIX +#define rb_clockid_t int +#define SIGNEDNESS_OF_CLOCKID_T -1 +#define CLOCKID2NUM(v) INT2NUM(v) +#define NUM2CLOCKID(v) NUM2INT(v) +#define PRI_CLOCKID_PREFIX PRI_INT_PREFIX +#define HAVE_PROTOTYPES 1 +#define TOKEN_PASTE(x,y) x##y +#define STRINGIZE(expr) STRINGIZE0(expr) +#define HAVE_STDARG_PROTOTYPES 1 +#define HAVE_VA_ARGS_MACRO 1 +#define NORETURN(x) __attribute__ ((noreturn)) x +#define DEPRECATED(x) __attribute__ ((deprecated)) x +#define NOINLINE(x) __attribute__ ((noinline)) x +#define FUNC_CDECL(x) __attribute__ ((cdecl)) x +#define HAVE_GCC_ATOMIC_BUILTINS 1 +#define HAVE_GCC_SYNC_BUILTINS 1 +#define UNREACHABLE __builtin_unreachable() +#define RUBY_FUNC_EXPORTED __attribute__ ((visibility("default"))) extern +#define RUBY_FUNCTION_NAME_STRING __func__ +#define HAVE_DECL_SYS_NERR 1 +#define HAVE_DECL_GETENV 1 +#define SIZEOF_SIZE_T 8 +#define SIZEOF_PTRDIFF_T 8 +#define PRI_SIZE_PREFIX "z" +#define PRI_PTRDIFF_PREFIX "t" +#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 +#define HAVE_ST_BLKSIZE 1 +#define HAVE_STRUCT_STAT_ST_BLOCKS 1 +#define HAVE_ST_BLOCKS 1 +#define HAVE_STRUCT_STAT_ST_RDEV 1 +#define HAVE_ST_RDEV 1 +#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_LONG +#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_LONG +#define HAVE_STRUCT_STAT_ST_ATIMESPEC 1 +#define HAVE_STRUCT_STAT_ST_MTIMESPEC 1 +#define HAVE_STRUCT_STAT_ST_CTIMESPEC 1 +#define HAVE_STRUCT_TIMEVAL 1 +#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T +#define HAVE_STRUCT_TIMESPEC 1 +#define HAVE_STRUCT_TIMEZONE 1 +#define HAVE_RB_FD_INIT 1 +#define HAVE_INT8_T 1 +#define SIZEOF_INT8_T 1 +#define HAVE_UINT8_T 1 +#define SIZEOF_UINT8_T 1 +#define HAVE_INT16_T 1 +#define SIZEOF_INT16_T 2 +#define HAVE_UINT16_T 1 +#define SIZEOF_UINT16_T 2 +#define HAVE_INT32_T 1 +#define SIZEOF_INT32_T 4 +#define HAVE_UINT32_T 1 +#define SIZEOF_UINT32_T 4 +#define HAVE_INT64_T 1 +#define SIZEOF_INT64_T 8 +#define HAVE_UINT64_T 1 +#define SIZEOF_UINT64_T 8 +#define HAVE_INT128_T 1 +#define int128_t __int128 +#define SIZEOF_INT128_T SIZEOF___INT128 +#define HAVE_UINT128_T 1 +#define uint128_t unsigned __int128 +#define SIZEOF_UINT128_T SIZEOF_UNSIGNED___INT128 +#define HAVE_INTPTR_T 1 +#define SIZEOF_INTPTR_T 8 +#define HAVE_UINTPTR_T 1 +#define SIZEOF_UINTPTR_T 8 +#define HAVE_SSIZE_T 1 +#define SIZEOF_SSIZE_T 8 +#define GETGROUPS_T gid_t +#define RETSIGTYPE void +#define HAVE_ALLOCA_H 1 +#define HAVE_ALLOCA 1 +#define HAVE_DUP2 1 +#define HAVE_MEMMOVE 1 +#define HAVE_STRERROR 1 +#define HAVE_STRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_CRYPT 1 +#define HAVE_FLOCK 1 +#define HAVE_ISNAN 1 +#define HAVE_FINITE 1 +#define HAVE_ISINF 1 +#define HAVE_HYPOT 1 +#define HAVE_ACOSH 1 +#define HAVE_ERF 1 +#define HAVE_TGAMMA 1 +#define HAVE_LGAMMA_R 1 +#define HAVE_CBRT 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +#define HAVE_FFS 1 +#define SPT_TYPE SPT_REUSEARGV +#define HAVE_SIGNBIT 1 +#define HAVE___SYSCALL 1 +#define HAVE__LONGJMP 1 +#define HAVE__SETJMP 1 +#define HAVE_CHROOT 1 +#define HAVE_COSH 1 +#define HAVE_DLOPEN 1 +#define HAVE_DUP 1 +#define HAVE_ENDGRENT 1 +#define HAVE_FCHMOD 1 +#define HAVE_FCHOWN 1 +#define HAVE_FCNTL 1 +#define HAVE_FMOD 1 +#define HAVE_FORK 1 +#define HAVE_FSYNC 1 +#define HAVE_FTRUNCATE 1 +#define HAVE_GETCWD 1 +#define HAVE_GETGRNAM_R 1 +#define HAVE_GETGROUPS 1 +#define HAVE_GETPGID 1 +#define HAVE_GETPGRP 1 +#define HAVE_GETPRIORITY 1 +#define HAVE_GETPWNAM_R 1 +#define HAVE_GETRLIMIT 1 +#define HAVE_GETSID 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_GMTIME_R 1 +#define HAVE_INITGROUPS 1 +#define HAVE_IOCTL 1 +#define HAVE_ISSETUGID 1 +#define HAVE_KILLPG 1 +#define HAVE_LCHMOD 1 +#define HAVE_LCHOWN 1 +#define HAVE_LINK 1 +#define HAVE_LLABS 1 +#define HAVE_LOCKF 1 +#define HAVE_LOG2 1 +#define HAVE_LSTAT 1 +#define HAVE_MALLOC_SIZE 1 +#define HAVE_MBLEN 1 +#define HAVE_MKTIME 1 +#define HAVE_POLL 1 +#define HAVE_POSIX_MEMALIGN 1 +#define HAVE_PREAD 1 +#define HAVE_READLINK 1 +#define HAVE_ROUND 1 +#define HAVE_SEEKDIR 1 +#define HAVE_SENDFILE 1 +#define HAVE_SETEGID 1 +#define HAVE_SETENV 1 +#define HAVE_SETEUID 1 +#define HAVE_SETGID 1 +#define HAVE_SETGROUPS 1 +#define HAVE_SETPGID 1 +#define HAVE_SETPGRP 1 +#define HAVE_SETREGID 1 +#define HAVE_SETREUID 1 +#define HAVE_SETRGID 1 +#define HAVE_SETRLIMIT 1 +#define HAVE_SETRUID 1 +#define HAVE_SETSID 1 +#define HAVE_SETUID 1 +#define HAVE_SHUTDOWN 1 +#define HAVE_SIGACTION 1 +#define HAVE_SIGALTSTACK 1 +#define HAVE_SIGPROCMASK 1 +#define HAVE_SINH 1 +#define HAVE_SYMLINK 1 +#define HAVE_SYSCALL 1 +#define HAVE_SYSCONF 1 +#define HAVE_TANH 1 +#define HAVE_TELLDIR 1 +#define HAVE_TIMEGM 1 +#define HAVE_TIMES 1 +#define HAVE_TRUNCATE 1 +#define HAVE_UNSETENV 1 +#define HAVE_UTIMES 1 +#define HAVE_WAIT4 1 +#define HAVE_WAITPID 1 +#define HAVE_BUILTIN___BUILTIN_BSWAP16 1 +#define HAVE_BUILTIN___BUILTIN_BSWAP32 1 +#define HAVE_BUILTIN___BUILTIN_BSWAP64 1 +#define HAVE_BUILTIN___BUILTIN_CLZ 1 +#define HAVE_BUILTIN___BUILTIN_CLZL 1 +#define HAVE_BUILTIN___BUILTIN_CLZLL 1 +#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1 +#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1 +#define RUBY_SETJMP(env) _setjmp(env) +#define RUBY_LONGJMP(env,val) _longjmp(env,val) +#define RUBY_JMP_BUF jmp_buf +#define HAVE_STRUCT_TM_TM_ZONE 1 +#define HAVE_TM_ZONE 1 +#define HAVE_STRUCT_TM_TM_GMTOFF 1 +#define HAVE_DAYLIGHT 1 +#define HAVE_VAR_TIMEZONE 1 +#define TYPEOF_VAR_TIMEZONE long +#define HAVE_TIMEZONE 1 +#define TIMEZONE_VOID 1 +#define NEGATIVE_TIME_T 1 +#define POSIX_SIGNAL 1 +#define RSHIFT(x,y) ((x)>>(int)(y)) +#define FILE_COUNT _r +#define FILE_READPTR _p +#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG +#define HAVE__SC_CLK_TCK 1 +#define STACK_GROW_DIRECTION -1 +#define _REENTRANT 1 +#define _THREAD_SAFE 1 +#define HAVE_LIBPTHREAD 1 +#define HAVE_SCHED_YIELD 1 +#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1 +#define HAVE_PTHREAD_ATTR_GETSTACK 1 +#define HAVE_PTHREAD_GET_STACKADDR_NP 1 +#define HAVE_PTHREAD_GET_STACKSIZE_NP 1 +#define HAVE_PTHREAD_COND_INIT 1 +#define HAVE_PTHREAD_CONDATTR_INIT 1 +#define HAVE_PTHREAD_SIGMASK 1 +#define HAVE_PTHREAD_SETNAME_NP 1 +#define HAVE_PTHREAD_ATTR_INIT 1 +#define SET_THREAD_NAME(name) pthread_setname_np(name) +#define HAVE_EXECINFO_H 1 +#define HAVE_BACKTRACE 1 +#define BROKEN_BACKTRACE 1 +#define HAVE_DLADDR 1 +#define DLEXT_MAXLEN 7 +#define DLEXT ".bundle" +#define EXTSTATIC 1 +#define HAVE_PTHREAD_H 1 +#define LOAD_RELATIVE 1 +#define RUBY_PLATFORM "x86_64-darwin13.0" +#endif /* INCLUDE_RUBY_CONFIG_H */ From 41eeb01ef3cab7ebe85463742d118b650e8d5490 Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 11:18:59 -0400 Subject: [PATCH 02/11] removing useless files --- .gitignore | 1 + vendor/ruby.h | 35 - vendor/ruby/backward/classext.h | 18 - vendor/ruby/backward/rubyio.h | 6 - vendor/ruby/backward/rubysig.h | 52 - vendor/ruby/backward/st.h | 6 - vendor/ruby/backward/util.h | 6 - vendor/ruby/debug.h | 110 -- vendor/ruby/defines.h | 324 ---- vendor/ruby/digest.h | 32 - vendor/ruby/encoding.h | 363 ----- vendor/ruby/intern.h | 956 ------------ vendor/ruby/io.h | 214 --- vendor/ruby/missing.h | 244 --- vendor/ruby/oniguruma.h | 835 ----------- vendor/ruby/re.h | 71 - vendor/ruby/regex.h | 46 - vendor/ruby/ruby.h | 1872 ------------------------ vendor/ruby/st.h | 154 -- vendor/ruby/subst.h | 19 - vendor/ruby/thread.h | 45 - vendor/ruby/util.h | 95 -- vendor/ruby/version.h | 74 - vendor/ruby/vm.h | 64 - vendor/x86_64-darwin13.0/ruby/config.h | 326 ----- 25 files changed, 1 insertion(+), 5967 deletions(-) delete mode 100644 vendor/ruby.h delete mode 100644 vendor/ruby/backward/classext.h delete mode 100644 vendor/ruby/backward/rubyio.h delete mode 100644 vendor/ruby/backward/rubysig.h delete mode 100644 vendor/ruby/backward/st.h delete mode 100644 vendor/ruby/backward/util.h delete mode 100644 vendor/ruby/debug.h delete mode 100644 vendor/ruby/defines.h delete mode 100644 vendor/ruby/digest.h delete mode 100644 vendor/ruby/encoding.h delete mode 100644 vendor/ruby/intern.h delete mode 100644 vendor/ruby/io.h delete mode 100644 vendor/ruby/missing.h delete mode 100644 vendor/ruby/oniguruma.h delete mode 100644 vendor/ruby/re.h delete mode 100644 vendor/ruby/regex.h delete mode 100644 vendor/ruby/ruby.h delete mode 100644 vendor/ruby/st.h delete mode 100644 vendor/ruby/subst.h delete mode 100644 vendor/ruby/thread.h delete mode 100644 vendor/ruby/util.h delete mode 100644 vendor/ruby/version.h delete mode 100644 vendor/ruby/vm.h delete mode 100644 vendor/x86_64-darwin13.0/ruby/config.h diff --git a/.gitignore b/.gitignore index 3b0bd88..f1b5581 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ atlassian-ide-plugin.xml rspec.xml ruby-rs-232.xcodeproj script/ruby +/vendor diff --git a/vendor/ruby.h b/vendor/ruby.h deleted file mode 100644 index 076b5ce..0000000 --- a/vendor/ruby.h +++ /dev/null @@ -1,35 +0,0 @@ -/********************************************************************** - - ruby.h - - - $Author$ - created at: Sun 10 12:06:15 Jun JST 2007 - - Copyright (C) 2007-2008 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_H -#define RUBY_H 1 - -#define HAVE_RUBY_DEFINES_H 1 -#define HAVE_RUBY_ENCODING_H 1 -#define HAVE_RUBY_INTERN_H 1 -#define HAVE_RUBY_IO_H 1 -#define HAVE_RUBY_MISSING_H 1 -#define HAVE_RUBY_ONIGURUMA_H 1 -#define HAVE_RUBY_RE_H 1 -#define HAVE_RUBY_REGEX_H 1 -#define HAVE_RUBY_RUBY_H 1 -#define HAVE_RUBY_ST_H 1 -#define HAVE_RUBY_THREAD_H 1 -#define HAVE_RUBY_UTIL_H 1 -#define HAVE_RUBY_VERSION_H 1 -#define HAVE_RUBY_VM_H 1 -#ifdef _WIN32 -#define HAVE_RUBY_WIN32_H 1 -#endif - -#include "ruby/ruby.h" - -#endif /* RUBY_H */ diff --git a/vendor/ruby/backward/classext.h b/vendor/ruby/backward/classext.h deleted file mode 100644 index 33f3b01..0000000 --- a/vendor/ruby/backward/classext.h +++ /dev/null @@ -1,18 +0,0 @@ -#if defined __GNUC__ -#warning use of RClass internals is deprecated -#elif defined _MSC_VER || defined __BORLANDC__ -#pragma message("warning: use of RClass internals is deprecated") -#endif - -#ifndef RUBY_BACKWARD_CLASSEXT_H -#define RUBY_BACKWARD_CLASSEXT_H 1 - -typedef struct rb_deprecated_classext_struct { - VALUE super; -} rb_deprecated_classext_t; - -#undef RCLASS_SUPER(c) -#define RCLASS_EXT(c) ((rb_deprecated_classext_t *)RCLASS(c)->ptr) -#define RCLASS_SUPER(c) (RCLASS(c)->super) - -#endif /* RUBY_BACKWARD_CLASSEXT_H */ diff --git a/vendor/ruby/backward/rubyio.h b/vendor/ruby/backward/rubyio.h deleted file mode 100644 index d5246db..0000000 --- a/vendor/ruby/backward/rubyio.h +++ /dev/null @@ -1,6 +0,0 @@ -#if defined __GNUC__ -#warning use "ruby/io.h" instead of "rubyio.h" -#elif defined _MSC_VER || defined __BORLANDC__ -#pragma message("warning: use \"ruby/io.h\" instead of \"rubyio.h\"") -#endif -#include "ruby/io.h" diff --git a/vendor/ruby/backward/rubysig.h b/vendor/ruby/backward/rubysig.h deleted file mode 100644 index bb32a2e..0000000 --- a/vendor/ruby/backward/rubysig.h +++ /dev/null @@ -1,52 +0,0 @@ -/********************************************************************** - - rubysig.h - - - $Author: nobu $ - $Date: 2013-04-05 19:29:38 +0900 (Fri, 05 Apr 2013) $ - created at: Wed Aug 16 01:15:38 JST 1995 - - Copyright (C) 1993-2008 Yukihiro Matsumoto - -**********************************************************************/ - -#if defined __GNUC__ -#warning rubysig.h is obsolete -#elif defined _MSC_VER || defined __BORLANDC__ -#pragma message("warning: rubysig.h is obsolete") -#endif - -#ifndef RUBYSIG_H -#define RUBYSIG_H -#include "ruby/ruby.h" - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -struct rb_blocking_region_buffer; -DEPRECATED(RUBY_EXTERN struct rb_blocking_region_buffer *rb_thread_blocking_region_begin(void)); -DEPRECATED(RUBY_EXTERN void rb_thread_blocking_region_end(struct rb_blocking_region_buffer *)); -#define TRAP_BEG do {struct rb_blocking_region_buffer *__region = rb_thread_blocking_region_begin(); -#define TRAP_END rb_thread_blocking_region_end(__region);} while (0) -#define RUBY_CRITICAL(statements) do {statements;} while (0) -#define DEFER_INTS (0) -#define ENABLE_INTS (1) -#define ALLOW_INTS do {CHECK_INTS;} while (0) -#define CHECK_INTS rb_thread_check_ints() - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif diff --git a/vendor/ruby/backward/st.h b/vendor/ruby/backward/st.h deleted file mode 100644 index 514128e..0000000 --- a/vendor/ruby/backward/st.h +++ /dev/null @@ -1,6 +0,0 @@ -#if defined __GNUC__ -#warning use "ruby/st.h" instead of bare "st.h" -#elif defined _MSC_VER || defined __BORLANDC__ -#pragma message("warning: use \"ruby/st.h\" instead of bare \"st.h\"") -#endif -#include "ruby/st.h" diff --git a/vendor/ruby/backward/util.h b/vendor/ruby/backward/util.h deleted file mode 100644 index 6b47940..0000000 --- a/vendor/ruby/backward/util.h +++ /dev/null @@ -1,6 +0,0 @@ -#if defined __GNUC__ -#warning use "ruby/util.h" instead of bare "util.h" -#elif defined _MSC_VER || defined __BORLANDC__ -#pragma message("warning: use \"ruby/util.h\" instead of bare \"util.h\"") -#endif -#include "ruby/util.h" diff --git a/vendor/ruby/debug.h b/vendor/ruby/debug.h deleted file mode 100644 index 9bfc9b9..0000000 --- a/vendor/ruby/debug.h +++ /dev/null @@ -1,110 +0,0 @@ -/********************************************************************** - - ruby/debug.h - - - $Author: ko1 $ - created at: Tue Nov 20 20:35:08 2012 - - Copyright (C) 2012 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RB_DEBUG_H -#define RB_DEBUG_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -/* Note: This file contains experimental APIs. */ -/* APIs can be replaced at Ruby 2.0.1 or later */ - - -/* profile frames APIs */ -int rb_profile_frames(int start, int limit, VALUE *buff, int *lines); -VALUE rb_profile_frame_path(VALUE frame); -VALUE rb_profile_frame_absolute_path(VALUE frame); -VALUE rb_profile_frame_label(VALUE frame); -VALUE rb_profile_frame_base_label(VALUE frame); -VALUE rb_profile_frame_full_label(VALUE frame); -VALUE rb_profile_frame_first_lineno(VALUE frame); -VALUE rb_profile_frame_classpath(VALUE frame); -VALUE rb_profile_frame_singleton_method_p(VALUE frame); -VALUE rb_profile_frame_method_name(VALUE frame); -VALUE rb_profile_frame_qualified_method_name(VALUE frame); - -/* debug inspector APIs */ -typedef struct rb_debug_inspector_struct rb_debug_inspector_t; -typedef VALUE (*rb_debug_inspector_func_t)(const rb_debug_inspector_t *, void *); - -VALUE rb_debug_inspector_open(rb_debug_inspector_func_t func, void *data); -VALUE rb_debug_inspector_frame_self_get(const rb_debug_inspector_t *dc, long index); -VALUE rb_debug_inspector_frame_class_get(const rb_debug_inspector_t *dc, long index); -VALUE rb_debug_inspector_frame_binding_get(const rb_debug_inspector_t *dc, long index); -VALUE rb_debug_inspector_frame_iseq_get(const rb_debug_inspector_t *dc, long index); -VALUE rb_debug_inspector_backtrace_locations(const rb_debug_inspector_t *dc); - -/* Old style set_trace_func APIs */ - -/* duplicated def of include/ruby/ruby.h */ -void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); -int rb_remove_event_hook(rb_event_hook_func_t func); - -int rb_remove_event_hook_with_data(rb_event_hook_func_t func, VALUE data); -void rb_thread_add_event_hook(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); -int rb_thread_remove_event_hook(VALUE thval, rb_event_hook_func_t func); -int rb_thread_remove_event_hook_with_data(VALUE thval, rb_event_hook_func_t func, VALUE data); - -/* TracePoint APIs */ - -VALUE rb_tracepoint_new(VALUE target_thread_not_supported_yet, rb_event_flag_t events, void (*func)(VALUE, void *), void *data); -VALUE rb_tracepoint_enable(VALUE tpval); -VALUE rb_tracepoint_disable(VALUE tpval); -VALUE rb_tracepoint_enabled_p(VALUE tpval); - -typedef struct rb_trace_arg_struct rb_trace_arg_t; -rb_trace_arg_t *rb_tracearg_from_tracepoint(VALUE tpval); - -rb_event_flag_t rb_tracearg_event_flag(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_event(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_lineno(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_path(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_method_id(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_defined_class(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_binding(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_self(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_return_value(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_raised_exception(rb_trace_arg_t *trace_arg); -VALUE rb_tracearg_object(rb_trace_arg_t *trace_arg); - -/* Postponed Job API */ -typedef void (*rb_postponed_job_func_t)(void *arg); -int rb_postponed_job_register(unsigned int flags, rb_postponed_job_func_t func, void *data); -int rb_postponed_job_register_one(unsigned int flags, rb_postponed_job_func_t func, void *data); - -/* undocumented advanced tracing APIs */ - -typedef enum { - RUBY_EVENT_HOOK_FLAG_SAFE = 0x01, - RUBY_EVENT_HOOK_FLAG_DELETED = 0x02, - RUBY_EVENT_HOOK_FLAG_RAW_ARG = 0x04 -} rb_event_hook_flag_t; - -void rb_add_event_hook2(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); -void rb_thread_add_event_hook2(VALUE thval, rb_event_hook_func_t func, rb_event_flag_t events, VALUE data, rb_event_hook_flag_t hook_flag); - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_DEBUG_H */ diff --git a/vendor/ruby/defines.h b/vendor/ruby/defines.h deleted file mode 100644 index 0e6b23c..0000000 --- a/vendor/ruby/defines.h +++ /dev/null @@ -1,324 +0,0 @@ -/************************************************ - - defines.h - - - $Author: akr $ - created at: Wed May 18 00:21:44 JST 1994 - -************************************************/ - -#ifndef RUBY_DEFINES_H -#define RUBY_DEFINES_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/config.h" -#ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H -#endif - -/* AC_INCLUDES_DEFAULT */ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif - -#ifdef HAVE_SYS_SELECT_H -# include -#endif - -#if defined HAVE_SETJMPEX_H && defined HAVE__SETJMPEX -#include -#endif - -#include "ruby/missing.h" - -#define RUBY - -#ifdef __cplusplus -# ifndef HAVE_PROTOTYPES -# define HAVE_PROTOTYPES 1 -# endif -# ifndef HAVE_STDARG_PROTOTYPES -# define HAVE_STDARG_PROTOTYPES 1 -# endif -#endif - -#undef _ -#ifdef HAVE_PROTOTYPES -# define _(args) args -#else -# define _(args) () -#endif - -#undef __ -#ifdef HAVE_STDARG_PROTOTYPES -# define __(args) args -#else -# define __(args) () -#endif - -#ifdef __cplusplus -#define ANYARGS ... -#else -#define ANYARGS -#endif - -#ifndef RUBY_SYMBOL_EXPORT_BEGIN -# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */ -# define RUBY_SYMBOL_EXPORT_END /* end */ -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#define xmalloc ruby_xmalloc -#define xmalloc2 ruby_xmalloc2 -#define xcalloc ruby_xcalloc -#define xrealloc ruby_xrealloc -#define xrealloc2 ruby_xrealloc2 -#define xfree ruby_xfree - -#if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 3 -# define RUBY_ATTR_ALLOC_SIZE(params) __attribute__ ((__alloc_size__ params)) -#else -# define RUBY_ATTR_ALLOC_SIZE(params) -#endif - -void *xmalloc(size_t) RUBY_ATTR_ALLOC_SIZE((1)); -void *xmalloc2(size_t,size_t) RUBY_ATTR_ALLOC_SIZE((1,2)); -void *xcalloc(size_t,size_t) RUBY_ATTR_ALLOC_SIZE((1,2)); -void *xrealloc(void*,size_t) RUBY_ATTR_ALLOC_SIZE((2)); -void *xrealloc2(void*,size_t,size_t) RUBY_ATTR_ALLOC_SIZE((2,3)); -void xfree(void*); - -#define STRINGIZE(expr) STRINGIZE0(expr) -#ifndef STRINGIZE0 -#define STRINGIZE0(expr) #expr -#endif - -#ifdef HAVE_LONG_LONG -# define HAVE_TRUE_LONG_LONG 1 -#endif - -#if SIZEOF_LONG_LONG > 0 -# define LONG_LONG long long -#elif SIZEOF___INT64 > 0 -# define HAVE_LONG_LONG 1 -# define LONG_LONG __int64 -# undef SIZEOF_LONG_LONG -# define SIZEOF_LONG_LONG SIZEOF___INT64 -#endif - -#ifndef BDIGIT -# if SIZEOF_INT*2 <= SIZEOF_LONG_LONG -# define BDIGIT unsigned int -# define SIZEOF_BDIGITS SIZEOF_INT -# define BDIGIT_DBL unsigned LONG_LONG -# define BDIGIT_DBL_SIGNED LONG_LONG -# define PRI_BDIGIT_PREFIX "" -# define PRI_BDIGIT_DBL_PREFIX PRI_LL_PREFIX -# elif SIZEOF_INT*2 <= SIZEOF_LONG -# define BDIGIT unsigned int -# define SIZEOF_BDIGITS SIZEOF_INT -# define BDIGIT_DBL unsigned long -# define BDIGIT_DBL_SIGNED long -# define PRI_BDIGIT_PREFIX "" -# define PRI_BDIGIT_DBL_PREFIX "l" -# elif SIZEOF_SHORT*2 <= SIZEOF_LONG -# define BDIGIT unsigned short -# define SIZEOF_BDIGITS SIZEOF_SHORT -# define BDIGIT_DBL unsigned long -# define BDIGIT_DBL_SIGNED long -# define PRI_BDIGIT_PREFIX "h" -# define PRI_BDIGIT_DBL_PREFIX "l" -# else -# define BDIGIT unsigned short -# define SIZEOF_BDIGITS (SIZEOF_LONG/2) -# define SIZEOF_ACTUAL_BDIGIT SIZEOF_LONG -# define BDIGIT_DBL unsigned long -# define BDIGIT_DBL_SIGNED long -# define PRI_BDIGIT_PREFIX "h" -# define PRI_BDIGIT_DBL_PREFIX "l" -# endif -#endif -#ifndef SIZEOF_ACTUAL_BDIGIT -# define SIZEOF_ACTUAL_BDIGIT SIZEOF_BDIGITS -#endif - -#ifdef PRI_BDIGIT_PREFIX -# define PRIdBDIGIT PRI_BDIGIT_PREFIX"d" -# define PRIiBDIGIT PRI_BDIGIT_PREFIX"i" -# define PRIoBDIGIT PRI_BDIGIT_PREFIX"o" -# define PRIuBDIGIT PRI_BDIGIT_PREFIX"u" -# define PRIxBDIGIT PRI_BDIGIT_PREFIX"x" -# define PRIXBDIGIT PRI_BDIGIT_PREFIX"X" -#endif - -#ifdef PRI_BDIGIT_DBL_PREFIX -# define PRIdBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"d" -# define PRIiBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"i" -# define PRIoBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"o" -# define PRIuBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"u" -# define PRIxBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"x" -# define PRIXBDIGIT_DBL PRI_BDIGIT_DBL_PREFIX"X" -#endif - -#ifdef __CYGWIN__ -#undef _WIN32 -#endif - -#if defined(_WIN32) || defined(__EMX__) -#define DOSISH 1 -# define DOSISH_DRIVE_LETTER -#endif - -#ifdef AC_APPLE_UNIVERSAL_BUILD -#undef WORDS_BIGENDIAN -#ifdef __BIG_ENDIAN__ -#define WORDS_BIGENDIAN -#endif -#endif - -#ifdef _WIN32 -#include "ruby/win32.h" -#endif - -#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE) -#include /* intern.h needs fd_set definition */ -#endif - -#ifdef __SYMBIAN32__ -# define FALSE 0 -# define TRUE 1 -#endif - -#ifdef RUBY_EXPORT -#undef RUBY_EXTERN - -#ifndef FALSE -# define FALSE 0 -#elif FALSE -# error FALSE must be false -#endif -#ifndef TRUE -# define TRUE 1 -#elif !TRUE -# error TRUE must be true -#endif - -#endif - -#ifndef RUBY_FUNC_EXPORTED -#define RUBY_FUNC_EXPORTED -#endif - -#ifndef RUBY_EXTERN -#define RUBY_EXTERN extern -#endif - -#ifndef EXTERN -#define EXTERN RUBY_EXTERN /* deprecated */ -#endif - -#ifndef RUBY_MBCHAR_MAXSIZE -#define RUBY_MBCHAR_MAXSIZE INT_MAX - /* MB_CUR_MAX will not work well in C locale */ -#endif - -#if defined(__sparc) -void rb_sparc_flush_register_windows(void); -# define FLUSH_REGISTER_WINDOWS rb_sparc_flush_register_windows() -#elif defined(__ia64) -void *rb_ia64_bsp(void); -void rb_ia64_flushrs(void); -# define FLUSH_REGISTER_WINDOWS rb_ia64_flushrs() -#else -# define FLUSH_REGISTER_WINDOWS ((void)0) -#endif - -#if defined(DOSISH) -#define PATH_SEP ";" -#else -#define PATH_SEP ":" -#endif -#define PATH_SEP_CHAR PATH_SEP[0] - -#define PATH_ENV "PATH" - -#if defined(DOSISH) && !defined(__EMX__) -#define ENV_IGNORECASE -#endif - -#ifndef CASEFOLD_FILESYSTEM -# if defined DOSISH -# define CASEFOLD_FILESYSTEM 1 -# else -# define CASEFOLD_FILESYSTEM 0 -# endif -#endif - -#ifndef DLEXT_MAXLEN -#define DLEXT_MAXLEN 4 -#endif - -#ifndef RUBY_PLATFORM -#define RUBY_PLATFORM "unknown-unknown" -#endif - -#ifndef RUBY_ALIAS_FUNCTION_TYPE -#define RUBY_ALIAS_FUNCTION_TYPE(type, prot, name, args) \ - type prot {return name args;} -#endif -#ifndef RUBY_ALIAS_FUNCTION_VOID -#define RUBY_ALIAS_FUNCTION_VOID(prot, name, args) \ - void prot {name args;} -#endif -#ifndef RUBY_ALIAS_FUNCTION -#define RUBY_ALIAS_FUNCTION(prot, name, args) \ - RUBY_ALIAS_FUNCTION_TYPE(VALUE, prot, name, args) -#endif - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_DEFINES_H */ diff --git a/vendor/ruby/digest.h b/vendor/ruby/digest.h deleted file mode 100644 index 89b26d8..0000000 --- a/vendor/ruby/digest.h +++ /dev/null @@ -1,32 +0,0 @@ -/************************************************ - - digest.h - header file for ruby digest modules - - $Author: akr $ - created at: Fri May 25 08:54:56 JST 2001 - - - Copyright (C) 2001-2006 Akinori MUSHA - - $RoughId: digest.h,v 1.3 2001/07/13 15:38:27 knu Exp $ - $Id: digest.h 25189 2009-10-02 12:04:37Z akr $ - -************************************************/ - -#include "ruby.h" - -#define RUBY_DIGEST_API_VERSION 2 - -typedef void (*rb_digest_hash_init_func_t)(void *); -typedef void (*rb_digest_hash_update_func_t)(void *, unsigned char *, size_t); -typedef void (*rb_digest_hash_finish_func_t)(void *, unsigned char *); - -typedef struct { - int api_version; - size_t digest_len; - size_t block_len; - size_t ctx_size; - rb_digest_hash_init_func_t init_func; - rb_digest_hash_update_func_t update_func; - rb_digest_hash_finish_func_t finish_func; -} rb_digest_metadata_t; diff --git a/vendor/ruby/encoding.h b/vendor/ruby/encoding.h deleted file mode 100644 index 1c5d8da..0000000 --- a/vendor/ruby/encoding.h +++ /dev/null @@ -1,363 +0,0 @@ -/********************************************************************** - - encoding.h - - - $Author: matz $ - created at: Thu May 24 11:49:41 JST 2007 - - Copyright (C) 2007 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_ENCODING_H -#define RUBY_ENCODING_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include -#include "ruby/oniguruma.h" - -RUBY_SYMBOL_EXPORT_BEGIN - -#define ENCODING_INLINE_MAX 127 -#define ENCODING_SHIFT (FL_USHIFT+10) -#define ENCODING_MASK (((VALUE)ENCODING_INLINE_MAX)<flags &= ~ENCODING_MASK;\ - RBASIC(obj)->flags |= (VALUE)(i) << ENCODING_SHIFT;\ -} while (0) -#define ENCODING_SET(obj,i) rb_enc_set_index((obj), (i)) - -#define ENCODING_GET_INLINED(obj) (int)((RBASIC(obj)->flags & ENCODING_MASK)>>ENCODING_SHIFT) -#define ENCODING_GET(obj) \ - (ENCODING_GET_INLINED(obj) != ENCODING_INLINE_MAX ? \ - ENCODING_GET_INLINED(obj) : \ - rb_enc_get_index(obj)) - -#define ENCODING_IS_ASCII8BIT(obj) (ENCODING_GET_INLINED(obj) == 0) - -#define ENCODING_MAXNAMELEN 42 - -#define ENC_CODERANGE_MASK ((int)(FL_USER8|FL_USER9)) -#define ENC_CODERANGE_UNKNOWN 0 -#define ENC_CODERANGE_7BIT ((int)FL_USER8) -#define ENC_CODERANGE_VALID ((int)FL_USER9) -#define ENC_CODERANGE_BROKEN ((int)(FL_USER8|FL_USER9)) -#define ENC_CODERANGE(obj) ((int)RBASIC(obj)->flags & ENC_CODERANGE_MASK) -#define ENC_CODERANGE_ASCIIONLY(obj) (ENC_CODERANGE(obj) == ENC_CODERANGE_7BIT) -#define ENC_CODERANGE_SET(obj,cr) (RBASIC(obj)->flags = \ - (RBASIC(obj)->flags & ~ENC_CODERANGE_MASK) | (cr)) -#define ENC_CODERANGE_CLEAR(obj) ENC_CODERANGE_SET((obj),0) - -/* assumed ASCII compatibility */ -#define ENC_CODERANGE_AND(a, b) \ - ((a) == ENC_CODERANGE_7BIT ? (b) : \ - (a) == ENC_CODERANGE_VALID ? ((b) == ENC_CODERANGE_7BIT ? ENC_CODERANGE_VALID : (b)) : \ - ENC_CODERANGE_UNKNOWN) - -#define ENCODING_CODERANGE_SET(obj, encindex, cr) \ - do { \ - VALUE rb_encoding_coderange_obj = (obj); \ - ENCODING_SET(rb_encoding_coderange_obj, (encindex)); \ - ENC_CODERANGE_SET(rb_encoding_coderange_obj, (cr)); \ - } while (0) - -typedef OnigEncodingType rb_encoding; - -int rb_char_to_option_kcode(int c, int *option, int *kcode); - -int rb_enc_replicate(const char *, rb_encoding *); -int rb_define_dummy_encoding(const char *); -#define rb_enc_to_index(enc) ((enc) ? ENC_TO_ENCINDEX(enc) : 0) -int rb_enc_get_index(VALUE obj); -void rb_enc_set_index(VALUE obj, int encindex); -int rb_enc_find_index(const char *name); -int rb_to_encoding_index(VALUE); -rb_encoding* rb_to_encoding(VALUE); -rb_encoding* rb_find_encoding(VALUE); -rb_encoding* rb_enc_get(VALUE); -rb_encoding* rb_enc_compatible(VALUE,VALUE); -rb_encoding* rb_enc_check(VALUE,VALUE); -VALUE rb_enc_associate_index(VALUE, int); -VALUE rb_enc_associate(VALUE, rb_encoding*); -void rb_enc_copy(VALUE dst, VALUE src); - -VALUE rb_enc_str_new(const char*, long, rb_encoding*); -VALUE rb_enc_str_new_cstr(const char*, rb_encoding*); -VALUE rb_enc_reg_new(const char*, long, rb_encoding*, int); -PRINTF_ARGS(VALUE rb_enc_sprintf(rb_encoding *, const char*, ...), 2, 3); -VALUE rb_enc_vsprintf(rb_encoding *, const char*, va_list); -long rb_enc_strlen(const char*, const char*, rb_encoding*); -char* rb_enc_nth(const char*, const char*, long, rb_encoding*); -VALUE rb_obj_encoding(VALUE); -VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc); -VALUE rb_enc_uint_chr(unsigned int code, rb_encoding *enc); - -VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *); -VALUE rb_str_export_to_enc(VALUE, rb_encoding *); -VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to); -VALUE rb_str_conv_enc_opts(VALUE str, rb_encoding *from, rb_encoding *to, int ecflags, VALUE ecopts); - -#if defined(__GNUC__) && !defined(__PCC__) -#define rb_enc_str_new_cstr(str, enc) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_enc_str_new((str), (long)strlen(str), (enc)) : \ - rb_enc_str_new_cstr((str), (enc)); \ -}) -#endif - -PRINTF_ARGS(NORETURN(void rb_enc_raise(rb_encoding *, VALUE, const char*, ...)), 3, 4); - -/* index -> rb_encoding */ -rb_encoding* rb_enc_from_index(int idx); - -/* name -> rb_encoding */ -rb_encoding * rb_enc_find(const char *name); - -/* rb_encoding * -> name */ -#define rb_enc_name(enc) (enc)->name - -/* rb_encoding * -> minlen/maxlen */ -#define rb_enc_mbminlen(enc) (enc)->min_enc_len -#define rb_enc_mbmaxlen(enc) (enc)->max_enc_len - -/* -> mbclen (no error notification: 0 < ret <= e-p, no exception) */ -int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc); - -/* -> mbclen (only for valid encoding) */ -int rb_enc_fast_mbclen(const char *p, const char *e, rb_encoding *enc); - -/* -> chlen, invalid or needmore */ -int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc); -#define MBCLEN_CHARFOUND_P(ret) ONIGENC_MBCLEN_CHARFOUND_P(ret) -#define MBCLEN_CHARFOUND_LEN(ret) ONIGENC_MBCLEN_CHARFOUND_LEN(ret) -#define MBCLEN_INVALID_P(ret) ONIGENC_MBCLEN_INVALID_P(ret) -#define MBCLEN_NEEDMORE_P(ret) ONIGENC_MBCLEN_NEEDMORE_P(ret) -#define MBCLEN_NEEDMORE_LEN(ret) ONIGENC_MBCLEN_NEEDMORE_LEN(ret) - -/* -> 0x00..0x7f, -1 */ -int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc); - - -/* -> code (and len) or raise exception */ -unsigned int rb_enc_codepoint_len(const char *p, const char *e, int *len, rb_encoding *enc); - -/* prototype for obsolete function */ -unsigned int rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc); -/* overriding macro */ -#define rb_enc_codepoint(p,e,enc) rb_enc_codepoint_len((p),(e),0,(enc)) -#define rb_enc_mbc_to_codepoint(p, e, enc) ONIGENC_MBC_TO_CODE((enc),(UChar*)(p),(UChar*)(e)) - -/* -> codelen>0 or raise exception */ -int rb_enc_codelen(int code, rb_encoding *enc); -/* -> 0 for invalid codepoint */ -int rb_enc_code_to_mbclen(int code, rb_encoding *enc); -#define rb_enc_code_to_mbclen(c, enc) ONIGENC_CODE_TO_MBCLEN((enc), (c)); - -/* code,ptr,encoding -> write buf */ -#define rb_enc_mbcput(c,buf,enc) ONIGENC_CODE_TO_MBC((enc),(c),(UChar*)(buf)) - -/* start, ptr, end, encoding -> prev_char */ -#define rb_enc_prev_char(s,p,e,enc) ((char *)onigenc_get_prev_char_head((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e))) -/* start, ptr, end, encoding -> next_char */ -#define rb_enc_left_char_head(s,p,e,enc) ((char *)onigenc_get_left_adjust_char_head((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e))) -#define rb_enc_right_char_head(s,p,e,enc) ((char *)onigenc_get_right_adjust_char_head((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e))) -#define rb_enc_step_back(s,p,e,n,enc) ((char *)onigenc_step_back((enc),(UChar*)(s),(UChar*)(p),(UChar*)(e),(int)(n))) - -/* ptr, ptr, encoding -> newline_or_not */ -#define rb_enc_is_newline(p,end,enc) ONIGENC_IS_MBC_NEWLINE((enc),(UChar*)(p),(UChar*)(end)) - -#define rb_enc_isctype(c,t,enc) ONIGENC_IS_CODE_CTYPE((enc),(c),(t)) -#define rb_enc_isascii(c,enc) ONIGENC_IS_CODE_ASCII(c) -#define rb_enc_isalpha(c,enc) ONIGENC_IS_CODE_ALPHA((enc),(c)) -#define rb_enc_islower(c,enc) ONIGENC_IS_CODE_LOWER((enc),(c)) -#define rb_enc_isupper(c,enc) ONIGENC_IS_CODE_UPPER((enc),(c)) -#define rb_enc_ispunct(c,enc) ONIGENC_IS_CODE_PUNCT((enc),(c)) -#define rb_enc_isalnum(c,enc) ONIGENC_IS_CODE_ALNUM((enc),(c)) -#define rb_enc_isprint(c,enc) ONIGENC_IS_CODE_PRINT((enc),(c)) -#define rb_enc_isspace(c,enc) ONIGENC_IS_CODE_SPACE((enc),(c)) -#define rb_enc_isdigit(c,enc) ONIGENC_IS_CODE_DIGIT((enc),(c)) - -#define rb_enc_asciicompat(enc) (rb_enc_mbminlen(enc)==1 && !rb_enc_dummy_p(enc)) - -int rb_enc_casefold(char *to, const char *p, const char *e, rb_encoding *enc); -int rb_enc_toupper(int c, rb_encoding *enc); -int rb_enc_tolower(int c, rb_encoding *enc); -ID rb_intern3(const char*, long, rb_encoding*); -ID rb_interned_id_p(const char *, long, rb_encoding *); -int rb_enc_symname_p(const char*, rb_encoding*); -int rb_enc_symname2_p(const char*, long, rb_encoding*); -int rb_enc_str_coderange(VALUE); -long rb_str_coderange_scan_restartable(const char*, const char*, rb_encoding*, int*); -int rb_enc_str_asciionly_p(VALUE); -#define rb_enc_str_asciicompat_p(str) rb_enc_asciicompat(rb_enc_get(str)) -VALUE rb_enc_from_encoding(rb_encoding *enc); -int rb_enc_unicode_p(rb_encoding *enc); -rb_encoding *rb_ascii8bit_encoding(void); -rb_encoding *rb_utf8_encoding(void); -rb_encoding *rb_usascii_encoding(void); -rb_encoding *rb_locale_encoding(void); -rb_encoding *rb_filesystem_encoding(void); -rb_encoding *rb_default_external_encoding(void); -rb_encoding *rb_default_internal_encoding(void); -#ifndef rb_ascii8bit_encindex -int rb_ascii8bit_encindex(void); -#endif -#ifndef rb_utf8_encindex -int rb_utf8_encindex(void); -#endif -#ifndef rb_usascii_encindex -int rb_usascii_encindex(void); -#endif -int rb_locale_encindex(void); -int rb_filesystem_encindex(void); -VALUE rb_enc_default_external(void); -VALUE rb_enc_default_internal(void); -void rb_enc_set_default_external(VALUE encoding); -void rb_enc_set_default_internal(VALUE encoding); -VALUE rb_locale_charmap(VALUE klass); -long rb_memsearch(const void*,long,const void*,long,rb_encoding*); -char *rb_enc_path_next(const char *,const char *,rb_encoding*); -char *rb_enc_path_skip_prefix(const char *,const char *,rb_encoding*); -char *rb_enc_path_last_separator(const char *,const char *,rb_encoding*); -char *rb_enc_path_end(const char *,const char *,rb_encoding*); -const char *ruby_enc_find_basename(const char *name, long *baselen, long *alllen, rb_encoding *enc); -const char *ruby_enc_find_extname(const char *name, long *len, rb_encoding *enc); -ID rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc); - -RUBY_EXTERN VALUE rb_cEncoding; -#define ENC_DUMMY_FLAG (1<<24) -#define ENC_INDEX_MASK (~(~0U<<24)) - -#define ENC_TO_ENCINDEX(enc) (int)((enc)->ruby_encoding_index & ENC_INDEX_MASK) - -#define ENC_DUMMY_P(enc) ((enc)->ruby_encoding_index & ENC_DUMMY_FLAG) -#define ENC_SET_DUMMY(enc) ((enc)->ruby_encoding_index |= ENC_DUMMY_FLAG) - -static inline int -rb_enc_dummy_p(rb_encoding *enc) -{ - return ENC_DUMMY_P(enc) != 0; -} - -/* econv stuff */ - -typedef enum { - econv_invalid_byte_sequence, - econv_undefined_conversion, - econv_destination_buffer_full, - econv_source_buffer_empty, - econv_finished, - econv_after_output, - econv_incomplete_input -} rb_econv_result_t; - -typedef struct rb_econv_t rb_econv_t; - -VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts); -int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding); - -int rb_econv_prepare_options(VALUE opthash, VALUE *ecopts, int ecflags); -int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts); - -rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags); -rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts); - -rb_econv_result_t rb_econv_convert(rb_econv_t *ec, - const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end, - unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end, - int flags); -void rb_econv_close(rb_econv_t *ec); - -/* result: 0:success -1:failure */ -int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname); - -/* result: 0:success -1:failure */ -int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name); -int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name); - -VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags); - -/* result: 0:success -1:failure */ -int rb_econv_insert_output(rb_econv_t *ec, - const unsigned char *str, size_t len, const char *str_encoding); - -/* encoding that rb_econv_insert_output doesn't need conversion */ -const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec); - -/* raise an error if the last rb_econv_convert is error */ -void rb_econv_check_error(rb_econv_t *ec); - -/* returns an exception object or nil */ -VALUE rb_econv_make_exception(rb_econv_t *ec); - -int rb_econv_putbackable(rb_econv_t *ec); -void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n); - -/* returns the corresponding ASCII compatible encoding for encname, - * or NULL if encname is not ASCII incompatible encoding. */ -const char *rb_econv_asciicompat_encoding(const char *encname); - -VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags); -VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags); -VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags); -VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags); -VALUE rb_econv_append(rb_econv_t *ec, const char *bytesrc, long bytesize, VALUE dst, int flags); - -void rb_econv_binmode(rb_econv_t *ec); - -/* flags for rb_econv_open */ - -#define ECONV_ERROR_HANDLER_MASK 0x000000ff - -#define ECONV_INVALID_MASK 0x0000000f -#define ECONV_INVALID_REPLACE 0x00000002 - -#define ECONV_UNDEF_MASK 0x000000f0 -#define ECONV_UNDEF_REPLACE 0x00000020 -#define ECONV_UNDEF_HEX_CHARREF 0x00000030 - -#define ECONV_DECORATOR_MASK 0x0000ff00 -#define ECONV_NEWLINE_DECORATOR_MASK 0x00003f00 -#define ECONV_NEWLINE_DECORATOR_READ_MASK 0x00000f00 -#define ECONV_NEWLINE_DECORATOR_WRITE_MASK 0x00003000 - -#define ECONV_UNIVERSAL_NEWLINE_DECORATOR 0x00000100 -#define ECONV_CRLF_NEWLINE_DECORATOR 0x00001000 -#define ECONV_CR_NEWLINE_DECORATOR 0x00002000 -#define ECONV_XML_TEXT_DECORATOR 0x00004000 -#define ECONV_XML_ATTR_CONTENT_DECORATOR 0x00008000 - -#define ECONV_STATEFUL_DECORATOR_MASK 0x00f00000 -#define ECONV_XML_ATTR_QUOTE_DECORATOR 0x00100000 - -#if defined(RUBY_TEST_CRLF_ENVIRONMENT) || defined(_WIN32) -#define ECONV_DEFAULT_NEWLINE_DECORATOR ECONV_CRLF_NEWLINE_DECORATOR -#else -#define ECONV_DEFAULT_NEWLINE_DECORATOR 0 -#endif - -/* end of flags for rb_econv_open */ - -/* flags for rb_econv_convert */ -#define ECONV_PARTIAL_INPUT 0x00010000 -#define ECONV_AFTER_OUTPUT 0x00020000 -/* end of flags for rb_econv_convert */ - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_ENCODING_H */ diff --git a/vendor/ruby/intern.h b/vendor/ruby/intern.h deleted file mode 100644 index 8827593..0000000 --- a/vendor/ruby/intern.h +++ /dev/null @@ -1,956 +0,0 @@ -/********************************************************************** - - intern.h - - - $Author: nobu $ - created at: Thu Jun 10 14:22:17 JST 1993 - - Copyright (C) 1993-2007 Yukihiro Matsumoto - Copyright (C) 2000 Network Applied Communication Laboratory, Inc. - Copyright (C) 2000 Information-technology Promotion Agency, Japan - -**********************************************************************/ - -#ifndef RUBY_INTERN_H -#define RUBY_INTERN_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/defines.h" -#ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H -#endif - -#ifdef HAVE_STDARG_PROTOTYPES -# include -#else -# include -#endif - -#include "ruby/st.h" - -RUBY_SYMBOL_EXPORT_BEGIN - -/* - * Functions and variables that are used by more than one source file of - * the kernel. - */ - -#define UNLIMITED_ARGUMENTS (-1) - -/* array.c */ -void rb_mem_clear(register VALUE*, register long); -VALUE rb_assoc_new(VALUE, VALUE); -VALUE rb_check_array_type(VALUE); -VALUE rb_ary_new(void); -VALUE rb_ary_new_capa(long capa); -VALUE rb_ary_new_from_args(long n, ...); -VALUE rb_ary_new_from_values(long n, const VALUE *elts); -VALUE rb_ary_tmp_new(long); -void rb_ary_free(VALUE); -void rb_ary_modify(VALUE); -VALUE rb_ary_freeze(VALUE); -VALUE rb_ary_shared_with_p(VALUE, VALUE); -VALUE rb_ary_aref(int, VALUE*, VALUE); -VALUE rb_ary_subseq(VALUE, long, long); -void rb_ary_store(VALUE, long, VALUE); -VALUE rb_ary_dup(VALUE); -VALUE rb_ary_resurrect(VALUE ary); -VALUE rb_ary_to_ary(VALUE); -VALUE rb_ary_to_s(VALUE); -VALUE rb_ary_cat(VALUE, const VALUE *, long); -VALUE rb_ary_push(VALUE, VALUE); -VALUE rb_ary_pop(VALUE); -VALUE rb_ary_shift(VALUE); -VALUE rb_ary_unshift(VALUE, VALUE); -VALUE rb_ary_entry(VALUE, long); -VALUE rb_ary_each(VALUE); -VALUE rb_ary_join(VALUE, VALUE); -VALUE rb_ary_reverse(VALUE); -VALUE rb_ary_rotate(VALUE, long); -VALUE rb_ary_sort(VALUE); -VALUE rb_ary_sort_bang(VALUE); -VALUE rb_ary_delete(VALUE, VALUE); -VALUE rb_ary_delete_at(VALUE, long); -VALUE rb_ary_clear(VALUE); -VALUE rb_ary_plus(VALUE, VALUE); -VALUE rb_ary_concat(VALUE, VALUE); -VALUE rb_ary_assoc(VALUE, VALUE); -VALUE rb_ary_rassoc(VALUE, VALUE); -VALUE rb_ary_includes(VALUE, VALUE); -VALUE rb_ary_cmp(VALUE, VALUE); -VALUE rb_ary_replace(VALUE copy, VALUE orig); -VALUE rb_get_values_at(VALUE, long, int, VALUE*, VALUE(*)(VALUE,long)); -VALUE rb_ary_resize(VALUE ary, long len); -#define rb_ary_new2 rb_ary_new_capa -#define rb_ary_new3 rb_ary_new_from_args -#define rb_ary_new4 rb_ary_new_from_values -/* bignum.c */ -VALUE rb_big_new(long, int); -int rb_bigzero_p(VALUE x); -VALUE rb_big_clone(VALUE); -void rb_big_2comp(VALUE); -VALUE rb_big_norm(VALUE); -void rb_big_resize(VALUE big, long len); -VALUE rb_cstr_to_inum(const char*, int, int); -VALUE rb_str_to_inum(VALUE, int, int); -VALUE rb_cstr2inum(const char*, int); -VALUE rb_str2inum(VALUE, int); -VALUE rb_big2str(VALUE, int); -DEPRECATED(VALUE rb_big2str0(VALUE, int, int)); -SIGNED_VALUE rb_big2long(VALUE); -#define rb_big2int(x) rb_big2long(x) -VALUE rb_big2ulong(VALUE); -#define rb_big2uint(x) rb_big2ulong(x) -DEPRECATED(VALUE rb_big2ulong_pack(VALUE x)); -#if HAVE_LONG_LONG -LONG_LONG rb_big2ll(VALUE); -unsigned LONG_LONG rb_big2ull(VALUE); -#endif /* HAVE_LONG_LONG */ -DEPRECATED(void rb_quad_pack(char*,VALUE)); -DEPRECATED(VALUE rb_quad_unpack(const char*,int)); -void rb_big_pack(VALUE val, unsigned long *buf, long num_longs); -VALUE rb_big_unpack(unsigned long *buf, long num_longs); -int rb_uv_to_utf8(char[6],unsigned long); -VALUE rb_dbl2big(double); -double rb_big2dbl(VALUE); -VALUE rb_big_cmp(VALUE, VALUE); -VALUE rb_big_eq(VALUE, VALUE); -VALUE rb_big_eql(VALUE, VALUE); -VALUE rb_big_plus(VALUE, VALUE); -VALUE rb_big_minus(VALUE, VALUE); -VALUE rb_big_mul(VALUE, VALUE); -VALUE rb_big_div(VALUE, VALUE); -VALUE rb_big_idiv(VALUE, VALUE); -VALUE rb_big_modulo(VALUE, VALUE); -VALUE rb_big_divmod(VALUE, VALUE); -VALUE rb_big_pow(VALUE, VALUE); -VALUE rb_big_and(VALUE, VALUE); -VALUE rb_big_or(VALUE, VALUE); -VALUE rb_big_xor(VALUE, VALUE); -VALUE rb_big_lshift(VALUE, VALUE); -VALUE rb_big_rshift(VALUE, VALUE); - -/* For rb_integer_pack and rb_integer_unpack: */ -/* "MS" in MSWORD and MSBYTE means "most significant" */ -/* "LS" in LSWORD and LSBYTE means "least significant" */ -#define INTEGER_PACK_MSWORD_FIRST 0x01 -#define INTEGER_PACK_LSWORD_FIRST 0x02 -#define INTEGER_PACK_MSBYTE_FIRST 0x10 -#define INTEGER_PACK_LSBYTE_FIRST 0x20 -#define INTEGER_PACK_NATIVE_BYTE_ORDER 0x40 -#define INTEGER_PACK_2COMP 0x80 -#define INTEGER_PACK_FORCE_GENERIC_IMPLEMENTATION 0x400 -/* For rb_integer_unpack: */ -#define INTEGER_PACK_FORCE_BIGNUM 0x100 -#define INTEGER_PACK_NEGATIVE 0x200 -/* Combinations: */ -#define INTEGER_PACK_LITTLE_ENDIAN \ - (INTEGER_PACK_LSWORD_FIRST | \ - INTEGER_PACK_LSBYTE_FIRST) -#define INTEGER_PACK_BIG_ENDIAN \ - (INTEGER_PACK_MSWORD_FIRST | \ - INTEGER_PACK_MSBYTE_FIRST) -int rb_integer_pack(VALUE val, void *words, size_t numwords, size_t wordsize, size_t nails, int flags); -VALUE rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t nails, int flags); -size_t rb_absint_size(VALUE val, int *nlz_bits_ret); -size_t rb_absint_numwords(VALUE val, size_t word_numbits, size_t *nlz_bits_ret); -int rb_absint_singlebit_p(VALUE val); - -/* rational.c */ -VALUE rb_rational_raw(VALUE, VALUE); -#define rb_rational_raw1(x) rb_rational_raw((x), INT2FIX(1)) -#define rb_rational_raw2(x,y) rb_rational_raw((x), (y)) -VALUE rb_rational_new(VALUE, VALUE); -#define rb_rational_new1(x) rb_rational_new((x), INT2FIX(1)) -#define rb_rational_new2(x,y) rb_rational_new((x), (y)) -VALUE rb_Rational(VALUE, VALUE); -#define rb_Rational1(x) rb_Rational((x), INT2FIX(1)) -#define rb_Rational2(x,y) rb_Rational((x), (y)) -VALUE rb_flt_rationalize_with_prec(VALUE, VALUE); -VALUE rb_flt_rationalize(VALUE); -/* complex.c */ -VALUE rb_complex_raw(VALUE, VALUE); -#define rb_complex_raw1(x) rb_complex_raw((x), INT2FIX(0)) -#define rb_complex_raw2(x,y) rb_complex_raw((x), (y)) -VALUE rb_complex_new(VALUE, VALUE); -#define rb_complex_new1(x) rb_complex_new((x), INT2FIX(0)) -#define rb_complex_new2(x,y) rb_complex_new((x), (y)) -VALUE rb_complex_polar(VALUE, VALUE); -VALUE rb_Complex(VALUE, VALUE); -#define rb_Complex1(x) rb_Complex((x), INT2FIX(0)) -#define rb_Complex2(x,y) rb_Complex((x), (y)) -/* class.c */ -VALUE rb_class_boot(VALUE); -VALUE rb_class_new(VALUE); -VALUE rb_mod_init_copy(VALUE, VALUE); -VALUE rb_singleton_class_clone(VALUE); -void rb_singleton_class_attached(VALUE,VALUE); -VALUE rb_make_metaclass(VALUE, VALUE); -void rb_check_inheritable(VALUE); -VALUE rb_class_inherited(VALUE, VALUE); -VALUE rb_define_class_id(ID, VALUE); -VALUE rb_define_class_id_under(VALUE, ID, VALUE); -VALUE rb_module_new(void); -VALUE rb_define_module_id(ID); -VALUE rb_define_module_id_under(VALUE, ID); -VALUE rb_include_class_new(VALUE, VALUE); -VALUE rb_mod_included_modules(VALUE); -VALUE rb_mod_include_p(VALUE, VALUE); -VALUE rb_mod_ancestors(VALUE); -VALUE rb_class_instance_methods(int, VALUE*, VALUE); -VALUE rb_class_public_instance_methods(int, VALUE*, VALUE); -VALUE rb_class_protected_instance_methods(int, VALUE*, VALUE); -VALUE rb_class_private_instance_methods(int, VALUE*, VALUE); -VALUE rb_obj_singleton_methods(int, VALUE*, VALUE); -void rb_define_method_id(VALUE, ID, VALUE (*)(ANYARGS), int); -void rb_frozen_class_p(VALUE); -void rb_undef(VALUE, ID); -void rb_define_protected_method(VALUE, const char*, VALUE (*)(ANYARGS), int); -void rb_define_private_method(VALUE, const char*, VALUE (*)(ANYARGS), int); -void rb_define_singleton_method(VALUE, const char*, VALUE(*)(ANYARGS), int); -VALUE rb_singleton_class(VALUE); -/* compar.c */ -int rb_cmpint(VALUE, VALUE, VALUE); -NORETURN(void rb_cmperr(VALUE, VALUE)); -/* cont.c */ -VALUE rb_fiber_new(VALUE (*)(ANYARGS), VALUE); -VALUE rb_fiber_resume(VALUE fib, int argc, VALUE *args); -VALUE rb_fiber_yield(int argc, VALUE *args); -VALUE rb_fiber_current(void); -VALUE rb_fiber_alive_p(VALUE); -/* enum.c */ -VALUE rb_enum_values_pack(int, const VALUE*); -/* enumerator.c */ -VALUE rb_enumeratorize(VALUE, VALUE, int, VALUE *); -typedef VALUE rb_enumerator_size_func(VALUE, VALUE, VALUE); -VALUE rb_enumeratorize_with_size(VALUE, VALUE, int, VALUE *, rb_enumerator_size_func *); -#ifndef RUBY_EXPORT -#define rb_enumeratorize_with_size(obj, id, argc, argv, size_fn) \ - rb_enumeratorize_with_size(obj, id, argc, argv, (rb_enumerator_size_func *)(size_fn)) -#endif -#define RETURN_SIZED_ENUMERATOR(obj, argc, argv, size_fn) do { \ - if (!rb_block_given_p()) \ - return rb_enumeratorize_with_size((obj), ID2SYM(rb_frame_this_func()),\ - (argc), (argv), (size_fn)); \ - } while (0) -#define RETURN_ENUMERATOR(obj, argc, argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0) -/* error.c */ -VALUE rb_exc_new(VALUE, const char*, long); -VALUE rb_exc_new_cstr(VALUE, const char*); -VALUE rb_exc_new_str(VALUE, VALUE); -#define rb_exc_new2 rb_exc_new_cstr -#define rb_exc_new3 rb_exc_new_str -PRINTF_ARGS(NORETURN(void rb_loaderror(const char*, ...)), 1, 2); -PRINTF_ARGS(NORETURN(void rb_loaderror_with_path(VALUE path, const char*, ...)), 2, 3); -PRINTF_ARGS(NORETURN(void rb_name_error(ID, const char*, ...)), 2, 3); -PRINTF_ARGS(NORETURN(void rb_name_error_str(VALUE, const char*, ...)), 2, 3); -NORETURN(void rb_invalid_str(const char*, const char*)); -PRINTF_ARGS(void rb_compile_error(const char*, int, const char*, ...), 3, 4); -PRINTF_ARGS(void rb_compile_error_with_enc(const char*, int, void *, const char*, ...), 4, 5); -PRINTF_ARGS(void rb_compile_error_append(const char*, ...), 1, 2); -NORETURN(void rb_error_frozen(const char*)); -void rb_error_untrusted(VALUE); -void rb_check_frozen(VALUE); -void rb_check_trusted(VALUE); -#define rb_check_frozen_internal(obj) do { \ - VALUE frozen_obj = (obj); \ - if (OBJ_FROZEN(frozen_obj)) { \ - rb_error_frozen(rb_obj_classname(frozen_obj)); \ - } \ - } while (0) -#define rb_check_trusted_internal(obj) ((void) 0) -#ifdef __GNUC__ -#define rb_check_frozen(obj) __extension__({rb_check_frozen_internal(obj);}) -#define rb_check_trusted(obj) __extension__({rb_check_trusted_internal(obj);}) -#else -static inline void -rb_check_frozen_inline(VALUE obj) -{ - rb_check_frozen_internal(obj); -} -#define rb_check_frozen(obj) rb_check_frozen_inline(obj) -static inline void -rb_check_trusted_inline(VALUE obj) -{ - rb_check_trusted_internal(obj); -} -#define rb_check_trusted(obj) rb_check_trusted_inline(obj) -#endif -void rb_check_copyable(VALUE obj, VALUE orig); - -#define OBJ_INIT_COPY(obj, orig) \ - ((obj) != (orig) && (rb_obj_init_copy((obj), (orig)), 1)) - -/* eval.c */ -int rb_sourceline(void); -const char *rb_sourcefile(void); -VALUE rb_check_funcall(VALUE, ID, int, const VALUE*); - -NORETURN(void rb_error_arity(int, int, int)); -#define rb_check_arity rb_check_arity /* for ifdef */ -static inline void -rb_check_arity(int argc, int min, int max) -{ - if ((argc < min) || (max != UNLIMITED_ARGUMENTS && argc > max)) - rb_error_arity(argc, min, max); -} - -#if defined(NFDBITS) && defined(HAVE_RB_FD_INIT) -typedef struct { - int maxfd; - fd_set *fdset; -} rb_fdset_t; - -void rb_fd_init(rb_fdset_t *); -void rb_fd_term(rb_fdset_t *); -void rb_fd_zero(rb_fdset_t *); -void rb_fd_set(int, rb_fdset_t *); -void rb_fd_clr(int, rb_fdset_t *); -int rb_fd_isset(int, const rb_fdset_t *); -void rb_fd_copy(rb_fdset_t *, const fd_set *, int); -void rb_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src); -int rb_fd_select(int, rb_fdset_t *, rb_fdset_t *, rb_fdset_t *, struct timeval *); - -#define rb_fd_ptr(f) ((f)->fdset) -#define rb_fd_max(f) ((f)->maxfd) - -#elif defined(_WIN32) - -typedef struct { - int capa; - fd_set *fdset; -} rb_fdset_t; - -void rb_fd_init(rb_fdset_t *); -void rb_fd_term(rb_fdset_t *); -#define rb_fd_zero(f) ((f)->fdset->fd_count = 0) -void rb_fd_set(int, rb_fdset_t *); -#define rb_fd_clr(n, f) rb_w32_fdclr((n), (f)->fdset) -#define rb_fd_isset(n, f) rb_w32_fdisset((n), (f)->fdset) -#define rb_fd_copy(d, s, n) rb_w32_fd_copy((d), (s), (n)) -void rb_w32_fd_copy(rb_fdset_t *, const fd_set *, int); -#define rb_fd_dup(d, s) rb_w32_fd_dup((d), (s)) -void rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src); -#define rb_fd_select(n, rfds, wfds, efds, timeout) rb_w32_select((n), (rfds) ? ((rb_fdset_t*)(rfds))->fdset : NULL, (wfds) ? ((rb_fdset_t*)(wfds))->fdset : NULL, (efds) ? ((rb_fdset_t*)(efds))->fdset: NULL, (timeout)) -#define rb_fd_resize(n, f) ((void)(f)) - -#define rb_fd_ptr(f) ((f)->fdset) -#define rb_fd_max(f) ((f)->fdset->fd_count) - -#else - -typedef fd_set rb_fdset_t; -#define rb_fd_zero(f) FD_ZERO(f) -#define rb_fd_set(n, f) FD_SET((n), (f)) -#define rb_fd_clr(n, f) FD_CLR((n), (f)) -#define rb_fd_isset(n, f) FD_ISSET((n), (f)) -#define rb_fd_copy(d, s, n) (*(d) = *(s)) -#define rb_fd_dup(d, s) (*(d) = *(s)) -#define rb_fd_resize(n, f) ((void)(f)) -#define rb_fd_ptr(f) (f) -#define rb_fd_init(f) FD_ZERO(f) -#define rb_fd_init_copy(d, s) (*(d) = *(s)) -#define rb_fd_term(f) ((void)(f)) -#define rb_fd_max(f) FD_SETSIZE -#define rb_fd_select(n, rfds, wfds, efds, timeout) select((n), (rfds), (wfds), (efds), (timeout)) - -#endif - -NORETURN(void rb_exc_raise(VALUE)); -NORETURN(void rb_exc_fatal(VALUE)); -VALUE rb_f_exit(int,VALUE*); -VALUE rb_f_abort(int,VALUE*); -void rb_remove_method(VALUE, const char*); -void rb_remove_method_id(VALUE, ID); -#define rb_disable_super(klass, name) ((void)0) -#define rb_enable_super(klass, name) ((void)0) -#define HAVE_RB_DEFINE_ALLOC_FUNC 1 -typedef VALUE (*rb_alloc_func_t)(VALUE); -void rb_define_alloc_func(VALUE, rb_alloc_func_t); -void rb_undef_alloc_func(VALUE); -rb_alloc_func_t rb_get_alloc_func(VALUE); -void rb_clear_cache(void); -void rb_clear_constant_cache(void); -void rb_clear_method_cache_by_class(VALUE); -void rb_alias(VALUE, ID, ID); -void rb_attr(VALUE,ID,int,int,int); -int rb_method_boundp(VALUE, ID, int); -int rb_method_basic_definition_p(VALUE, ID); -VALUE rb_eval_cmd(VALUE, VALUE, int); -int rb_obj_respond_to(VALUE, ID, int); -int rb_respond_to(VALUE, ID); -VALUE rb_f_notimplement(int argc, VALUE *argv, VALUE obj); -void rb_interrupt(void); -VALUE rb_apply(VALUE, ID, VALUE); -void rb_backtrace(void); -ID rb_frame_this_func(void); -VALUE rb_obj_instance_eval(int, VALUE*, VALUE); -VALUE rb_obj_instance_exec(int, VALUE*, VALUE); -VALUE rb_mod_module_eval(int, VALUE*, VALUE); -VALUE rb_mod_module_exec(int, VALUE*, VALUE); -void rb_load(VALUE, int); -void rb_load_protect(VALUE, int, int*); -NORETURN(void rb_jump_tag(int)); -int rb_provided(const char*); -int rb_feature_provided(const char *, const char **); -void rb_provide(const char*); -VALUE rb_f_require(VALUE, VALUE); -VALUE rb_require_safe(VALUE, int); -void rb_obj_call_init(VALUE, int, VALUE*); -VALUE rb_class_new_instance(int, VALUE*, VALUE); -VALUE rb_block_proc(void); -VALUE rb_block_lambda(void); -VALUE rb_proc_new(VALUE (*)(ANYARGS/* VALUE yieldarg[, VALUE procarg] */), VALUE); -VALUE rb_obj_is_proc(VALUE); -VALUE rb_proc_call(VALUE, VALUE); -VALUE rb_proc_call_with_block(VALUE, int argc, const VALUE *argv, VALUE); -int rb_proc_arity(VALUE); -VALUE rb_proc_lambda_p(VALUE); -VALUE rb_binding_new(void); -VALUE rb_obj_method(VALUE, VALUE); -VALUE rb_obj_is_method(VALUE); -VALUE rb_method_call(int, VALUE*, VALUE); -VALUE rb_method_call_with_block(int, VALUE *, VALUE, VALUE); -int rb_mod_method_arity(VALUE, ID); -int rb_obj_method_arity(VALUE, ID); -VALUE rb_protect(VALUE (*)(VALUE), VALUE, int*); -void rb_set_end_proc(void (*)(VALUE), VALUE); -void rb_exec_end_proc(void); -void rb_thread_schedule(void); -void rb_thread_wait_fd(int); -int rb_thread_fd_writable(int); -void rb_thread_fd_close(int); -int rb_thread_alone(void); -DEPRECATED(void rb_thread_polling(void)); -void rb_thread_sleep(int); -void rb_thread_sleep_forever(void); -void rb_thread_sleep_deadly(void); -VALUE rb_thread_stop(void); -VALUE rb_thread_wakeup(VALUE); -VALUE rb_thread_wakeup_alive(VALUE); -VALUE rb_thread_run(VALUE); -VALUE rb_thread_kill(VALUE); -VALUE rb_thread_create(VALUE (*)(ANYARGS), void*); -DEPRECATED(int rb_thread_select(int, fd_set *, fd_set *, fd_set *, struct timeval *)); -int rb_thread_fd_select(int, rb_fdset_t *, rb_fdset_t *, rb_fdset_t *, struct timeval *); -void rb_thread_wait_for(struct timeval); -VALUE rb_thread_current(void); -VALUE rb_thread_main(void); -VALUE rb_thread_local_aref(VALUE, ID); -VALUE rb_thread_local_aset(VALUE, ID, VALUE); -void rb_thread_atfork(void); -void rb_thread_atfork_before_exec(void); -VALUE rb_exec_recursive(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE); -VALUE rb_exec_recursive_paired(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE,VALUE); -VALUE rb_exec_recursive_outer(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE); -VALUE rb_exec_recursive_paired_outer(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE,VALUE); -/* dir.c */ -VALUE rb_dir_getwd(void); -/* file.c */ -VALUE rb_file_s_expand_path(int, VALUE *); -VALUE rb_file_expand_path(VALUE, VALUE); -VALUE rb_file_s_absolute_path(int, VALUE *); -VALUE rb_file_absolute_path(VALUE, VALUE); -VALUE rb_file_dirname(VALUE fname); -int rb_find_file_ext_safe(VALUE*, const char* const*, int); -VALUE rb_find_file_safe(VALUE, int); -int rb_find_file_ext(VALUE*, const char* const*); -VALUE rb_find_file(VALUE); -VALUE rb_file_directory_p(VALUE,VALUE); -VALUE rb_str_encode_ospath(VALUE); -int rb_is_absolute_path(const char *); -/* gc.c */ -NORETURN(void rb_memerror(void)); -int rb_during_gc(void); -void rb_gc_mark_locations(VALUE*, VALUE*); -void rb_mark_tbl(struct st_table*); -void rb_mark_set(struct st_table*); -void rb_mark_hash(struct st_table*); -void rb_gc_mark_maybe(VALUE); -void rb_gc_mark(VALUE); -void rb_gc_force_recycle(VALUE); -void rb_gc(void); -void rb_gc_copy_finalizer(VALUE,VALUE); -void rb_gc_finalize_deferred(void); -void rb_gc_call_finalizer_at_exit(void); -VALUE rb_gc_enable(void); -VALUE rb_gc_disable(void); -VALUE rb_gc_start(void); -DEPRECATED(void rb_gc_set_params(void)); -VALUE rb_define_finalizer(VALUE, VALUE); -VALUE rb_undefine_finalizer(VALUE); -size_t rb_gc_count(void); -size_t rb_gc_stat(VALUE); -VALUE rb_gc_latest_gc_info(VALUE); -/* hash.c */ -void st_foreach_safe(struct st_table *, int (*)(ANYARGS), st_data_t); -VALUE rb_check_hash_type(VALUE); -void rb_hash_foreach(VALUE, int (*)(ANYARGS), VALUE); -VALUE rb_hash(VALUE); -VALUE rb_hash_new(void); -VALUE rb_hash_dup(VALUE); -VALUE rb_hash_freeze(VALUE); -VALUE rb_hash_aref(VALUE, VALUE); -VALUE rb_hash_lookup(VALUE, VALUE); -VALUE rb_hash_lookup2(VALUE, VALUE, VALUE); -VALUE rb_hash_fetch(VALUE, VALUE); -VALUE rb_hash_aset(VALUE, VALUE, VALUE); -VALUE rb_hash_clear(VALUE); -VALUE rb_hash_delete_if(VALUE); -VALUE rb_hash_delete(VALUE,VALUE); -VALUE rb_hash_set_ifnone(VALUE hash, VALUE ifnone); -typedef VALUE rb_hash_update_func(VALUE newkey, VALUE oldkey, VALUE value); -VALUE rb_hash_update_by(VALUE hash1, VALUE hash2, rb_hash_update_func *func); -struct st_table *rb_hash_tbl(VALUE); -int rb_path_check(const char*); -int rb_env_path_tainted(void); -VALUE rb_env_clear(void); -/* io.c */ -#define rb_defout rb_stdout -RUBY_EXTERN VALUE rb_fs; -RUBY_EXTERN VALUE rb_output_fs; -RUBY_EXTERN VALUE rb_rs; -RUBY_EXTERN VALUE rb_default_rs; -RUBY_EXTERN VALUE rb_output_rs; -VALUE rb_io_write(VALUE, VALUE); -VALUE rb_io_gets(VALUE); -VALUE rb_io_getbyte(VALUE); -VALUE rb_io_ungetc(VALUE, VALUE); -VALUE rb_io_ungetbyte(VALUE, VALUE); -VALUE rb_io_close(VALUE); -VALUE rb_io_flush(VALUE); -VALUE rb_io_eof(VALUE); -VALUE rb_io_binmode(VALUE); -VALUE rb_io_ascii8bit_binmode(VALUE); -VALUE rb_io_addstr(VALUE, VALUE); -VALUE rb_io_printf(int, VALUE*, VALUE); -VALUE rb_io_print(int, VALUE*, VALUE); -VALUE rb_io_puts(int, VALUE*, VALUE); -VALUE rb_io_fdopen(int, int, const char*); -VALUE rb_io_get_io(VALUE); -VALUE rb_file_open(const char*, const char*); -VALUE rb_file_open_str(VALUE, const char*); -VALUE rb_gets(void); -void rb_write_error(const char*); -void rb_write_error2(const char*, long); -void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds); -int rb_pipe(int *pipes); -int rb_reserved_fd_p(int fd); -int rb_cloexec_open(const char *pathname, int flags, mode_t mode); -int rb_cloexec_dup(int oldfd); -int rb_cloexec_dup2(int oldfd, int newfd); -int rb_cloexec_pipe(int fildes[2]); -int rb_cloexec_fcntl_dupfd(int fd, int minfd); -#define RB_RESERVED_FD_P(fd) rb_reserved_fd_p(fd) -void rb_update_max_fd(int fd); -void rb_fd_fix_cloexec(int fd); -/* marshal.c */ -VALUE rb_marshal_dump(VALUE, VALUE); -VALUE rb_marshal_load(VALUE); -void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE)); -/* numeric.c */ -NORETURN(void rb_num_zerodiv(void)); -#define RB_NUM_COERCE_FUNCS_NEED_OPID 1 -VALUE rb_num_coerce_bin(VALUE, VALUE, ID); -VALUE rb_num_coerce_cmp(VALUE, VALUE, ID); -VALUE rb_num_coerce_relop(VALUE, VALUE, ID); -VALUE rb_num_coerce_bit(VALUE, VALUE, ID); -VALUE rb_num2fix(VALUE); -VALUE rb_fix2str(VALUE, int); -VALUE rb_dbl_cmp(double, double); -/* object.c */ -int rb_eql(VALUE, VALUE); -VALUE rb_any_to_s(VALUE); -VALUE rb_inspect(VALUE); -VALUE rb_obj_is_instance_of(VALUE, VALUE); -VALUE rb_obj_is_kind_of(VALUE, VALUE); -VALUE rb_obj_alloc(VALUE); -VALUE rb_obj_clone(VALUE); -VALUE rb_obj_dup(VALUE); -VALUE rb_obj_init_copy(VALUE,VALUE); -VALUE rb_obj_taint(VALUE); -VALUE rb_obj_tainted(VALUE); -VALUE rb_obj_untaint(VALUE); -VALUE rb_obj_untrust(VALUE); -VALUE rb_obj_untrusted(VALUE); -VALUE rb_obj_trust(VALUE); -VALUE rb_obj_freeze(VALUE); -VALUE rb_obj_frozen_p(VALUE); -VALUE rb_obj_id(VALUE); -VALUE rb_obj_class(VALUE); -VALUE rb_class_real(VALUE); -VALUE rb_class_inherited_p(VALUE, VALUE); -VALUE rb_class_superclass(VALUE); -VALUE rb_class_get_superclass(VALUE); -VALUE rb_convert_type(VALUE,int,const char*,const char*); -VALUE rb_check_convert_type(VALUE,int,const char*,const char*); -VALUE rb_check_to_integer(VALUE, const char *); -VALUE rb_check_to_float(VALUE); -VALUE rb_to_int(VALUE); -VALUE rb_check_to_int(VALUE); -VALUE rb_Integer(VALUE); -VALUE rb_to_float(VALUE); -VALUE rb_Float(VALUE); -VALUE rb_String(VALUE); -VALUE rb_Array(VALUE); -VALUE rb_Hash(VALUE); -double rb_cstr_to_dbl(const char*, int); -double rb_str_to_dbl(VALUE, int); -/* parse.y */ -RUBY_EXTERN int ruby_sourceline; -RUBY_EXTERN char *ruby_sourcefile; -ID rb_id_attrset(ID); -int rb_is_const_id(ID); -int rb_is_global_id(ID); -int rb_is_instance_id(ID); -int rb_is_attrset_id(ID); -int rb_is_class_id(ID); -int rb_is_local_id(ID); -int rb_is_junk_id(ID); -int rb_symname_p(const char*); -int rb_sym_interned_p(VALUE); -VALUE rb_backref_get(void); -void rb_backref_set(VALUE); -VALUE rb_lastline_get(void); -void rb_lastline_set(VALUE); -VALUE rb_sym_all_symbols(void); -/* process.c */ -void rb_last_status_set(int status, rb_pid_t pid); -VALUE rb_last_status_get(void); -struct rb_exec_arg { - VALUE execarg_obj; -}; -DEPRECATED(int rb_proc_exec_n(int, VALUE*, const char*)); -int rb_proc_exec(const char*); -DEPRECATED(VALUE rb_exec_arg_init(int argc, VALUE *argv, int accept_shell, struct rb_exec_arg *e)); -DEPRECATED(int rb_exec_arg_addopt(struct rb_exec_arg *e, VALUE key, VALUE val)); -DEPRECATED(void rb_exec_arg_fixup(struct rb_exec_arg *e)); -DEPRECATED(int rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s)); -DEPRECATED(int rb_run_exec_options_err(const struct rb_exec_arg *e, struct rb_exec_arg *s, char*, size_t)); -DEPRECATED(int rb_exec(const struct rb_exec_arg*)); -DEPRECATED(int rb_exec_err(const struct rb_exec_arg*, char*, size_t)); -DEPRECATED(rb_pid_t rb_fork(int*, int (*)(void*), void*, VALUE)); -DEPRECATED(rb_pid_t rb_fork_err(int*, int (*)(void*, char*, size_t), void*, VALUE, char*, size_t)); -VALUE rb_f_exec(int,VALUE*); -rb_pid_t rb_waitpid(rb_pid_t pid, int *status, int flags); -void rb_syswait(rb_pid_t pid); -rb_pid_t rb_spawn(int, VALUE*); -rb_pid_t rb_spawn_err(int, VALUE*, char*, size_t); -VALUE rb_proc_times(VALUE); -VALUE rb_detach_process(rb_pid_t pid); -/* range.c */ -VALUE rb_range_new(VALUE, VALUE, int); -VALUE rb_range_beg_len(VALUE, long*, long*, long, int); -int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp); -/* random.c */ -unsigned int rb_genrand_int32(void); -double rb_genrand_real(void); -void rb_reset_random_seed(void); -VALUE rb_random_bytes(VALUE rnd, long n); -VALUE rb_random_int(VALUE rnd, VALUE max); -unsigned int rb_random_int32(VALUE rnd); -double rb_random_real(VALUE rnd); -unsigned long rb_random_ulong_limited(VALUE rnd, unsigned long limit); -unsigned long rb_genrand_ulong_limited(unsigned long i); -/* re.c */ -#define rb_memcmp memcmp -int rb_memcicmp(const void*,const void*,long); -void rb_match_busy(VALUE); -VALUE rb_reg_nth_defined(int, VALUE); -VALUE rb_reg_nth_match(int, VALUE); -int rb_reg_backref_number(VALUE match, VALUE backref); -VALUE rb_reg_last_match(VALUE); -VALUE rb_reg_match_pre(VALUE); -VALUE rb_reg_match_post(VALUE); -VALUE rb_reg_match_last(VALUE); -#define HAVE_RB_REG_NEW_STR 1 -VALUE rb_reg_new_str(VALUE, int); -VALUE rb_reg_new(const char *, long, int); -VALUE rb_reg_alloc(void); -VALUE rb_reg_init_str(VALUE re, VALUE s, int options); -VALUE rb_reg_match(VALUE, VALUE); -VALUE rb_reg_match2(VALUE); -int rb_reg_options(VALUE); -/* ruby.c */ -#define rb_argv rb_get_argv() -RUBY_EXTERN VALUE rb_argv0; -VALUE rb_get_argv(void); -void *rb_load_file(const char*); -void *rb_load_file_str(VALUE); -/* signal.c */ -VALUE rb_f_kill(int, VALUE*); -#ifdef POSIX_SIGNAL -#define posix_signal ruby_posix_signal -RETSIGTYPE (*posix_signal(int, RETSIGTYPE (*)(int)))(int); -#endif -void rb_trap_exit(void); -void rb_trap_exec(void); -const char *ruby_signal_name(int); -void ruby_default_signal(int); -/* sprintf.c */ -VALUE rb_f_sprintf(int, const VALUE*); -PRINTF_ARGS(VALUE rb_sprintf(const char*, ...), 1, 2); -VALUE rb_vsprintf(const char*, va_list); -PRINTF_ARGS(VALUE rb_str_catf(VALUE, const char*, ...), 2, 3); -VALUE rb_str_vcatf(VALUE, const char*, va_list); -VALUE rb_str_format(int, const VALUE *, VALUE); -/* string.c */ -VALUE rb_str_new(const char*, long); -VALUE rb_str_new_cstr(const char*); -VALUE rb_str_new_shared(VALUE); -VALUE rb_str_new_frozen(VALUE); -VALUE rb_str_new_with_class(VALUE, const char*, long); -VALUE rb_tainted_str_new_cstr(const char*); -VALUE rb_tainted_str_new(const char*, long); -VALUE rb_external_str_new(const char*, long); -VALUE rb_external_str_new_cstr(const char*); -VALUE rb_locale_str_new(const char*, long); -VALUE rb_locale_str_new_cstr(const char*); -VALUE rb_filesystem_str_new(const char*, long); -VALUE rb_filesystem_str_new_cstr(const char*); -VALUE rb_str_buf_new(long); -VALUE rb_str_buf_new_cstr(const char*); -VALUE rb_str_buf_new2(const char*); -VALUE rb_str_tmp_new(long); -VALUE rb_usascii_str_new(const char*, long); -VALUE rb_usascii_str_new_cstr(const char*); -void rb_str_free(VALUE); -void rb_str_shared_replace(VALUE, VALUE); -VALUE rb_str_buf_append(VALUE, VALUE); -VALUE rb_str_buf_cat(VALUE, const char*, long); -VALUE rb_str_buf_cat2(VALUE, const char*); -VALUE rb_str_buf_cat_ascii(VALUE, const char*); -VALUE rb_obj_as_string(VALUE); -VALUE rb_check_string_type(VALUE); -void rb_must_asciicompat(VALUE); -VALUE rb_str_dup(VALUE); -VALUE rb_str_resurrect(VALUE str); -VALUE rb_str_locktmp(VALUE); -VALUE rb_str_unlocktmp(VALUE); -VALUE rb_str_dup_frozen(VALUE); -#define rb_str_dup_frozen rb_str_new_frozen -VALUE rb_str_plus(VALUE, VALUE); -VALUE rb_str_times(VALUE, VALUE); -long rb_str_sublen(VALUE, long); -VALUE rb_str_substr(VALUE, long, long); -VALUE rb_str_subseq(VALUE, long, long); -char *rb_str_subpos(VALUE, long, long*); -void rb_str_modify(VALUE); -void rb_str_modify_expand(VALUE, long); -VALUE rb_str_freeze(VALUE); -void rb_str_set_len(VALUE, long); -VALUE rb_str_resize(VALUE, long); -VALUE rb_str_cat(VALUE, const char*, long); -VALUE rb_str_cat2(VALUE, const char*); -VALUE rb_str_append(VALUE, VALUE); -VALUE rb_str_concat(VALUE, VALUE); -st_index_t rb_memhash(const void *ptr, long len); -st_index_t rb_hash_start(st_index_t); -st_index_t rb_hash_uint32(st_index_t, uint32_t); -st_index_t rb_hash_uint(st_index_t, st_index_t); -st_index_t rb_hash_end(st_index_t); -#define rb_hash_uint32(h, i) st_hash_uint32((h), (i)) -#define rb_hash_uint(h, i) st_hash_uint((h), (i)) -#define rb_hash_end(h) st_hash_end(h) -st_index_t rb_str_hash(VALUE); -int rb_str_hash_cmp(VALUE,VALUE); -int rb_str_comparable(VALUE, VALUE); -int rb_str_cmp(VALUE, VALUE); -VALUE rb_str_equal(VALUE str1, VALUE str2); -VALUE rb_str_drop_bytes(VALUE, long); -void rb_str_update(VALUE, long, long, VALUE); -VALUE rb_str_replace(VALUE, VALUE); -VALUE rb_str_inspect(VALUE); -VALUE rb_str_dump(VALUE); -VALUE rb_str_split(VALUE, const char*); -void rb_str_associate(VALUE, VALUE); -VALUE rb_str_associated(VALUE); -void rb_str_setter(VALUE, ID, VALUE*); -VALUE rb_str_intern(VALUE); -VALUE rb_sym_to_s(VALUE); -long rb_str_strlen(VALUE); -VALUE rb_str_length(VALUE); -long rb_str_offset(VALUE, long); -size_t rb_str_capacity(VALUE); -VALUE rb_str_ellipsize(VALUE, long); -VALUE rb_str_scrub(VALUE, VALUE); -#if defined(__GNUC__) && !defined(__PCC__) -#define rb_str_new_cstr(str) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_str_new((str), (long)strlen(str)) : \ - rb_str_new_cstr(str); \ -}) -#define rb_tainted_str_new_cstr(str) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_tainted_str_new((str), (long)strlen(str)) : \ - rb_tainted_str_new_cstr(str); \ -}) -#define rb_usascii_str_new_cstr(str) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_usascii_str_new((str), (long)strlen(str)) : \ - rb_usascii_str_new_cstr(str); \ -}) -#define rb_external_str_new_cstr(str) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_external_str_new((str), (long)strlen(str)) : \ - rb_external_str_new_cstr(str); \ -}) -#define rb_locale_str_new_cstr(str) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_locale_str_new((str), (long)strlen(str)) : \ - rb_locale_str_new_cstr(str); \ -}) -#define rb_str_buf_new_cstr(str) __extension__ ( \ -{ \ - (__builtin_constant_p(str)) ? \ - rb_str_buf_cat(rb_str_buf_new((long)strlen(str)), \ - (str), (long)strlen(str)) : \ - rb_str_buf_new_cstr(str); \ -}) -#define rb_str_buf_cat2(str, ptr) __extension__ ( \ -{ \ - (__builtin_constant_p(ptr)) ? \ - rb_str_buf_cat((str), (ptr), (long)strlen(ptr)) : \ - rb_str_buf_cat2((str), (ptr)); \ -}) -#define rb_str_cat2(str, ptr) __extension__ ( \ -{ \ - (__builtin_constant_p(ptr)) ? \ - rb_str_cat((str), (ptr), (long)strlen(ptr)) : \ - rb_str_cat2((str), (ptr)); \ -}) -#define rb_exc_new_cstr(klass, ptr) __extension__ ( \ -{ \ - (__builtin_constant_p(ptr)) ? \ - rb_exc_new((klass), (ptr), (long)strlen(ptr)) : \ - rb_exc_new_cstr((klass), (ptr)); \ -}) -#endif -#define rb_str_new2 rb_str_new_cstr -#define rb_str_new3 rb_str_new_shared -#define rb_str_new4 rb_str_new_frozen -#define rb_str_new5 rb_str_new_with_class -#define rb_tainted_str_new2 rb_tainted_str_new_cstr -#define rb_str_buf_new2 rb_str_buf_new_cstr -#define rb_usascii_str_new2 rb_usascii_str_new_cstr -/* struct.c */ -VALUE rb_struct_new(VALUE, ...); -VALUE rb_struct_define(const char*, ...); -VALUE rb_struct_define_under(VALUE, const char*, ...); -VALUE rb_struct_alloc(VALUE, VALUE); -VALUE rb_struct_initialize(VALUE, VALUE); -VALUE rb_struct_aref(VALUE, VALUE); -VALUE rb_struct_aset(VALUE, VALUE, VALUE); -VALUE rb_struct_getmember(VALUE, ID); -DEPRECATED(VALUE rb_struct_iv_get(VALUE, const char*)); -VALUE rb_struct_s_members(VALUE); -VALUE rb_struct_members(VALUE); -VALUE rb_struct_alloc_noinit(VALUE); -VALUE rb_struct_define_without_accessor(const char *, VALUE, rb_alloc_func_t, ...); -VALUE rb_struct_define_without_accessor_under(VALUE outer, const char *class_name, VALUE super, rb_alloc_func_t alloc, ...); - -/* thread.c */ -typedef void rb_unblock_function_t(void *); -typedef VALUE rb_blocking_function_t(void *); -void rb_thread_check_ints(void); -int rb_thread_interrupted(VALUE thval); - -/* Use rb_thread_call_without_gvl family instead. */ -DEPRECATED(VALUE rb_thread_blocking_region(rb_blocking_function_t *func, void *data1, - rb_unblock_function_t *ubf, void *data2)); -#define RUBY_UBF_IO ((rb_unblock_function_t *)-1) -#define RUBY_UBF_PROCESS ((rb_unblock_function_t *)-1) -VALUE rb_mutex_new(void); -VALUE rb_mutex_locked_p(VALUE mutex); -VALUE rb_mutex_trylock(VALUE mutex); -VALUE rb_mutex_lock(VALUE mutex); -VALUE rb_mutex_unlock(VALUE mutex); -VALUE rb_mutex_sleep(VALUE self, VALUE timeout); -VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg); -/* time.c */ -VALUE rb_time_new(time_t, long); -VALUE rb_time_nano_new(time_t, long); -VALUE rb_time_num_new(VALUE, VALUE); -struct timeval rb_time_interval(VALUE num); -struct timeval rb_time_timeval(VALUE time); -struct timespec rb_time_timespec(VALUE time); -/* variable.c */ -VALUE rb_mod_name(VALUE); -VALUE rb_class_path(VALUE); -VALUE rb_class_path_cached(VALUE); -void rb_set_class_path(VALUE, VALUE, const char*); -void rb_set_class_path_string(VALUE, VALUE, VALUE); -VALUE rb_path_to_class(VALUE); -VALUE rb_path2class(const char*); -void rb_name_class(VALUE, ID); -VALUE rb_class_name(VALUE); -void rb_autoload(VALUE, ID, const char*); -VALUE rb_autoload_load(VALUE, ID); -VALUE rb_autoload_p(VALUE, ID); -VALUE rb_f_trace_var(int, VALUE*); -VALUE rb_f_untrace_var(int, VALUE*); -VALUE rb_f_global_variables(void); -void rb_alias_variable(ID, ID); -struct st_table* rb_generic_ivar_table(VALUE); -void rb_copy_generic_ivar(VALUE,VALUE); -void rb_free_generic_ivar(VALUE); -VALUE rb_ivar_get(VALUE, ID); -VALUE rb_ivar_set(VALUE, ID, VALUE); -VALUE rb_ivar_defined(VALUE, ID); -void rb_ivar_foreach(VALUE, int (*)(ANYARGS), st_data_t); -st_index_t rb_ivar_count(VALUE); -VALUE rb_attr_get(VALUE, ID); -VALUE rb_obj_instance_variables(VALUE); -VALUE rb_obj_remove_instance_variable(VALUE, VALUE); -void *rb_mod_const_at(VALUE, void*); -void *rb_mod_const_of(VALUE, void*); -VALUE rb_const_list(void*); -VALUE rb_mod_constants(int, VALUE *, VALUE); -VALUE rb_mod_remove_const(VALUE, VALUE); -int rb_const_defined(VALUE, ID); -int rb_const_defined_at(VALUE, ID); -int rb_const_defined_from(VALUE, ID); -VALUE rb_const_get(VALUE, ID); -VALUE rb_const_get_at(VALUE, ID); -VALUE rb_const_get_from(VALUE, ID); -void rb_const_set(VALUE, ID, VALUE); -VALUE rb_const_remove(VALUE, ID); -VALUE rb_mod_const_missing(VALUE,VALUE); -VALUE rb_cvar_defined(VALUE, ID); -void rb_cvar_set(VALUE, ID, VALUE); -VALUE rb_cvar_get(VALUE, ID); -void rb_cv_set(VALUE, const char*, VALUE); -VALUE rb_cv_get(VALUE, const char*); -void rb_define_class_variable(VALUE, const char*, VALUE); -VALUE rb_mod_class_variables(int, VALUE*, VALUE); -VALUE rb_mod_remove_cvar(VALUE, VALUE); - -ID rb_frame_callee(void); -VALUE rb_str_succ(VALUE); -VALUE rb_time_succ(VALUE); -void rb_frame_pop(void); -int rb_frame_method_id_and_class(ID *idp, VALUE *klassp); -VALUE rb_make_backtrace(void); -VALUE rb_make_exception(int, VALUE*); - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_INTERN_H */ diff --git a/vendor/ruby/io.h b/vendor/ruby/io.h deleted file mode 100644 index 1034938..0000000 --- a/vendor/ruby/io.h +++ /dev/null @@ -1,214 +0,0 @@ -/********************************************************************** - - rubyio.h - - - $Author: nobu $ - created at: Fri Nov 12 16:47:09 JST 1993 - - Copyright (C) 1993-2007 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_IO_H -#define RUBY_IO_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include -#include -#include "ruby/encoding.h" - -#if defined(HAVE_STDIO_EXT_H) -#include -#endif - -#include "ruby/config.h" -#if defined(HAVE_POLL) -# ifdef _AIX -# define reqevents events -# define rtnevents revents -# endif -# include -# ifdef _AIX -# undef reqevents -# undef rtnevents -# undef events -# undef revents -# endif -# define RB_WAITFD_IN POLLIN -# define RB_WAITFD_PRI POLLPRI -# define RB_WAITFD_OUT POLLOUT -#else -# define RB_WAITFD_IN 0x001 -# define RB_WAITFD_PRI 0x002 -# define RB_WAITFD_OUT 0x004 -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -typedef struct { - char *ptr; /* off + len <= capa */ - int off; - int len; - int capa; -} rb_io_buffer_t; - -typedef struct rb_io_t { - int fd; /* file descriptor */ - FILE *stdio_file; /* stdio ptr for read/write if available */ - int mode; /* mode flags: FMODE_XXXs */ - rb_pid_t pid; /* child's pid (for pipes) */ - int lineno; /* number of lines read */ - VALUE pathv; /* pathname for file */ - void (*finalize)(struct rb_io_t*,int); /* finalize proc */ - - rb_io_buffer_t wbuf, rbuf; - - VALUE tied_io_for_writing; - - /* - * enc enc2 read action write action - * NULL NULL force_encoding(default_external) write the byte sequence of str - * e1 NULL force_encoding(e1) convert str.encoding to e1 - * e1 e2 convert from e2 to e1 convert str.encoding to e2 - */ - struct rb_io_enc_t { - rb_encoding *enc; - rb_encoding *enc2; - int ecflags; - VALUE ecopts; - } encs; - - rb_econv_t *readconv; - rb_io_buffer_t cbuf; - - rb_econv_t *writeconv; - VALUE writeconv_asciicompat; - int writeconv_pre_ecflags; - VALUE writeconv_pre_ecopts; - int writeconv_initialized; - - VALUE write_lock; -} rb_io_t; - -#define HAVE_RB_IO_T 1 - -#define FMODE_READABLE 0x00000001 -#define FMODE_WRITABLE 0x00000002 -#define FMODE_READWRITE (FMODE_READABLE|FMODE_WRITABLE) -#define FMODE_BINMODE 0x00000004 -#define FMODE_SYNC 0x00000008 -#define FMODE_TTY 0x00000010 -#define FMODE_DUPLEX 0x00000020 -#define FMODE_APPEND 0x00000040 -#define FMODE_CREATE 0x00000080 -/* #define FMODE_NOREVLOOKUP 0x00000100 */ -#define FMODE_WSPLIT 0x00000200 -#define FMODE_WSPLIT_INITIALIZED 0x00000400 -#define FMODE_TRUNC 0x00000800 -#define FMODE_TEXTMODE 0x00001000 -/* #define FMODE_PREP 0x00010000 */ -#define FMODE_SETENC_BY_BOM 0x00100000 - -#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr) - -#define RB_IO_BUFFER_INIT(buf) do {\ - (buf).ptr = NULL;\ - (buf).off = 0;\ - (buf).len = 0;\ - (buf).capa = 0;\ -} while (0) - -#define MakeOpenFile(obj, fp) do {\ - if (RFILE(obj)->fptr) {\ - rb_io_close(obj);\ - rb_io_fptr_finalize(RFILE(obj)->fptr);\ - RFILE(obj)->fptr = 0;\ - }\ - (fp) = 0;\ - RB_IO_FPTR_NEW(fp);\ - RFILE(obj)->fptr = (fp);\ -} while (0) - -#define RB_IO_FPTR_NEW(fp) do {\ - (fp) = ALLOC(rb_io_t);\ - (fp)->fd = -1;\ - (fp)->stdio_file = NULL;\ - (fp)->mode = 0;\ - (fp)->pid = 0;\ - (fp)->lineno = 0;\ - (fp)->pathv = Qnil;\ - (fp)->finalize = 0;\ - RB_IO_BUFFER_INIT((fp)->wbuf);\ - RB_IO_BUFFER_INIT((fp)->rbuf);\ - RB_IO_BUFFER_INIT((fp)->cbuf);\ - (fp)->readconv = NULL;\ - (fp)->writeconv = NULL;\ - (fp)->writeconv_asciicompat = Qnil;\ - (fp)->writeconv_pre_ecflags = 0;\ - (fp)->writeconv_pre_ecopts = Qnil;\ - (fp)->writeconv_initialized = 0;\ - (fp)->tied_io_for_writing = 0;\ - (fp)->encs.enc = NULL;\ - (fp)->encs.enc2 = NULL;\ - (fp)->encs.ecflags = 0;\ - (fp)->encs.ecopts = Qnil;\ - (fp)->write_lock = 0;\ -} while (0) - -FILE *rb_io_stdio_file(rb_io_t *fptr); - -FILE *rb_fdopen(int, const char*); -int rb_io_modestr_fmode(const char *modestr); -int rb_io_modestr_oflags(const char *modestr); -int rb_io_oflags_fmode(int oflags); -void rb_io_check_writable(rb_io_t*); -void rb_io_check_readable(rb_io_t*); -void rb_io_check_char_readable(rb_io_t *fptr); -void rb_io_check_byte_readable(rb_io_t *fptr); -int rb_io_fptr_finalize(rb_io_t*); -void rb_io_synchronized(rb_io_t*); -void rb_io_check_initialized(rb_io_t*); -void rb_io_check_closed(rb_io_t*); -VALUE rb_io_get_io(VALUE io); -VALUE rb_io_check_io(VALUE io); -VALUE rb_io_get_write_io(VALUE io); -VALUE rb_io_set_write_io(VALUE io, VALUE w); -int rb_io_wait_readable(int); -int rb_io_wait_writable(int); -int rb_wait_for_single_fd(int fd, int events, struct timeval *tv); -void rb_io_set_nonblock(rb_io_t *fptr); -int rb_io_extract_encoding_option(VALUE opt, rb_encoding **enc_p, rb_encoding **enc2_p, int *fmode_p); -ssize_t rb_io_bufwrite(VALUE io, const void *buf, size_t size); - -/* compatibility for ruby 1.8 and older */ -#define rb_io_mode_flags(modestr) rb_io_modestr_fmode(modestr) -#define rb_io_modenum_flags(oflags) rb_io_oflags_fmode(oflags) - -VALUE rb_io_taint_check(VALUE); -NORETURN(void rb_eof_error(void)); - -void rb_io_read_check(rb_io_t*); -int rb_io_read_pending(rb_io_t*); -DEPRECATED(void rb_read_check(FILE*)); - -struct stat; -VALUE rb_stat_new(const struct stat *); - -/* gc.c */ - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_IO_H */ diff --git a/vendor/ruby/missing.h b/vendor/ruby/missing.h deleted file mode 100644 index abd4b99..0000000 --- a/vendor/ruby/missing.h +++ /dev/null @@ -1,244 +0,0 @@ -/************************************************ - - missing.h - prototype for *.c in ./missing, and - for missing timeval struct - - $Author: nobu $ - created at: Sat May 11 23:46:03 JST 2002 - -************************************************/ - -#ifndef RUBY_MISSING_H -#define RUBY_MISSING_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/config.h" -#include -#include /* for INFINITY and NAN */ -#ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H -#endif - -#if !defined(HAVE_STRUCT_TIMEVAL) || !defined(HAVE_STRUCT_TIMESPEC) -#if defined(HAVE_TIME_H) -# include -#endif -#if defined(HAVE_SYS_TIME_H) -# include -#endif -#endif - -#ifndef RUBY_SYMBOL_EXPORT_BEGIN -# define RUBY_SYMBOL_EXPORT_BEGIN /* begin */ -# define RUBY_SYMBOL_EXPORT_END /* end */ -#endif - -#if !defined(HAVE_STRUCT_TIMEVAL) -struct timeval { - time_t tv_sec; /* seconds */ - long tv_usec; /* microseconds */ -}; -#endif /* HAVE_STRUCT_TIMEVAL */ - -#if !defined(HAVE_STRUCT_TIMESPEC) -struct timespec { - time_t tv_sec; /* seconds */ - long tv_nsec; /* nanoseconds */ -}; -#endif - -#if !defined(HAVE_STRUCT_TIMEZONE) -struct timezone { - int tz_minuteswest; - int tz_dsttime; -}; -#endif - -#ifdef RUBY_EXPORT -#undef RUBY_EXTERN -#endif -#ifndef RUBY_EXTERN -#define RUBY_EXTERN extern -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#ifndef HAVE_ACOSH -RUBY_EXTERN double acosh(double); -RUBY_EXTERN double asinh(double); -RUBY_EXTERN double atanh(double); -#endif - -#ifndef HAVE_CRYPT -RUBY_EXTERN char *crypt(const char *, const char *); -#endif - -#ifndef HAVE_DUP2 -RUBY_EXTERN int dup2(int, int); -#endif - -#ifndef HAVE_EACCESS -RUBY_EXTERN int eaccess(const char*, int); -#endif - -#ifndef HAVE_ROUND -RUBY_EXTERN double round(double); /* numeric.c */ -#endif - -#ifndef HAVE_FINITE -RUBY_EXTERN int finite(double); -#endif - -#ifndef HAVE_FLOCK -RUBY_EXTERN int flock(int, int); -#endif - -/* -#ifndef HAVE_FREXP -RUBY_EXTERN double frexp(double, int *); -#endif -*/ - -#ifndef HAVE_HYPOT -RUBY_EXTERN double hypot(double, double); -#endif - -#ifndef HAVE_ERF -RUBY_EXTERN double erf(double); -RUBY_EXTERN double erfc(double); -#endif - -#ifndef HAVE_TGAMMA -RUBY_EXTERN double tgamma(double); -#endif - -#ifndef HAVE_LGAMMA_R -RUBY_EXTERN double lgamma_r(double, int *); -#endif - -#ifndef HAVE_CBRT -RUBY_EXTERN double cbrt(double); -#endif - -#if !defined(INFINITY) || !defined(NAN) -union bytesequence4_or_float { - unsigned char bytesequence[4]; - float float_value; -}; -#endif - -#ifdef INFINITY -# define HAVE_INFINITY -#else -/** @internal */ -RUBY_EXTERN const union bytesequence4_or_float rb_infinity; -# define INFINITY (rb_infinity.float_value) -#endif - -#ifdef NAN -# define HAVE_NAN -#else -/** @internal */ -RUBY_EXTERN const union bytesequence4_or_float rb_nan; -# define NAN (rb_nan.float_value) -#endif - -#ifndef isinf -# ifndef HAVE_ISINF -# if defined(HAVE_FINITE) && defined(HAVE_ISNAN) -# ifdef HAVE_IEEEFP_H -# include -# endif -# define isinf(x) (!finite(x) && !isnan(x)) -# else -RUBY_EXTERN int isinf(double); -# endif -# endif -#endif - -#ifndef isnan -# ifndef HAVE_ISNAN -RUBY_EXTERN int isnan(double); -# endif -#endif - -/* -#ifndef HAVE_MEMCMP -RUBY_EXTERN int memcmp(const void *, const void *, size_t); -#endif -*/ - -#ifndef HAVE_MEMMOVE -RUBY_EXTERN void *memmove(void *, const void *, size_t); -#endif - -/* -#ifndef HAVE_MODF -RUBY_EXTERN double modf(double, double *); -#endif -*/ - -#ifndef HAVE_STRCHR -RUBY_EXTERN char *strchr(const char *, int); -RUBY_EXTERN char *strrchr(const char *, int); -#endif - -#ifndef HAVE_STRERROR -RUBY_EXTERN char *strerror(int); -#endif - -#ifndef HAVE_STRSTR -RUBY_EXTERN char *strstr(const char *, const char *); -#endif - -/* -#ifndef HAVE_STRTOL -RUBY_EXTERN long strtol(const char *, char **, int); -#endif -*/ - -#ifndef HAVE_STRLCPY -RUBY_EXTERN size_t strlcpy(char *, const char*, size_t); -#endif - -#ifndef HAVE_STRLCAT -RUBY_EXTERN size_t strlcat(char *, const char*, size_t); -#endif - -#ifndef HAVE_SIGNBIT -RUBY_EXTERN int signbit(double x); -#endif - -#ifndef HAVE_FFS -RUBY_EXTERN int ffs(int); -#endif - -#ifdef BROKEN_CLOSE -#include -#include -RUBY_EXTERN int ruby_getpeername(int, struct sockaddr *, socklen_t *); -RUBY_EXTERN int ruby_getsockname(int, struct sockaddr *, socklen_t *); -RUBY_EXTERN int ruby_shutdown(int, int); -RUBY_EXTERN int ruby_close(int); -#endif - -#ifndef HAVE_SETPROCTITLE -RUBY_EXTERN void setproctitle(const char *fmt, ...); -#endif - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_MISSING_H */ diff --git a/vendor/ruby/oniguruma.h b/vendor/ruby/oniguruma.h deleted file mode 100644 index 6a26ee4..0000000 --- a/vendor/ruby/oniguruma.h +++ /dev/null @@ -1,835 +0,0 @@ -#ifndef ONIGURUMA_H -#define ONIGURUMA_H -/********************************************************************** - oniguruma.h - Onigmo (Oniguruma-mod) (regular expression library) -**********************************************************************/ -/*- - * Copyright (c) 2002-2009 K.Kosako - * Copyright (c) 2011-2013 K.Takata - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifdef __cplusplus -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#define ONIGURUMA -#define ONIGURUMA_VERSION_MAJOR 5 -#define ONIGURUMA_VERSION_MINOR 13 -#define ONIGURUMA_VERSION_TEENY 5 - -#ifdef __cplusplus -# ifndef HAVE_PROTOTYPES -# define HAVE_PROTOTYPES 1 -# endif -# ifndef HAVE_STDARG_PROTOTYPES -# define HAVE_STDARG_PROTOTYPES 1 -# endif -#endif - -/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */ -#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4 -# ifndef HAVE_STDARG_PROTOTYPES -# define HAVE_STDARG_PROTOTYPES 1 -# endif -#endif - -#ifdef HAVE_STDARG_H -# ifndef HAVE_STDARG_PROTOTYPES -# define HAVE_STDARG_PROTOTYPES 1 -# endif -#endif - -#ifndef P_ -#if defined(__STDC__) || defined(_WIN32) -# define P_(args) args -#else -# define P_(args) () -#endif -#endif - -#ifndef PV_ -#ifdef HAVE_STDARG_PROTOTYPES -# define PV_(args) args -#else -# define PV_(args) () -#endif -#endif - -#ifndef ONIG_EXTERN -#ifdef RUBY_EXTERN -#define ONIG_EXTERN RUBY_EXTERN -#else -#if defined(_WIN32) && !defined(__GNUC__) -#if defined(EXPORT) || defined(RUBY_EXPORT) -#define ONIG_EXTERN extern __declspec(dllexport) -#else -#define ONIG_EXTERN extern __declspec(dllimport) -#endif -#endif -#endif -#endif - -#ifndef ONIG_EXTERN -#define ONIG_EXTERN extern -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#include /* for size_t */ - -/* PART: character encoding */ - -#ifndef ONIG_ESCAPE_UCHAR_COLLISION -#define UChar OnigUChar -#endif - -typedef unsigned char OnigUChar; -typedef unsigned int OnigCodePoint; -typedef unsigned int OnigCtype; -typedef size_t OnigDistance; -typedef ptrdiff_t OnigPosition; - -#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0) - -typedef unsigned int OnigCaseFoldType; /* case fold flag */ - -ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag; - -/* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA (1<<1) */ -/* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH (1<<2) */ -#define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20) -#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30) - -#define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR -#define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag - - -#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3 -#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13 -/* 13 => Unicode:0x1ffc */ - -/* code range */ -#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0]) -#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1] -#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2] - -typedef struct { - int byte_len; /* argument(original) character(s) byte length */ - int code_len; /* number of code */ - OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN]; -} OnigCaseFoldCodeItem; - -typedef struct { - OnigCodePoint esc; - OnigCodePoint anychar; - OnigCodePoint anytime; - OnigCodePoint zero_or_one_time; - OnigCodePoint one_or_more_time; - OnigCodePoint anychar_anytime; -} OnigMetaCharTableType; - -typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg); - -typedef struct OnigEncodingTypeST { - int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, struct OnigEncodingTypeST* enc); - const char* name; - int max_enc_len; - int min_enc_len; - int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); - OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); - int (*code_to_mbclen)(OnigCodePoint code, struct OnigEncodingTypeST* enc); - int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, struct OnigEncodingTypeST* enc); - int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, struct OnigEncodingTypeST* enc); - int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, struct OnigEncodingTypeST* enc); - int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], struct OnigEncodingTypeST* enc); - int (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end); - int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, struct OnigEncodingTypeST* enc); - int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], struct OnigEncodingTypeST* enc); - OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); - int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc); - int ruby_encoding_index; - unsigned int flags; -} OnigEncodingType; - -typedef OnigEncodingType* OnigEncoding; - -ONIG_EXTERN OnigEncodingType OnigEncodingASCII; - -#define ONIG_ENCODING_ASCII (&OnigEncodingASCII) - -#define ONIG_ENCODING_UNDEF ((OnigEncoding )0) - - -/* work size */ -#define ONIGENC_CODE_TO_MBC_MAXLEN 7 -#define ONIGENC_MBC_CASE_FOLD_MAXLEN 18 -/* 18: 6(max-byte) * 3(case-fold chars) */ - -/* character types */ -#define ONIGENC_CTYPE_NEWLINE 0 -#define ONIGENC_CTYPE_ALPHA 1 -#define ONIGENC_CTYPE_BLANK 2 -#define ONIGENC_CTYPE_CNTRL 3 -#define ONIGENC_CTYPE_DIGIT 4 -#define ONIGENC_CTYPE_GRAPH 5 -#define ONIGENC_CTYPE_LOWER 6 -#define ONIGENC_CTYPE_PRINT 7 -#define ONIGENC_CTYPE_PUNCT 8 -#define ONIGENC_CTYPE_SPACE 9 -#define ONIGENC_CTYPE_UPPER 10 -#define ONIGENC_CTYPE_XDIGIT 11 -#define ONIGENC_CTYPE_WORD 12 -#define ONIGENC_CTYPE_ALNUM 13 /* alpha || digit */ -#define ONIGENC_CTYPE_ASCII 14 -#define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII - -/* flags */ -#define ONIGENC_FLAG_NONE 0U -#define ONIGENC_FLAG_UNICODE 1U - -#define onig_enc_len(enc,p,e) ONIGENC_MBC_ENC_LEN(enc, p, e) - -#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF) -#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1) -#define ONIGENC_IS_MBC_HEAD(enc,p,e) (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1) -#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128) -#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128) -#define ONIGENC_IS_MBC_WORD(enc,s,end) \ - ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end)) -#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \ - onigenc_ascii_is_code_ctype( \ - ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc) -#define ONIGENC_IS_UNICODE(enc) ((enc)->flags & ONIGENC_FLAG_UNICODE) - - -#define ONIGENC_NAME(enc) ((enc)->name) - -#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \ - (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc) -#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \ - (enc)->is_allowed_reverse_match(s,end,enc) -#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) \ - (enc)->left_adjust_char_head(start, s, end, enc) -#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \ - (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc) -#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \ - (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc) -#define ONIGENC_STEP_BACK(enc,start,s,end,n) \ - onigenc_step_back((enc),(start),(s),(end),(n)) - -#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n) (n) -#define ONIGENC_MBCLEN_CHARFOUND_P(r) (0 < (r)) -#define ONIGENC_MBCLEN_CHARFOUND_LEN(r) (r) - -#define ONIGENC_CONSTRUCT_MBCLEN_INVALID() (-1) -#define ONIGENC_MBCLEN_INVALID_P(r) ((r) == -1) - -#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n) (-1-(n)) -#define ONIGENC_MBCLEN_NEEDMORE_P(r) ((r) < -1) -#define ONIGENC_MBCLEN_NEEDMORE_LEN(r) (-1-(r)) - -#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e) (enc)->precise_mbc_enc_len(p,e,enc) - -ONIG_EXTERN -int onigenc_mbclen_approximate P_((const OnigUChar* p,const OnigUChar* e, struct OnigEncodingTypeST* enc)); - -#define ONIGENC_MBC_ENC_LEN(enc,p,e) onigenc_mbclen_approximate(p,e,enc) -#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len) -#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc) -#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len) -#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end),enc) -#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end),enc) -#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code,enc) -#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf,enc) -#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \ - (enc)->property_name_to_ctype(enc,p,end) - -#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype,enc) - -#define ONIGENC_IS_CODE_NEWLINE(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE) -#define ONIGENC_IS_CODE_GRAPH(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH) -#define ONIGENC_IS_CODE_PRINT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT) -#define ONIGENC_IS_CODE_ALNUM(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM) -#define ONIGENC_IS_CODE_ALPHA(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA) -#define ONIGENC_IS_CODE_LOWER(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER) -#define ONIGENC_IS_CODE_UPPER(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER) -#define ONIGENC_IS_CODE_CNTRL(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL) -#define ONIGENC_IS_CODE_PUNCT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT) -#define ONIGENC_IS_CODE_SPACE(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE) -#define ONIGENC_IS_CODE_BLANK(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK) -#define ONIGENC_IS_CODE_DIGIT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT) -#define ONIGENC_IS_CODE_XDIGIT(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT) -#define ONIGENC_IS_CODE_WORD(enc,code) \ - ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD) - -#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \ - (enc)->get_ctype_code_range(ctype,sbout,ranges,enc) - -ONIG_EXTERN -OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n)); - - -/* encoding API */ -ONIG_EXTERN -int onigenc_init P_((void)); -ONIG_EXTERN -int onigenc_set_default_encoding P_((OnigEncoding enc)); -ONIG_EXTERN -OnigEncoding onigenc_get_default_encoding P_((void)); -ONIG_EXTERN -void onigenc_set_default_caseconv_table P_((const OnigUChar* table)); -ONIG_EXTERN -OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev)); -ONIG_EXTERN -OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end)); -ONIG_EXTERN -OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end)); -ONIG_EXTERN -OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end)); -ONIG_EXTERN -int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end)); -ONIG_EXTERN -int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p)); -ONIG_EXTERN -int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p)); - - - -/* PART: regular expression */ - -/* config parameters */ -#define ONIG_NREGION 10 -#define ONIG_MAX_BACKREF_NUM 1000 -#define ONIG_MAX_REPEAT_NUM 100000 -#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000 -/* constants */ -#define ONIG_MAX_ERROR_MESSAGE_LEN 90 - -typedef unsigned int OnigOptionType; - -#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE - -/* options */ -#define ONIG_OPTION_NONE 0U -#define ONIG_OPTION_IGNORECASE 1U -#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1) -#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1) -#define ONIG_OPTION_DOTALL ONIG_OPTION_MULTILINE -#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1) -#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1) -#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1) -#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1) -#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1) -#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1) -/* options (search time) */ -#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1) -#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1) -#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1) -/* options (ctype range) */ -#define ONIG_OPTION_ASCII_RANGE (ONIG_OPTION_POSIX_REGION << 1) -#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1) -#define ONIG_OPTION_WORD_BOUND_ALL_RANGE (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1) -/* options (newline) */ -#define ONIG_OPTION_NEWLINE_CRLF (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1) -#define ONIG_OPTION_MAXBIT ONIG_OPTION_NEWLINE_CRLF /* limit */ - -#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt)) -#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt)) -#define ONIG_IS_OPTION_ON(options,option) ((options) & (option)) - -/* syntax */ -typedef struct { - unsigned int op; - unsigned int op2; - unsigned int behavior; - OnigOptionType options; /* default option */ - OnigMetaCharTableType meta_char_table; -} OnigSyntaxType; - -ONIG_EXTERN const OnigSyntaxType OnigSyntaxASIS; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58_NG; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxRuby; -ONIG_EXTERN const OnigSyntaxType OnigSyntaxPython; - -/* predefined syntaxes (see regsyntax.c) */ -#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS) -#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic) -#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended) -#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs) -#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep) -#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex) -#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava) -#define ONIG_SYNTAX_PERL58 (&OnigSyntaxPerl58) -#define ONIG_SYNTAX_PERL58_NG (&OnigSyntaxPerl58_NG) -#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl) -#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) -#define ONIG_SYNTAX_PYTHON (&OnigSyntaxPython) - -/* default syntax */ -ONIG_EXTERN const OnigSyntaxType* OnigDefaultSyntax; -#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax - -/* syntax (operators) */ -#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0) -#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1) /* . */ -#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2) /* * */ -#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3) -#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4) /* + */ -#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5) -#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6) /* ? */ -#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7) -#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8) /* {lower,upper} */ -#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9) /* \{lower,upper\} */ -#define ONIG_SYN_OP_VBAR_ALT (1U<<10) /* | */ -#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11) /* \| */ -#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12) /* (...) */ -#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13) /* \(...\) */ -#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14) /* \A, \Z, \z */ -#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15) /* \G */ -#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16) /* \num */ -#define ONIG_SYN_OP_BRACKET_CC (1U<<17) /* [...] */ -#define ONIG_SYN_OP_ESC_W_WORD (1U<<18) /* \w, \W */ -#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19) /* \<. \> */ -#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20) /* \b, \B */ -#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21) /* \s, \S */ -#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22) /* \d, \D */ -#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23) /* ^, $ */ -#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24) /* [:xxxx:] */ -#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25) /* ??,*?,+?,{n,m}? */ -#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26) /* \n,\r,\t,\a ... */ -#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27) /* \cx */ -#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28) /* \OOO */ -#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29) /* \xHH */ -#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30) /* \x{7HHHHHHH} */ -#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31) /* \o{OOO} */ /* NOTIMPL */ - -#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0) /* \Q...\E */ -#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1) /* (?...) */ -#define ONIG_SYN_OP2_OPTION_PERL (1U<<2) /* (?imsxadlu), (?-imsx), (?^imsxalu) */ -#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3) /* (?imxadu), (?-imx) */ -#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4) /* ?+,*+,++ */ -#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5) /* {n,m}+ */ -#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6) /* [...&&..[..]..] */ -#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7) /* (?...) */ -#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8) /* \k */ -#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9) /* \g, \g */ -#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10) /* (?@..),(?@..) */ -#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11) /* \C-x */ -#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12) /* \M-x */ -#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13) /* \v as VTAB */ -#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14) /* \uHHHH */ -#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15) /* \`, \' */ -#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16) /* \p{...}, \P{...} */ -#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */ -/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */ -#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */ -#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */ -#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK (1U<<21) /* \R as (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) */ -#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22) /* \X as (?>\P{M}\p{M}*) */ -#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE (1U<<23) /* \v, \V -- Perl */ /* NOTIMPL */ -#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24) /* \h, \H -- Perl */ /* NOTIMPL */ -#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<25) /* \K */ -#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF (1U<<26) /* \g{name}, \g{n} */ -#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL (1U<<27) /* (?&name), (?n), (?R), (?0) */ -#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET (1U<<28) /* (?|...) */ /* NOTIMPL */ -#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION (1U<<29) /* (?(cond)yes...|no...) */ -#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30) /* (?P...), (?P=name), (?P>name) -- Python/PCRE */ -#define ONIG_SYN_OP2_OPTION_JAVA (1U<<31) /* (?idmsux), (?-idmsux) */ /* NOTIMPL */ - -/* syntax (behavior) */ -#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31) /* not implemented */ -#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0) /* ?, *, +, {n,m} */ -#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1) /* error or ignore */ -#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2) /* ...)... */ -#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3) /* {??? */ -#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4) /* {,n} => {0,n} */ -#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5) /* /(\1)/,/\1()/ ..*/ -#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6) /* (?<=a|bc) */ -#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7) /* see doc/RE */ -#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?)(?) */ -#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */ -#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10) /* (?)(?)(?&x) */ - -/* syntax (behavior) in char class [...] */ -#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */ -#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21) /* [..\w..] etc.. */ -#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22) -#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23) /* [0-9-a]=[0-9\-a] */ -/* syntax (behavior) warning */ -#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24) /* [,-,] */ -#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25) /* (?:a*)+ */ -#define ONIG_SYN_WARN_CC_DUP (1U<<26) /* [aa] */ - -/* meta character specifiers (onig_set_meta_char()) */ -#define ONIG_META_CHAR_ESCAPE 0 -#define ONIG_META_CHAR_ANYCHAR 1 -#define ONIG_META_CHAR_ANYTIME 2 -#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3 -#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4 -#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5 - -#define ONIG_INEFFECTIVE_META_CHAR 0 - -/* error codes */ -#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000) -/* normal return */ -#define ONIG_NORMAL 0 -#define ONIG_MISMATCH -1 -#define ONIG_NO_SUPPORT_CONFIG -2 - -/* internal error */ -#define ONIGERR_MEMORY -5 -#define ONIGERR_TYPE_BUG -6 -#define ONIGERR_PARSER_BUG -11 -#define ONIGERR_STACK_BUG -12 -#define ONIGERR_UNDEFINED_BYTECODE -13 -#define ONIGERR_UNEXPECTED_BYTECODE -14 -#define ONIGERR_MATCH_STACK_LIMIT_OVER -15 -#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET -21 -#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22 -/* general error */ -#define ONIGERR_INVALID_ARGUMENT -30 -/* syntax error */ -#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100 -#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101 -#define ONIGERR_EMPTY_CHAR_CLASS -102 -#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103 -#define ONIGERR_END_PATTERN_AT_ESCAPE -104 -#define ONIGERR_END_PATTERN_AT_META -105 -#define ONIGERR_END_PATTERN_AT_CONTROL -106 -#define ONIGERR_META_CODE_SYNTAX -108 -#define ONIGERR_CONTROL_CODE_SYNTAX -109 -#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110 -#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111 -#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112 -#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113 -#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114 -#define ONIGERR_NESTED_REPEAT_OPERATOR -115 -#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116 -#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117 -#define ONIGERR_END_PATTERN_IN_GROUP -118 -#define ONIGERR_UNDEFINED_GROUP_OPTION -119 -#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121 -#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122 -#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123 -#define ONIGERR_INVALID_CONDITION_PATTERN -124 -/* values error (syntax error) */ -#define ONIGERR_TOO_BIG_NUMBER -200 -#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201 -#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202 -#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203 -#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204 -#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205 -#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206 -#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207 -#define ONIGERR_INVALID_BACKREF -208 -#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209 -#define ONIGERR_TOO_SHORT_DIGITS -210 -#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212 -#define ONIGERR_EMPTY_GROUP_NAME -214 -#define ONIGERR_INVALID_GROUP_NAME -215 -#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216 -#define ONIGERR_UNDEFINED_NAME_REFERENCE -217 -#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218 -#define ONIGERR_MULTIPLEX_DEFINED_NAME -219 -#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220 -#define ONIGERR_NEVER_ENDING_RECURSION -221 -#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222 -#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223 -#define ONIGERR_INVALID_CODE_POINT_VALUE -400 -#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400 -#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401 -#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402 -#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403 - -/* errors related to thread */ -#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001 - - -/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */ -#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31 -#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \ - ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i]) - -typedef struct OnigCaptureTreeNodeStruct { - int group; /* group number */ - OnigPosition beg; - OnigPosition end; - int allocated; - int num_childs; - struct OnigCaptureTreeNodeStruct** childs; -} OnigCaptureTreeNode; - -/* match result region type */ -struct re_registers { - int allocated; - int num_regs; - OnigPosition* beg; - OnigPosition* end; - /* extended */ - OnigCaptureTreeNode* history_root; /* capture history tree root */ -}; - -/* capture tree traverse */ -#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1 -#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2 -#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \ - ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST ) - - -#define ONIG_REGION_NOTPOS -1 - -typedef struct re_registers OnigRegion; - -typedef struct { - OnigEncoding enc; - OnigUChar* par; - OnigUChar* par_end; -} OnigErrorInfo; - -typedef struct { - int lower; - int upper; -} OnigRepeatRange; - -typedef void (*OnigWarnFunc) P_((const char* s)); -extern void onig_null_warn P_((const char* s)); -#define ONIG_NULL_WARN onig_null_warn - -#define ONIG_CHAR_TABLE_SIZE 256 - -/* regex_t state */ -#define ONIG_STATE_NORMAL 0 -#define ONIG_STATE_SEARCHING 1 -#define ONIG_STATE_COMPILING -1 -#define ONIG_STATE_MODIFY -2 - -#define ONIG_STATE(reg) \ - ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state) - -typedef struct re_pattern_buffer { - /* common members of BBuf(bytes-buffer) */ - unsigned char* p; /* compiled pattern */ - unsigned int used; /* used space for p */ - unsigned int alloc; /* allocated space for p */ - - int state; /* normal, searching, compiling */ - int num_mem; /* used memory(...) num counted from 1 */ - int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */ - int num_null_check; /* OP_NULL_CHECK_START/END id counter */ - int num_comb_exp_check; /* combination explosion check */ - int num_call; /* number of subexp call */ - unsigned int capture_history; /* (?@...) flag (1-31) */ - unsigned int bt_mem_start; /* need backtrack flag */ - unsigned int bt_mem_end; /* need backtrack flag */ - int stack_pop_level; - int repeat_range_alloc; - OnigRepeatRange* repeat_range; - - OnigEncoding enc; - OnigOptionType options; - const OnigSyntaxType* syntax; - OnigCaseFoldType case_fold_flag; - void* name_table; - - /* optimization info (string search, char-map and anchors) */ - int optimize; /* optimize flag */ - int threshold_len; /* search str-length for apply optimize */ - int anchor; /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */ - OnigDistance anchor_dmin; /* (SEMI_)END_BUF anchor distance */ - OnigDistance anchor_dmax; /* (SEMI_)END_BUF anchor distance */ - int sub_anchor; /* start-anchor for exact or map */ - unsigned char *exact; - unsigned char *exact_end; - unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */ - int *int_map; /* BM skip for exact_len > 255 */ - int *int_map_backward; /* BM skip for backward search */ - OnigDistance dmin; /* min-distance of exact or map */ - OnigDistance dmax; /* max-distance of exact or map */ - - /* regex_t link chain */ - struct re_pattern_buffer* chain; /* escape compile-conflict */ -} OnigRegexType; - -typedef OnigRegexType* OnigRegex; - -#ifndef ONIG_ESCAPE_REGEX_T_COLLISION - typedef OnigRegexType regex_t; -#endif - - -typedef struct { - int num_of_elements; - OnigEncoding pattern_enc; - OnigEncoding target_enc; - OnigSyntaxType* syntax; - OnigOptionType option; - OnigCaseFoldType case_fold_flag; -} OnigCompileInfo; - -/* Oniguruma Native API */ -ONIG_EXTERN -int onig_init P_((void)); -ONIG_EXTERN -int onig_error_code_to_str PV_((OnigUChar* s, OnigPosition err_code, ...)); -ONIG_EXTERN -void onig_set_warn_func P_((OnigWarnFunc f)); -ONIG_EXTERN -void onig_set_verb_warn_func P_((OnigWarnFunc f)); -ONIG_EXTERN -int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo)); -ONIG_EXTERN -int onig_reg_init P_((OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax)); -ONIG_EXTERN -int onig_new_without_alloc P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); -ONIG_EXTERN -int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); -ONIG_EXTERN -void onig_free P_((OnigRegex)); -ONIG_EXTERN -void onig_free_body P_((OnigRegex)); -ONIG_EXTERN -int onig_recompile P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); -ONIG_EXTERN -int onig_recompile_deluxe P_((OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); -ONIG_EXTERN -OnigPosition onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option)); -ONIG_EXTERN -OnigPosition onig_search_gpos P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option)); -ONIG_EXTERN -OnigPosition onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option)); -ONIG_EXTERN -OnigRegion* onig_region_new P_((void)); -ONIG_EXTERN -void onig_region_init P_((OnigRegion* region)); -ONIG_EXTERN -void onig_region_free P_((OnigRegion* region, int free_self)); -ONIG_EXTERN -void onig_region_copy P_((OnigRegion* to, OnigRegion* from)); -ONIG_EXTERN -void onig_region_clear P_((OnigRegion* region)); -ONIG_EXTERN -int onig_region_resize P_((OnigRegion* region, int n)); -ONIG_EXTERN -int onig_region_set P_((OnigRegion* region, int at, int beg, int end)); -ONIG_EXTERN -int onig_name_to_group_numbers P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums)); -ONIG_EXTERN -int onig_name_to_backref_number P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region)); -ONIG_EXTERN -int onig_foreach_name P_((OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg)); -ONIG_EXTERN -int onig_number_of_names P_((OnigRegex reg)); -ONIG_EXTERN -int onig_number_of_captures P_((OnigRegex reg)); -ONIG_EXTERN -int onig_number_of_capture_histories P_((OnigRegex reg)); -ONIG_EXTERN -OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region)); -ONIG_EXTERN -int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg)); -ONIG_EXTERN -int onig_noname_group_capture_is_active P_((OnigRegex reg)); -ONIG_EXTERN -OnigEncoding onig_get_encoding P_((OnigRegex reg)); -ONIG_EXTERN -OnigOptionType onig_get_options P_((OnigRegex reg)); -ONIG_EXTERN -OnigCaseFoldType onig_get_case_fold_flag P_((OnigRegex reg)); -ONIG_EXTERN -const OnigSyntaxType* onig_get_syntax P_((OnigRegex reg)); -ONIG_EXTERN -int onig_set_default_syntax P_((const OnigSyntaxType* syntax)); -ONIG_EXTERN -void onig_copy_syntax P_((OnigSyntaxType* to, const OnigSyntaxType* from)); -ONIG_EXTERN -unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax)); -ONIG_EXTERN -unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax)); -ONIG_EXTERN -unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax)); -ONIG_EXTERN -OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax)); -ONIG_EXTERN -void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op)); -ONIG_EXTERN -void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2)); -ONIG_EXTERN -void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior)); -ONIG_EXTERN -void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options)); -ONIG_EXTERN -int onig_set_meta_char P_((OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code)); -ONIG_EXTERN -void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from)); -ONIG_EXTERN -OnigCaseFoldType onig_get_default_case_fold_flag P_((void)); -ONIG_EXTERN -int onig_set_default_case_fold_flag P_((OnigCaseFoldType case_fold_flag)); -ONIG_EXTERN -unsigned int onig_get_match_stack_limit_size P_((void)); -ONIG_EXTERN -int onig_set_match_stack_limit_size P_((unsigned int size)); -ONIG_EXTERN -int onig_end P_((void)); -ONIG_EXTERN -const char* onig_version P_((void)); -ONIG_EXTERN -const char* onig_copyright P_((void)); - -RUBY_SYMBOL_EXPORT_END - -#ifdef __cplusplus -#if 0 -{ /* satisfy cc-mode */ -#endif -} -#endif - -#endif /* ONIGURUMA_H */ diff --git a/vendor/ruby/re.h b/vendor/ruby/re.h deleted file mode 100644 index af6074f..0000000 --- a/vendor/ruby/re.h +++ /dev/null @@ -1,71 +0,0 @@ -/********************************************************************** - - re.h - - - $Author: nobu $ - created at: Thu Sep 30 14:18:32 JST 1993 - - Copyright (C) 1993-2007 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_RE_H -#define RUBY_RE_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include -#include - -#include "ruby/regex.h" - -RUBY_SYMBOL_EXPORT_BEGIN - -typedef struct re_pattern_buffer Regexp; - -struct rmatch_offset { - long beg; - long end; -}; - -struct rmatch { - struct re_registers regs; - - int char_offset_updated; - int char_offset_num_allocated; - struct rmatch_offset *char_offset; -}; - -struct RMatch { - struct RBasic basic; - VALUE str; - struct rmatch *rmatch; - VALUE regexp; /* RRegexp */ -}; - -#define RMATCH(obj) (R_CAST(RMatch)(obj)) -#define RMATCH_REGS(obj) (&(R_CAST(RMatch)(obj))->rmatch->regs) - -VALUE rb_reg_regcomp(VALUE); -long rb_reg_search(VALUE, VALUE, long, int); -VALUE rb_reg_regsub(VALUE, VALUE, struct re_registers *, VALUE); -long rb_reg_adjust_startpos(VALUE, VALUE, long, int); -void rb_match_busy(VALUE); -VALUE rb_reg_quote(VALUE); -regex_t *rb_reg_prepare_re(VALUE re, VALUE str); - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_RE_H */ diff --git a/vendor/ruby/regex.h b/vendor/ruby/regex.h deleted file mode 100644 index 5ccc0aa..0000000 --- a/vendor/ruby/regex.h +++ /dev/null @@ -1,46 +0,0 @@ -/********************************************************************** - - regex.h - - - $Author: nobu $ - - Copyright (C) 1993-2007 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef ONIGURUMA_REGEX_H -#define ONIGURUMA_REGEX_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#ifdef RUBY -#include "ruby/oniguruma.h" -#else -#include "oniguruma.h" -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#ifndef ONIG_RUBY_M17N - -ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding; - -#define mbclen(p,e,enc) rb_enc_mbclen((p),(e),(enc)) - -#endif /* ifndef ONIG_RUBY_M17N */ - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* ONIGURUMA_REGEX_H */ diff --git a/vendor/ruby/ruby.h b/vendor/ruby/ruby.h deleted file mode 100644 index 10ac202..0000000 --- a/vendor/ruby/ruby.h +++ /dev/null @@ -1,1872 +0,0 @@ -/********************************************************************** - - ruby/ruby.h - - - $Author: ko1 $ - created at: Thu Jun 10 14:26:32 JST 1993 - - Copyright (C) 1993-2008 Yukihiro Matsumoto - Copyright (C) 2000 Network Applied Communication Laboratory, Inc. - Copyright (C) 2000 Information-technology Promotion Agency, Japan - -**********************************************************************/ - -#ifndef RUBY_RUBY_H -#define RUBY_RUBY_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/config.h" -#ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H -#endif - -#include "defines.h" - -#define NORETURN_STYLE_NEW 1 -#ifndef NORETURN -# define NORETURN(x) x -#endif -#ifndef DEPRECATED -# define DEPRECATED(x) x -#endif -#ifndef NOINLINE -# define NOINLINE(x) x -#endif -#ifndef UNREACHABLE -# define UNREACHABLE /* unreachable */ -#endif - -#ifdef __GNUC__ -#define PRINTF_ARGS(decl, string_index, first_to_check) \ - decl __attribute__((format(printf, string_index, first_to_check))) -#else -#define PRINTF_ARGS(decl, string_index, first_to_check) decl -#endif - -#ifdef HAVE_INTRINSICS_H -# include -#endif - -#include - -RUBY_SYMBOL_EXPORT_BEGIN - -/* Make alloca work the best possible way. */ -#ifdef __GNUC__ -# ifndef atarist -# ifndef alloca -# define alloca __builtin_alloca -# endif -# endif /* atarist */ -#else -# ifdef HAVE_ALLOCA_H -# include -# else -# ifdef _AIX -#pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -void *alloca(); -# endif -# endif /* AIX */ -# endif /* HAVE_ALLOCA_H */ -#endif /* __GNUC__ */ - -#if defined HAVE_UINTPTR_T && 0 -typedef uintptr_t VALUE; -typedef uintptr_t ID; -# define SIGNED_VALUE intptr_t -# define SIZEOF_VALUE SIZEOF_UINTPTR_T -# undef PRI_VALUE_PREFIX -#elif SIZEOF_LONG == SIZEOF_VOIDP -typedef unsigned long VALUE; -typedef unsigned long ID; -# define SIGNED_VALUE long -# define SIZEOF_VALUE SIZEOF_LONG -# define PRI_VALUE_PREFIX "l" -#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP -typedef unsigned LONG_LONG VALUE; -typedef unsigned LONG_LONG ID; -# define SIGNED_VALUE LONG_LONG -# define LONG_LONG_VALUE 1 -# define SIZEOF_VALUE SIZEOF_LONG_LONG -# define PRI_VALUE_PREFIX PRI_LL_PREFIX -#else -# error ---->> ruby requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<---- -#endif - -typedef char ruby_check_sizeof_int[SIZEOF_INT == sizeof(int) ? 1 : -1]; -typedef char ruby_check_sizeof_long[SIZEOF_LONG == sizeof(long) ? 1 : -1]; -#ifdef HAVE_LONG_LONG -typedef char ruby_check_sizeof_long_long[SIZEOF_LONG_LONG == sizeof(LONG_LONG) ? 1 : -1]; -#endif -typedef char ruby_check_sizeof_voidp[SIZEOF_VOIDP == sizeof(void*) ? 1 : -1]; - -#ifndef PRI_INT_PREFIX -#define PRI_INT_PREFIX "" -#endif -#ifndef PRI_LONG_PREFIX -#define PRI_LONG_PREFIX "l" -#endif - -#if SIZEOF_LONG == 8 -#define PRI_64_PREFIX PRI_LONG_PREFIX -#elif SIZEOF_LONG_LONG == 8 -#define PRI_64_PREFIX PRI_LL_PREFIX -#endif - -#if defined PRIdPTR && !defined PRI_VALUE_PREFIX -#define PRIdVALUE PRIdPTR -#define PRIoVALUE PRIoPTR -#define PRIuVALUE PRIuPTR -#define PRIxVALUE PRIxPTR -#define PRIXVALUE PRIXPTR -#define PRIsVALUE PRIiPTR -#else -#define PRIdVALUE PRI_VALUE_PREFIX"d" -#define PRIoVALUE PRI_VALUE_PREFIX"o" -#define PRIuVALUE PRI_VALUE_PREFIX"u" -#define PRIxVALUE PRI_VALUE_PREFIX"x" -#define PRIXVALUE PRI_VALUE_PREFIX"X" -#define PRIsVALUE PRI_VALUE_PREFIX"i" -#endif -#ifndef PRI_VALUE_PREFIX -# define PRI_VALUE_PREFIX "" -#endif - -#ifndef PRI_TIMET_PREFIX -# if SIZEOF_TIME_T == SIZEOF_INT -# define PRI_TIMET_PREFIX -# elif SIZEOF_TIME_T == SIZEOF_LONG -# define PRI_TIMET_PREFIX "l" -# elif SIZEOF_TIME_T == SIZEOF_LONG_LONG -# define PRI_TIMET_PREFIX PRI_LL_PREFIX -# endif -#endif - -#if defined PRI_PTRDIFF_PREFIX -#elif SIZEOF_PTRDIFF_T == SIZEOF_INT -# define PRI_PTRDIFF_PREFIX "" -#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG -# define PRI_PTRDIFF_PREFIX "l" -#elif SIZEOF_PTRDIFF_T == SIZEOF_LONG_LONG -# define PRI_PTRDIFF_PREFIX PRI_LL_PREFIX -#endif -#define PRIdPTRDIFF PRI_PTRDIFF_PREFIX"d" -#define PRIiPTRDIFF PRI_PTRDIFF_PREFIX"i" -#define PRIoPTRDIFF PRI_PTRDIFF_PREFIX"o" -#define PRIuPTRDIFF PRI_PTRDIFF_PREFIX"u" -#define PRIxPTRDIFF PRI_PTRDIFF_PREFIX"x" -#define PRIXPTRDIFF PRI_PTRDIFF_PREFIX"X" - -#if defined PRI_SIZE_PREFIX -#elif SIZEOF_SIZE_T == SIZEOF_INT -# define PRI_SIZE_PREFIX "" -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define PRI_SIZE_PREFIX "l" -#elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG -# define PRI_SIZE_PREFIX PRI_LL_PREFIX -#endif -#define PRIdSIZE PRI_SIZE_PREFIX"d" -#define PRIiSIZE PRI_SIZE_PREFIX"i" -#define PRIoSIZE PRI_SIZE_PREFIX"o" -#define PRIuSIZE PRI_SIZE_PREFIX"u" -#define PRIxSIZE PRI_SIZE_PREFIX"x" -#define PRIXSIZE PRI_SIZE_PREFIX"X" - -#ifdef __STDC__ -# include -#else -# ifndef LONG_MAX -# ifdef HAVE_LIMITS_H -# include -# else - /* assuming 32bit(2's complement) long */ -# define LONG_MAX 2147483647 -# endif -# endif -# ifndef LONG_MIN -# define LONG_MIN (-LONG_MAX-1) -# endif -# ifndef CHAR_BIT -# define CHAR_BIT 8 -# endif -#endif - -#ifdef HAVE_LONG_LONG -# ifndef LLONG_MAX -# ifdef LONG_LONG_MAX -# define LLONG_MAX LONG_LONG_MAX -# else -# ifdef _I64_MAX -# define LLONG_MAX _I64_MAX -# else - /* assuming 64bit(2's complement) long long */ -# define LLONG_MAX 9223372036854775807LL -# endif -# endif -# endif -# ifndef LLONG_MIN -# ifdef LONG_LONG_MIN -# define LLONG_MIN LONG_LONG_MIN -# else -# ifdef _I64_MIN -# define LLONG_MIN _I64_MIN -# else -# define LLONG_MIN (-LLONG_MAX-1) -# endif -# endif -# endif -#endif - -#define FIXNUM_MAX (LONG_MAX>>1) -#define FIXNUM_MIN RSHIFT((long)LONG_MIN,1) - -#define INT2FIX(i) ((VALUE)(((SIGNED_VALUE)(i))<<1 | FIXNUM_FLAG)) -#define LONG2FIX(i) INT2FIX(i) -#define rb_fix_new(v) INT2FIX(v) -VALUE rb_int2inum(SIGNED_VALUE); - -#define rb_int_new(v) rb_int2inum(v) -VALUE rb_uint2inum(VALUE); - -#define rb_uint_new(v) rb_uint2inum(v) - -#ifdef HAVE_LONG_LONG -VALUE rb_ll2inum(LONG_LONG); -#define LL2NUM(v) rb_ll2inum(v) -VALUE rb_ull2inum(unsigned LONG_LONG); -#define ULL2NUM(v) rb_ull2inum(v) -#endif - -#ifndef OFFT2NUM -#if SIZEOF_OFF_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) -# define OFFT2NUM(v) LL2NUM(v) -#elif SIZEOF_OFF_T == SIZEOF_LONG -# define OFFT2NUM(v) LONG2NUM(v) -#else -# define OFFT2NUM(v) INT2NUM(v) -#endif -#endif - -#if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) -# define SIZET2NUM(v) ULL2NUM(v) -# define SSIZET2NUM(v) LL2NUM(v) -#elif SIZEOF_SIZE_T == SIZEOF_LONG -# define SIZET2NUM(v) ULONG2NUM(v) -# define SSIZET2NUM(v) LONG2NUM(v) -#else -# define SIZET2NUM(v) UINT2NUM(v) -# define SSIZET2NUM(v) INT2NUM(v) -#endif - -#ifndef SIZE_MAX -# if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) -# define SIZE_MAX ULLONG_MAX -# define SIZE_MIN ULLONG_MIN -# elif SIZEOF_SIZE_T == SIZEOF_LONG -# define SIZE_MAX ULONG_MAX -# define SIZE_MIN ULONG_MIN -# elif SIZEOF_SIZE_T == SIZEOF_INT -# define SIZE_MAX UINT_MAX -# define SIZE_MIN UINT_MIN -# else -# define SIZE_MAX USHRT_MAX -# define SIZE_MIN USHRT_MIN -# endif -#endif - -#ifndef SSIZE_MAX -# if SIZEOF_SIZE_T > SIZEOF_LONG && defined(HAVE_LONG_LONG) -# define SSIZE_MAX LLONG_MAX -# define SSIZE_MIN LLONG_MIN -# elif SIZEOF_SIZE_T == SIZEOF_LONG -# define SSIZE_MAX LONG_MAX -# define SSIZE_MIN LONG_MIN -# elif SIZEOF_SIZE_T == SIZEOF_INT -# define SSIZE_MAX INT_MAX -# define SSIZE_MIN INT_MIN -# else -# define SSIZE_MAX SHRT_MAX -# define SSIZE_MIN SHRT_MIN -# endif -#endif - -#if SIZEOF_INT < SIZEOF_VALUE -NORETURN(void rb_out_of_int(SIGNED_VALUE num)); -#endif - -#if SIZEOF_INT < SIZEOF_LONG -static inline int -rb_long2int_inline(long n) -{ - int i = (int)n; - if ((long)i != n) - rb_out_of_int(n); - - return i; -} -#define rb_long2int(n) rb_long2int_inline(n) -#else -#define rb_long2int(n) ((int)(n)) -#endif - -#ifndef PIDT2NUM -#define PIDT2NUM(v) LONG2NUM(v) -#endif -#ifndef NUM2PIDT -#define NUM2PIDT(v) NUM2LONG(v) -#endif -#ifndef UIDT2NUM -#define UIDT2NUM(v) LONG2NUM(v) -#endif -#ifndef NUM2UIDT -#define NUM2UIDT(v) NUM2LONG(v) -#endif -#ifndef GIDT2NUM -#define GIDT2NUM(v) LONG2NUM(v) -#endif -#ifndef NUM2GIDT -#define NUM2GIDT(v) NUM2LONG(v) -#endif -#ifndef NUM2MODET -#define NUM2MODET(v) NUM2INT(v) -#endif -#ifndef MODET2NUM -#define MODET2NUM(v) INT2NUM(v) -#endif - -#define FIX2LONG(x) ((long)RSHIFT((SIGNED_VALUE)(x),1)) -#define FIX2ULONG(x) ((unsigned long)FIX2LONG(x)) -#define FIXNUM_P(f) (((int)(SIGNED_VALUE)(f))&FIXNUM_FLAG) -#define POSFIXABLE(f) ((f) < FIXNUM_MAX+1) -#define NEGFIXABLE(f) ((f) >= FIXNUM_MIN) -#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f)) - -#define IMMEDIATE_P(x) ((VALUE)(x) & IMMEDIATE_MASK) - -#define SYMBOL_P(x) (((VALUE)(x)&~((~(VALUE)0)<= SIZEOF_DOUBLE -#define USE_FLONUM 1 -#else -#define USE_FLONUM 0 -#endif -#endif - -#if USE_FLONUM -#define FLONUM_P(x) ((((int)(SIGNED_VALUE)(x))&FLONUM_MASK) == FLONUM_FLAG) -#else -#define FLONUM_P(x) 0 -#endif - -/* Module#methods, #singleton_methods and so on return Symbols */ -#define USE_SYMBOL_AS_METHOD_NAME 1 - -/* -!USE_FLONUM -------------------------- -...xxxx xxx1 Fixnum -...0000 1110 Symbol -...0000 0000 Qfalse -...0000 0010 Qtrue -...0000 0100 Qnil -...0000 0110 Qundef - -USE_FLONUM -------------------------- -...xxxx xxx1 Fixnum -...xxxx xx10 Flonum -...0000 1100 Symbol -...0000 0000 Qfalse 0x00 = 0 -...0000 1000 Qnil 0x08 = 8 -...0001 0100 Qtrue 0x14 = 20 -...0011 0100 Qundef 0x34 = 52 - */ - -/* special constants - i.e. non-zero and non-fixnum constants */ -enum ruby_special_consts { -#if USE_FLONUM - RUBY_Qfalse = 0x00, - RUBY_Qtrue = 0x14, - RUBY_Qnil = 0x08, - RUBY_Qundef = 0x34, - - RUBY_IMMEDIATE_MASK = 0x07, - RUBY_FIXNUM_FLAG = 0x01, - RUBY_FLONUM_MASK = 0x03, - RUBY_FLONUM_FLAG = 0x02, - RUBY_SYMBOL_FLAG = 0x0c, - RUBY_SPECIAL_SHIFT = 8 -#else - RUBY_Qfalse = 0, - RUBY_Qtrue = 2, - RUBY_Qnil = 4, - RUBY_Qundef = 6, - - RUBY_IMMEDIATE_MASK = 0x03, - RUBY_FIXNUM_FLAG = 0x01, - RUBY_FLONUM_MASK = 0x00, /* any values ANDed with FLONUM_MASK cannot be FLONUM_FLAG */ - RUBY_FLONUM_FLAG = 0x02, - RUBY_SYMBOL_FLAG = 0x0e, - RUBY_SPECIAL_SHIFT = 8 -#endif -}; - -#define Qfalse ((VALUE)RUBY_Qfalse) -#define Qtrue ((VALUE)RUBY_Qtrue) -#define Qnil ((VALUE)RUBY_Qnil) -#define Qundef ((VALUE)RUBY_Qundef) /* undefined value for placeholder */ -#define IMMEDIATE_MASK RUBY_IMMEDIATE_MASK -#define FIXNUM_FLAG RUBY_FIXNUM_FLAG -#if USE_FLONUM -#define FLONUM_MASK RUBY_FLONUM_MASK -#define FLONUM_FLAG RUBY_FLONUM_FLAG -#endif -#define SYMBOL_FLAG RUBY_SYMBOL_FLAG - -#define RTEST(v) !(((VALUE)(v) & ~Qnil) == 0) -#define NIL_P(v) !((VALUE)(v) != Qnil) - -#define CLASS_OF(v) rb_class_of((VALUE)(v)) - -enum ruby_value_type { - RUBY_T_NONE = 0x00, - - RUBY_T_OBJECT = 0x01, - RUBY_T_CLASS = 0x02, - RUBY_T_MODULE = 0x03, - RUBY_T_FLOAT = 0x04, - RUBY_T_STRING = 0x05, - RUBY_T_REGEXP = 0x06, - RUBY_T_ARRAY = 0x07, - RUBY_T_HASH = 0x08, - RUBY_T_STRUCT = 0x09, - RUBY_T_BIGNUM = 0x0a, - RUBY_T_FILE = 0x0b, - RUBY_T_DATA = 0x0c, - RUBY_T_MATCH = 0x0d, - RUBY_T_COMPLEX = 0x0e, - RUBY_T_RATIONAL = 0x0f, - - RUBY_T_NIL = 0x11, - RUBY_T_TRUE = 0x12, - RUBY_T_FALSE = 0x13, - RUBY_T_SYMBOL = 0x14, - RUBY_T_FIXNUM = 0x15, - - RUBY_T_UNDEF = 0x1b, - RUBY_T_NODE = 0x1c, - RUBY_T_ICLASS = 0x1d, - RUBY_T_ZOMBIE = 0x1e, - - RUBY_T_MASK = 0x1f -}; - -#define T_NONE RUBY_T_NONE -#define T_NIL RUBY_T_NIL -#define T_OBJECT RUBY_T_OBJECT -#define T_CLASS RUBY_T_CLASS -#define T_ICLASS RUBY_T_ICLASS -#define T_MODULE RUBY_T_MODULE -#define T_FLOAT RUBY_T_FLOAT -#define T_STRING RUBY_T_STRING -#define T_REGEXP RUBY_T_REGEXP -#define T_ARRAY RUBY_T_ARRAY -#define T_HASH RUBY_T_HASH -#define T_STRUCT RUBY_T_STRUCT -#define T_BIGNUM RUBY_T_BIGNUM -#define T_FILE RUBY_T_FILE -#define T_FIXNUM RUBY_T_FIXNUM -#define T_TRUE RUBY_T_TRUE -#define T_FALSE RUBY_T_FALSE -#define T_DATA RUBY_T_DATA -#define T_MATCH RUBY_T_MATCH -#define T_SYMBOL RUBY_T_SYMBOL -#define T_RATIONAL RUBY_T_RATIONAL -#define T_COMPLEX RUBY_T_COMPLEX -#define T_UNDEF RUBY_T_UNDEF -#define T_NODE RUBY_T_NODE -#define T_ZOMBIE RUBY_T_ZOMBIE -#define T_MASK RUBY_T_MASK - -#define BUILTIN_TYPE(x) (int)(((struct RBasic*)(x))->flags & T_MASK) - -static inline int rb_type(VALUE obj); -#define TYPE(x) rb_type((VALUE)(x)) - -/* RB_GC_GUARD_PTR() is an intermediate macro, and has no effect by - * itself. don't use it directly */ -#ifdef __GNUC__ -#define RB_GC_GUARD_PTR(ptr) \ - __extension__ ({volatile VALUE *rb_gc_guarded_ptr = (ptr); rb_gc_guarded_ptr;}) -#else -#ifdef _MSC_VER -#pragma optimize("", off) -static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr;} -#pragma optimize("", on) -#else -volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr); -#define HAVE_RB_GC_GUARDED_PTR 1 -#endif -#define RB_GC_GUARD_PTR(ptr) rb_gc_guarded_ptr(ptr) -#endif -#define RB_GC_GUARD(v) (*RB_GC_GUARD_PTR(&(v))) - -#ifdef __GNUC__ -#define RB_UNUSED_VAR(x) x __attribute__ ((unused)) -#else -#define RB_UNUSED_VAR(x) x -#endif - -void rb_check_type(VALUE,int); -#define Check_Type(v,t) rb_check_type((VALUE)(v),(t)) - -VALUE rb_str_to_str(VALUE); -VALUE rb_string_value(volatile VALUE*); -char *rb_string_value_ptr(volatile VALUE*); -char *rb_string_value_cstr(volatile VALUE*); - -#define StringValue(v) rb_string_value(&(v)) -#define StringValuePtr(v) rb_string_value_ptr(&(v)) -#define StringValueCStr(v) rb_string_value_cstr(&(v)) - -void rb_check_safe_obj(VALUE); -DEPRECATED(void rb_check_safe_str(VALUE)); -#define SafeStringValue(v) do {\ - StringValue(v);\ - rb_check_safe_obj(v);\ -} while (0) -/* obsolete macro - use SafeStringValue(v) */ -#define Check_SafeStr(v) rb_check_safe_str((VALUE)(v)) - -VALUE rb_str_export(VALUE); -#define ExportStringValue(v) do {\ - SafeStringValue(v);\ - (v) = rb_str_export(v);\ -} while (0) -VALUE rb_str_export_locale(VALUE); - -VALUE rb_get_path(VALUE); -#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v)) - -VALUE rb_get_path_no_checksafe(VALUE); -#define FilePathStringValue(v) ((v) = rb_get_path_no_checksafe(v)) - -#define RUBY_SAFE_LEVEL_MAX 3 -void rb_secure(int); -int rb_safe_level(void); -void rb_set_safe_level(int); -#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) -int ruby_safe_level_4_error(void) __attribute__((error("$SAFE=4 is obsolete"))); -int ruby_safe_level_4_warning(void) __attribute__((warning("$SAFE=4 is obsolete"))); -# ifdef RUBY_EXPORT -# define ruby_safe_level_4_warning() ruby_safe_level_4_error() -# endif -#define RUBY_SAFE_LEVEL_INVALID_P(level) \ - __extension__(__builtin_constant_p(level) && \ - ((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level))) -#define RUBY_SAFE_LEVEL_CHECK(level, type) \ - (RUBY_SAFE_LEVEL_INVALID_P(level) ? ruby_safe_level_4_##type() : (level)) -#define rb_secure(level) rb_secure(RUBY_SAFE_LEVEL_CHECK(level, warning)) -#define rb_set_safe_level(level) rb_set_safe_level(RUBY_SAFE_LEVEL_CHECK(level, error)) -#endif -void rb_set_safe_level_force(int); -void rb_secure_update(VALUE); -NORETURN(void rb_insecure_operation(void)); - -VALUE rb_errinfo(void); -void rb_set_errinfo(VALUE); - -SIGNED_VALUE rb_num2long(VALUE); -VALUE rb_num2ulong(VALUE); -static inline long -rb_num2long_inline(VALUE x) -{ - if (FIXNUM_P(x)) - return FIX2LONG(x); - else - return (long)rb_num2long(x); -} -#define NUM2LONG(x) rb_num2long_inline(x) -static inline unsigned long -rb_num2ulong_inline(VALUE x) -{ - if (FIXNUM_P(x)) - return (unsigned long)FIX2LONG(x); - else - return (unsigned long)rb_num2ulong(x); -} -#define NUM2ULONG(x) rb_num2ulong_inline(x) -#if SIZEOF_INT < SIZEOF_LONG -long rb_num2int(VALUE); -long rb_fix2int(VALUE); -#define FIX2INT(x) ((int)rb_fix2int((VALUE)(x))) - -static inline int -rb_num2int_inline(VALUE x) -{ - if (FIXNUM_P(x)) - return FIX2INT(x); - else - return (int)rb_num2int(x); -} -#define NUM2INT(x) rb_num2int_inline(x) - -unsigned long rb_num2uint(VALUE); -#define NUM2UINT(x) ((unsigned int)rb_num2uint(x)) -unsigned long rb_fix2uint(VALUE); -#define FIX2UINT(x) ((unsigned int)rb_fix2uint(x)) -#else /* SIZEOF_INT < SIZEOF_LONG */ -#define NUM2INT(x) ((int)NUM2LONG(x)) -#define NUM2UINT(x) ((unsigned int)NUM2ULONG(x)) -#define FIX2INT(x) ((int)FIX2LONG(x)) -#define FIX2UINT(x) ((unsigned int)FIX2ULONG(x)) -#endif /* SIZEOF_INT < SIZEOF_LONG */ - -short rb_num2short(VALUE); -unsigned short rb_num2ushort(VALUE); -short rb_fix2short(VALUE); -unsigned short rb_fix2ushort(VALUE); -#define FIX2SHORT(x) (rb_fix2short((VALUE)(x))) -static inline short -rb_num2short_inline(VALUE x) -{ - if (FIXNUM_P(x)) - return FIX2SHORT(x); - else - return rb_num2short(x); -} - -#define NUM2SHORT(x) rb_num2short_inline(x) -#define NUM2USHORT(x) rb_num2ushort(x) - -#ifdef HAVE_LONG_LONG -LONG_LONG rb_num2ll(VALUE); -unsigned LONG_LONG rb_num2ull(VALUE); -static inline LONG_LONG -rb_num2ll_inline(VALUE x) -{ - if (FIXNUM_P(x)) - return FIX2LONG(x); - else - return rb_num2ll(x); -} -# define NUM2LL(x) rb_num2ll_inline(x) -# define NUM2ULL(x) rb_num2ull(x) -#endif - -#if !defined(NUM2OFFT) -# if defined(HAVE_LONG_LONG) && SIZEOF_OFF_T > SIZEOF_LONG -# define NUM2OFFT(x) ((off_t)NUM2LL(x)) -# else -# define NUM2OFFT(x) NUM2LONG(x) -# endif -#endif - -#if defined(HAVE_LONG_LONG) && SIZEOF_SIZE_T > SIZEOF_LONG -# define NUM2SIZET(x) ((size_t)NUM2ULL(x)) -# define NUM2SSIZET(x) ((ssize_t)NUM2LL(x)) -#else -# define NUM2SIZET(x) NUM2ULONG(x) -# define NUM2SSIZET(x) NUM2LONG(x) -#endif - -double rb_num2dbl(VALUE); -#define NUM2DBL(x) rb_num2dbl((VALUE)(x)) - -VALUE rb_uint2big(VALUE); -VALUE rb_int2big(SIGNED_VALUE); - -VALUE rb_newobj(void); -VALUE rb_newobj_of(VALUE, VALUE); -VALUE rb_obj_setup(VALUE obj, VALUE klass, VALUE type); -#define NEWOBJ(obj,type) type *(obj) = (type*)rb_newobj() -#define NEWOBJ_OF(obj,type,klass,flags) type *(obj) = (type*)rb_newobj_of(klass, flags) -#define OBJSETUP(obj,c,t) rb_obj_setup(obj, c, t) /* use NEWOBJ_OF instead of NEWOBJ()+OBJSETUP() */ -#define CLONESETUP(clone,obj) do {\ - OBJSETUP((clone),rb_singleton_class_clone((VALUE)(obj)),RBASIC(obj)->flags);\ - rb_singleton_class_attached(RBASIC(clone)->klass, (VALUE)(clone));\ - if (FL_TEST((obj), FL_EXIVAR)) rb_copy_generic_ivar((VALUE)(clone),(VALUE)(obj));\ -} while (0) -#define DUPSETUP(dup,obj) do {\ - OBJSETUP((dup),rb_obj_class(obj), (RBASIC(obj)->flags)&(T_MASK|FL_EXIVAR|FL_TAINT)); \ - if (FL_TEST((obj), FL_EXIVAR)) rb_copy_generic_ivar((VALUE)(dup),(VALUE)(obj));\ -} while (0) - -#ifndef USE_RGENGC -#define USE_RGENGC 1 -#endif - -#ifndef RGENGC_WB_PROTECTED_ARRAY -#define RGENGC_WB_PROTECTED_ARRAY 1 -#endif -#ifndef RGENGC_WB_PROTECTED_HASH -#define RGENGC_WB_PROTECTED_HASH 1 -#endif -#ifndef RGENGC_WB_PROTECTED_STRUCT -#define RGENGC_WB_PROTECTED_STRUCT 1 -#endif -#ifndef RGENGC_WB_PROTECTED_STRING -#define RGENGC_WB_PROTECTED_STRING 1 -#endif -#ifndef RGENGC_WB_PROTECTED_OBJECT -#define RGENGC_WB_PROTECTED_OBJECT 1 -#endif -#ifndef RGENGC_WB_PROTECTED_REGEXP -#define RGENGC_WB_PROTECTED_REGEXP 1 -#endif -#ifndef RGENGC_WB_PROTECTED_CLASS -#define RGENGC_WB_PROTECTED_CLASS 1 -#endif -#ifndef RGENGC_WB_PROTECTED_FLOAT -#define RGENGC_WB_PROTECTED_FLOAT 1 -#endif -#ifndef RGENGC_WB_PROTECTED_COMPLEX -#define RGENGC_WB_PROTECTED_COMPLEX 1 -#endif -#ifndef RGENGC_WB_PROTECTED_RATIONAL -#define RGENGC_WB_PROTECTED_RATIONAL 1 -#endif -#ifndef RGENGC_WB_PROTECTED_BIGNUM -#define RGENGC_WB_PROTECTED_BIGNUM 1 -#endif -#ifndef RGENGC_WB_PROTECTED_NODE_CREF -#define RGENGC_WB_PROTECTED_NODE_CREF 1 -#endif - -struct RBasic { - VALUE flags; - const VALUE klass; -} -#ifdef __GNUC__ - __attribute__((aligned(sizeof(VALUE)))) -#endif -; - -VALUE rb_obj_hide(VALUE obj); -VALUE rb_obj_reveal(VALUE obj, VALUE klass); /* do not use this API to change klass information */ - -#define RBASIC_CLASS(obj) (RBASIC(obj)->klass) - -#define ROBJECT_EMBED_LEN_MAX 3 -struct RObject { - struct RBasic basic; - union { - struct { - long numiv; - VALUE *ivptr; - struct st_table *iv_index_tbl; /* shortcut for RCLASS_IV_INDEX_TBL(rb_obj_class(obj)) */ - } heap; - VALUE ary[ROBJECT_EMBED_LEN_MAX]; - } as; -}; -#define ROBJECT_EMBED FL_USER1 -#define ROBJECT_NUMIV(o) \ - ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ - ROBJECT_EMBED_LEN_MAX : \ - ROBJECT(o)->as.heap.numiv) -#define ROBJECT_IVPTR(o) \ - ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ - ROBJECT(o)->as.ary : \ - ROBJECT(o)->as.heap.ivptr) -#define ROBJECT_IV_INDEX_TBL(o) \ - ((RBASIC(o)->flags & ROBJECT_EMBED) ? \ - RCLASS_IV_INDEX_TBL(rb_obj_class(o)) : \ - ROBJECT(o)->as.heap.iv_index_tbl) - -/** @internal */ -typedef struct rb_classext_struct rb_classext_t; - -struct RClass { - struct RBasic basic; - VALUE super; - rb_classext_t *ptr; - struct method_table_wrapper *m_tbl_wrapper; -}; -#define RCLASS_SUPER(c) rb_class_get_superclass(c) -#define RMODULE_IV_TBL(m) RCLASS_IV_TBL(m) -#define RMODULE_CONST_TBL(m) RCLASS_CONST_TBL(m) -#define RMODULE_M_TBL(m) RCLASS_M_TBL(m) -#define RMODULE_SUPER(m) RCLASS_SUPER(m) -#define RMODULE_IS_OVERLAID FL_USER2 -#define RMODULE_IS_REFINEMENT FL_USER3 -#define RMODULE_INCLUDED_INTO_REFINEMENT FL_USER4 - -struct RFloat { - struct RBasic basic; - double float_value; -}; - -double rb_float_value(VALUE); -VALUE rb_float_new(double); -VALUE rb_float_new_in_heap(double); - -#define RFLOAT_VALUE(v) rb_float_value(v) -#define DBL2NUM(dbl) rb_float_new(dbl) - -#define ELTS_SHARED FL_USER2 - -#define RSTRING_EMBED_LEN_MAX ((int)((sizeof(VALUE)*3)/sizeof(char)-1)) -struct RString { - struct RBasic basic; - union { - struct { - long len; - char *ptr; - union { - long capa; - VALUE shared; - } aux; - } heap; - char ary[RSTRING_EMBED_LEN_MAX + 1]; - } as; -}; -#define RSTRING_NOEMBED FL_USER1 -#define RSTRING_FSTR FL_USER17 -#define RSTRING_EMBED_LEN_MASK (FL_USER2|FL_USER3|FL_USER4|FL_USER5|FL_USER6) -#define RSTRING_EMBED_LEN_SHIFT (FL_USHIFT+2) -#define RSTRING_EMBED_LEN(str) \ - (long)((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ - (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT)) -#define RSTRING_LEN(str) \ - (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ - RSTRING_EMBED_LEN(str) : \ - RSTRING(str)->as.heap.len) -#define RSTRING_PTR(str) \ - (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ - RSTRING(str)->as.ary : \ - RSTRING(str)->as.heap.ptr) -#define RSTRING_END(str) \ - (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ - (RSTRING(str)->as.ary + RSTRING_EMBED_LEN(str)) : \ - (RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len)) -#define RSTRING_LENINT(str) rb_long2int(RSTRING_LEN(str)) -#define RSTRING_GETMEM(str, ptrvar, lenvar) \ - (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ - ((ptrvar) = RSTRING(str)->as.ary, (lenvar) = RSTRING_EMBED_LEN(str)) : \ - ((ptrvar) = RSTRING(str)->as.heap.ptr, (lenvar) = RSTRING(str)->as.heap.len)) - -#define RARRAY_EMBED_LEN_MAX 3 -struct RArray { - struct RBasic basic; - union { - struct { - long len; - union { - long capa; - VALUE shared; - } aux; - const VALUE *ptr; - } heap; - const VALUE ary[RARRAY_EMBED_LEN_MAX]; - } as; -}; -#define RARRAY_EMBED_FLAG FL_USER1 -/* FL_USER2 is for ELTS_SHARED */ -#define RARRAY_EMBED_LEN_MASK (FL_USER4|FL_USER3) -#define RARRAY_EMBED_LEN_SHIFT (FL_USHIFT+3) -#define RARRAY_LEN(a) \ - ((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \ - (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ - (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT)) : \ - RARRAY(a)->as.heap.len) - -#define RARRAY_LENINT(ary) rb_long2int(RARRAY_LEN(ary)) - -#define RARRAY_CONST_PTR(a) \ - ((const VALUE *)((RBASIC(a)->flags & RARRAY_EMBED_FLAG) ? \ - RARRAY(a)->as.ary : \ - RARRAY(a)->as.heap.ptr)) - -#define RARRAY_PTR_USE_START(a) ((VALUE *)RARRAY_CONST_PTR(a)) -#define RARRAY_PTR_USE_END(a) /* */ - -#define RARRAY_PTR_USE(ary, ptr_name, expr) do { \ - const VALUE _ary = (ary); \ - VALUE *ptr_name = (VALUE *)RARRAY_PTR_USE_START(_ary); \ - expr; \ - RARRAY_PTR_USE_END(_ary); \ -} while (0) - -#define RARRAY_AREF(a, i) (RARRAY_CONST_PTR(a)[i]) -#define RARRAY_ASET(a, i, v) do { \ - const VALUE _ary_ = (a); \ - RB_OBJ_WRITE(_ary_, &RARRAY_CONST_PTR(_ary_)[i], (v)); \ -} while (0) - -#define RARRAY_PTR(a) ((VALUE *)RARRAY_CONST_PTR(RGENGC_WB_PROTECTED_ARRAY ? OBJ_WB_UNPROTECT((VALUE)a) : ((VALUE)a))) - -struct RRegexp { - struct RBasic basic; - struct re_pattern_buffer *ptr; - const VALUE src; - unsigned long usecnt; -}; -#define RREGEXP_SRC(r) RREGEXP(r)->src -#define RREGEXP_SRC_PTR(r) RSTRING_PTR(RREGEXP(r)->src) -#define RREGEXP_SRC_LEN(r) RSTRING_LEN(RREGEXP(r)->src) -#define RREGEXP_SRC_END(r) RSTRING_END(RREGEXP(r)->src) - -struct RHash { - struct RBasic basic; - struct st_table *ntbl; /* possibly 0 */ - int iter_lev; - const VALUE ifnone; -}; -/* RHASH_TBL allocates st_table if not available. */ -#define RHASH_TBL(h) rb_hash_tbl(h) -#define RHASH_ITER_LEV(h) (RHASH(h)->iter_lev) -#define RHASH_IFNONE(h) (RHASH(h)->ifnone) -#define RHASH_SIZE(h) (RHASH(h)->ntbl ? (st_index_t)RHASH(h)->ntbl->num_entries : 0) -#define RHASH_EMPTY_P(h) (RHASH_SIZE(h) == 0) -#define RHASH_SET_IFNONE(h, ifnone) rb_hash_set_ifnone((VALUE)h, ifnone) - -struct RFile { - struct RBasic basic; - struct rb_io_t *fptr; -}; - -struct RRational { - struct RBasic basic; - const VALUE num; - const VALUE den; -}; - -#define RRATIONAL_SET_NUM(rat, n) RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->num,(n)) -#define RRATIONAL_SET_DEN(rat, d) RB_OBJ_WRITE((rat), &((struct RRational *)(rat))->den,(d)) - -struct RComplex { - struct RBasic basic; - const VALUE real; - const VALUE imag; -}; - -#define RCOMPLEX_SET_REAL(cmp, r) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->real,(r)) -#define RCOMPLEX_SET_IMAG(cmp, i) RB_OBJ_WRITE((cmp), &((struct RComplex *)(cmp))->imag,(i)) - -struct RData { - struct RBasic basic; - void (*dmark)(void*); - void (*dfree)(void*); - void *data; -}; - -typedef struct rb_data_type_struct rb_data_type_t; - -struct rb_data_type_struct { - const char *wrap_struct_name; - struct { - void (*dmark)(void*); - void (*dfree)(void*); - size_t (*dsize)(const void *); - void *reserved[2]; /* For future extension. - This array *must* be filled with ZERO. */ - } function; - const rb_data_type_t *parent; - void *data; /* This area can be used for any purpose - by a programmer who define the type. */ - VALUE flags; /* FL_WB_PROTECTED */ -}; - -#define HAVE_TYPE_RB_DATA_TYPE_T 1 -#define HAVE_RB_DATA_TYPE_T_FUNCTION 1 -#define HAVE_RB_DATA_TYPE_T_PARENT 1 - -struct RTypedData { - struct RBasic basic; - const rb_data_type_t *type; - VALUE typed_flag; /* 1 or not */ - void *data; -}; - -#define DATA_PTR(dta) (RDATA(dta)->data) - -#define RTYPEDDATA_P(v) (RTYPEDDATA(v)->typed_flag == 1) -#define RTYPEDDATA_TYPE(v) (RTYPEDDATA(v)->type) -#define RTYPEDDATA_DATA(v) (RTYPEDDATA(v)->data) - -/* -#define RUBY_DATA_FUNC(func) ((void (*)(void*))(func)) -*/ -typedef void (*RUBY_DATA_FUNC)(void*); - -VALUE rb_data_object_alloc(VALUE,void*,RUBY_DATA_FUNC,RUBY_DATA_FUNC); -VALUE rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *); -int rb_typeddata_inherited_p(const rb_data_type_t *child, const rb_data_type_t *parent); -int rb_typeddata_is_kind_of(VALUE, const rb_data_type_t *); -void *rb_check_typeddata(VALUE, const rb_data_type_t *); -#define Check_TypedStruct(v,t) rb_check_typeddata((VALUE)(v),(t)) -#define RUBY_DEFAULT_FREE ((RUBY_DATA_FUNC)-1) -#define RUBY_NEVER_FREE ((RUBY_DATA_FUNC)0) -#define RUBY_TYPED_DEFAULT_FREE RUBY_DEFAULT_FREE -#define RUBY_TYPED_NEVER_FREE RUBY_NEVER_FREE - -/* bits for rb_data_type_struct::flags */ -#define RUBY_TYPED_FREE_IMMEDIATELY 1 /* TYPE field */ -#define RUBY_TYPED_WB_PROTECTED FL_WB_PROTECTED - -#define Data_Wrap_Struct(klass,mark,free,sval)\ - rb_data_object_alloc((klass),(sval),(RUBY_DATA_FUNC)(mark),(RUBY_DATA_FUNC)(free)) - -#define Data_Make_Struct(klass,type,mark,free,sval) (\ - (sval) = ALLOC(type),\ - memset((sval), 0, sizeof(type)),\ - Data_Wrap_Struct((klass),(mark),(free),(sval))\ -) - -#define TypedData_Wrap_Struct(klass,data_type,sval)\ - rb_data_typed_object_alloc((klass),(sval),(data_type)) - -#define TypedData_Make_Struct(klass, type, data_type, sval) (\ - (sval) = ALLOC(type),\ - memset((sval), 0, sizeof(type)),\ - TypedData_Wrap_Struct((klass),(data_type),(sval))\ -) - -#define Data_Get_Struct(obj,type,sval) do {\ - Check_Type((obj), T_DATA); \ - (sval) = (type*)DATA_PTR(obj);\ -} while (0) - -#define TypedData_Get_Struct(obj,type,data_type,sval) do {\ - (sval) = (type*)rb_check_typeddata((obj), (data_type)); \ -} while (0) - -#define RSTRUCT_EMBED_LEN_MAX 3 -struct RStruct { - struct RBasic basic; - union { - struct { - long len; - const VALUE *ptr; - } heap; - const VALUE ary[RSTRUCT_EMBED_LEN_MAX]; - } as; -}; -#define RSTRUCT_EMBED_LEN_MASK (FL_USER2|FL_USER1) -#define RSTRUCT_EMBED_LEN_SHIFT (FL_USHIFT+1) -#define RSTRUCT_LEN(st) \ - ((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ? \ - (long)((RBASIC(st)->flags >> RSTRUCT_EMBED_LEN_SHIFT) & \ - (RSTRUCT_EMBED_LEN_MASK >> RSTRUCT_EMBED_LEN_SHIFT)) : \ - RSTRUCT(st)->as.heap.len) -#define RSTRUCT_LENINT(st) rb_long2int(RSTRUCT_LEN(st)) -#define RSTRUCT_CONST_PTR(st) \ - ((RBASIC(st)->flags & RSTRUCT_EMBED_LEN_MASK) ? \ - RSTRUCT(st)->as.ary : \ - RSTRUCT(st)->as.heap.ptr) -#define RSTRUCT_PTR(st) ((VALUE *)RSTRUCT_CONST_PTR(RGENGC_WB_PROTECTED_STRUCT ? OBJ_WB_UNPROTECT((VALUE)st) : (VALUE)st)) - -#define RSTRUCT_SET(st, idx, v) RB_OBJ_WRITE(st, &RSTRUCT_CONST_PTR(st)[idx], (v)) -#define RSTRUCT_GET(st, idx) (RSTRUCT_CONST_PTR(st)[idx]) - -#define RBIGNUM_EMBED_LEN_NUMBITS 3 -#ifndef RBIGNUM_EMBED_LEN_MAX -# if (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) < (1 << RBIGNUM_EMBED_LEN_NUMBITS)-1 -# define RBIGNUM_EMBED_LEN_MAX (SIZEOF_VALUE*3/SIZEOF_ACTUAL_BDIGIT) -# else -# define RBIGNUM_EMBED_LEN_MAX ((1 << RBIGNUM_EMBED_LEN_NUMBITS)-1) -# endif -#endif -struct RBignum { - struct RBasic basic; - union { - struct { - long len; - BDIGIT *digits; - } heap; - BDIGIT ary[RBIGNUM_EMBED_LEN_MAX]; - } as; -}; -#define RBIGNUM_SIGN_BIT FL_USER1 -/* sign: positive:1, negative:0 */ -#define RBIGNUM_SIGN(b) ((RBASIC(b)->flags & RBIGNUM_SIGN_BIT) != 0) -#define RBIGNUM_SET_SIGN(b,sign) \ - ((sign) ? (RBASIC(b)->flags |= RBIGNUM_SIGN_BIT) \ - : (RBASIC(b)->flags &= ~RBIGNUM_SIGN_BIT)) -#define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b) -#define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b)) - -#define RBIGNUM_EMBED_FLAG FL_USER2 -#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3) -#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+RBIGNUM_EMBED_LEN_NUMBITS) -#define RBIGNUM_LEN(b) \ - ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ - (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \ - (RBIGNUM_EMBED_LEN_MASK >> RBIGNUM_EMBED_LEN_SHIFT)) : \ - RBIGNUM(b)->as.heap.len) -/* LSB:RBIGNUM_DIGITS(b)[0], MSB:RBIGNUM_DIGITS(b)[RBIGNUM_LEN(b)-1] */ -#define RBIGNUM_DIGITS(b) \ - ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ - RBIGNUM(b)->as.ary : \ - RBIGNUM(b)->as.heap.digits) -#define RBIGNUM_LENINT(b) rb_long2int(RBIGNUM_LEN(b)) - -#define R_CAST(st) (struct st*) -#define RBASIC(obj) (R_CAST(RBasic)(obj)) -#define ROBJECT(obj) (R_CAST(RObject)(obj)) -#define RCLASS(obj) (R_CAST(RClass)(obj)) -#define RMODULE(obj) RCLASS(obj) -#define RFLOAT(obj) (R_CAST(RFloat)(obj)) -#define RSTRING(obj) (R_CAST(RString)(obj)) -#define RREGEXP(obj) (R_CAST(RRegexp)(obj)) -#define RARRAY(obj) (R_CAST(RArray)(obj)) -#define RHASH(obj) (R_CAST(RHash)(obj)) -#define RDATA(obj) (R_CAST(RData)(obj)) -#define RTYPEDDATA(obj) (R_CAST(RTypedData)(obj)) -#define RSTRUCT(obj) (R_CAST(RStruct)(obj)) -#define RBIGNUM(obj) (R_CAST(RBignum)(obj)) -#define RFILE(obj) (R_CAST(RFile)(obj)) -#define RRATIONAL(obj) (R_CAST(RRational)(obj)) -#define RCOMPLEX(obj) (R_CAST(RComplex)(obj)) - -#define FL_SINGLETON FL_USER0 -#define FL_WB_PROTECTED (((VALUE)1)<<5) -#define FL_PROMOTED (((VALUE)1)<<6) -#define FL_FINALIZE (((VALUE)1)<<7) -#define FL_TAINT (((VALUE)1)<<8) -#define FL_UNTRUSTED FL_TAINT -#define FL_EXIVAR (((VALUE)1)<<10) -#define FL_FREEZE (((VALUE)1)<<11) - -#define FL_USHIFT 12 - -#define FL_USER0 (((VALUE)1)<<(FL_USHIFT+0)) -#define FL_USER1 (((VALUE)1)<<(FL_USHIFT+1)) -#define FL_USER2 (((VALUE)1)<<(FL_USHIFT+2)) -#define FL_USER3 (((VALUE)1)<<(FL_USHIFT+3)) -#define FL_USER4 (((VALUE)1)<<(FL_USHIFT+4)) -#define FL_USER5 (((VALUE)1)<<(FL_USHIFT+5)) -#define FL_USER6 (((VALUE)1)<<(FL_USHIFT+6)) -#define FL_USER7 (((VALUE)1)<<(FL_USHIFT+7)) -#define FL_USER8 (((VALUE)1)<<(FL_USHIFT+8)) -#define FL_USER9 (((VALUE)1)<<(FL_USHIFT+9)) -#define FL_USER10 (((VALUE)1)<<(FL_USHIFT+10)) -#define FL_USER11 (((VALUE)1)<<(FL_USHIFT+11)) -#define FL_USER12 (((VALUE)1)<<(FL_USHIFT+12)) -#define FL_USER13 (((VALUE)1)<<(FL_USHIFT+13)) -#define FL_USER14 (((VALUE)1)<<(FL_USHIFT+14)) -#define FL_USER15 (((VALUE)1)<<(FL_USHIFT+15)) -#define FL_USER16 (((VALUE)1)<<(FL_USHIFT+16)) -#define FL_USER17 (((VALUE)1)<<(FL_USHIFT+17)) -#define FL_USER18 (((VALUE)1)<<(FL_USHIFT+18)) -#define FL_USER19 (((VALUE)1)<<(FL_USHIFT+19)) - -#define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x)) - -#define FL_ABLE(x) (!SPECIAL_CONST_P(x) && BUILTIN_TYPE(x) != T_NODE) -#define FL_TEST_RAW(x,f) (RBASIC(x)->flags&(f)) -#define FL_TEST(x,f) (FL_ABLE(x)?FL_TEST_RAW((x),(f)):0) -#define FL_ANY(x,f) FL_TEST((x),(f)) -#define FL_ALL(x,f) (FL_TEST((x),(f)) == (f)) -#define FL_SET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags |= (f);} while (0) -#define FL_UNSET(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags &= ~(f);} while (0) -#define FL_REVERSE(x,f) do {if (FL_ABLE(x)) RBASIC(x)->flags ^= (f);} while (0) - -#define OBJ_TAINTED(x) (!!FL_TEST((x), FL_TAINT)) -#define OBJ_TAINT(x) FL_SET((x), FL_TAINT) -#define OBJ_UNTRUSTED(x) OBJ_TAINTED(x) -#define OBJ_UNTRUST(x) OBJ_TAINT(x) -#define OBJ_INFECT(x,s) do { \ - if (FL_ABLE(x) && FL_ABLE(s)) \ - RBASIC(x)->flags |= RBASIC(s)->flags & FL_TAINT; \ -} while (0) - -#define OBJ_FROZEN(x) (!!(FL_ABLE(x)?(RBASIC(x)->flags&(FL_FREEZE)):(FIXNUM_P(x)||FLONUM_P(x)||SYMBOL_P(x)))) -#define OBJ_FREEZE(x) FL_SET((x), FL_FREEZE) - -#if USE_RGENGC -#define OBJ_PROMOTED(x) (SPECIAL_CONST_P(x) ? 0 : FL_TEST_RAW((x), FL_PROMOTED)) -#define OBJ_WB_PROTECTED(x) (SPECIAL_CONST_P(x) ? 1 : FL_TEST_RAW((x), FL_WB_PROTECTED)) -#define OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__) - -void rb_gc_writebarrier(VALUE a, VALUE b); -void rb_gc_writebarrier_unprotect_promoted(VALUE obj); - -#else /* USE_RGENGC */ -#define OBJ_PROMOTED(x) 0 -#define OBJ_WB_PROTECTED(x) 0 -#define OBJ_WB_UNPROTECT(x) rb_obj_wb_unprotect(x, __FILE__, __LINE__) -#endif - -/* Write barrier (WB) interfaces: - * - RB_OBJ_WRITE(a, slot, b): WB for new reference from `a' to `b'. - * Write `b' into `*slot'. `slot' is a pointer in `a'. - * - RB_OBJ_WRITTEN(a, oldv, b): WB for new reference from `a' to `b'. - * This doesn't write any values, but only a WB declaration. - * `oldv' is replaced value with `b' (not used in current Ruby). - * - * NOTE: The following core interfaces can be changed in the future. - * Please catch up if you want to insert WB into C-extensions - * correctly. - */ -#define RB_OBJ_WRITE(a, slot, b) rb_obj_write((VALUE)(a), (VALUE *)(slot), (VALUE)(b), __FILE__, __LINE__) -#define RB_OBJ_WRITTEN(a, oldv, b) rb_obj_written((VALUE)(a), (VALUE)(oldv), (VALUE)(b), __FILE__, __LINE__) - -#ifndef USE_RGENGC_LOGGING_WB_UNPROTECT -#define USE_RGENGC_LOGGING_WB_UNPROTECT 0 -#endif - -#if USE_RGENGC_LOGGING_WB_UNPROTECT -void rb_gc_unprotect_logging(void *objptr, const char *filename, int line); -#define RGENGC_LOGGING_WB_UNPROTECT rb_gc_unprotect_logging -#endif - -static inline VALUE -rb_obj_wb_unprotect(VALUE x, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line)) -{ -#ifdef RGENGC_LOGGING_WB_UNPROTECT - RGENGC_LOGGING_WB_UNPROTECT((void *)x, filename, line); -#endif - -#if USE_RGENGC - /* `x' should be an RVALUE object */ - if (FL_TEST_RAW((x), FL_WB_PROTECTED)) { - if (FL_TEST_RAW((x), FL_PROMOTED)) { - rb_gc_writebarrier_unprotect_promoted(x); - } - RBASIC(x)->flags &= ~FL_WB_PROTECTED; - } -#endif - return x; -} - -static inline VALUE -rb_obj_written(VALUE a, RB_UNUSED_VAR(VALUE oldv), VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line)) -{ -#ifdef RGENGC_LOGGING_OBJ_WRITTEN - RGENGC_LOGGING_OBJ_WRITTEN(a, oldv, b, filename, line); -#endif - -#if USE_RGENGC - /* `a' should be an RVALUE object */ - if (FL_TEST_RAW((a), FL_PROMOTED) && !SPECIAL_CONST_P(b)) { - rb_gc_writebarrier(a, b); - } -#endif - - return a; -} - -static inline VALUE -rb_obj_write(VALUE a, VALUE *slot, VALUE b, RB_UNUSED_VAR(const char *filename), RB_UNUSED_VAR(int line)) -{ -#ifdef RGENGC_LOGGING_WRITE - RGENGC_LOGGING_WRITE(a, slot, b, filename, line); -#endif - - *slot = b; - -#if USE_RGENGC - rb_obj_written(a, Qundef /* ignore `oldv' now */, b, filename, line); -#endif - return a; -} - -#if SIZEOF_INT < SIZEOF_LONG -# define INT2NUM(v) INT2FIX((int)(v)) -# define UINT2NUM(v) LONG2FIX((unsigned int)(v)) -#else -static inline VALUE -rb_int2num_inline(int v) -{ - if (FIXABLE(v)) - return INT2FIX(v); - else - return rb_int2big(v); -} -#define INT2NUM(x) rb_int2num_inline(x) - -static inline VALUE -rb_uint2num_inline(unsigned int v) -{ - if (POSFIXABLE(v)) - return LONG2FIX(v); - else - return rb_uint2big(v); -} -#define UINT2NUM(x) rb_uint2num_inline(x) -#endif - -static inline VALUE -rb_long2num_inline(long v) -{ - if (FIXABLE(v)) - return LONG2FIX(v); - else - return rb_int2big(v); -} -#define LONG2NUM(x) rb_long2num_inline(x) - -static inline VALUE -rb_ulong2num_inline(unsigned long v) -{ - if (POSFIXABLE(v)) - return LONG2FIX(v); - else - return rb_uint2big(v); -} -#define ULONG2NUM(x) rb_ulong2num_inline(x) - -static inline char -rb_num2char_inline(VALUE x) -{ - if ((TYPE(x) == T_STRING) && (RSTRING_LEN(x)>=1)) - return RSTRING_PTR(x)[0]; - else - return (char)(NUM2INT(x) & 0xff); -} -#define NUM2CHR(x) rb_num2char_inline(x) - -#define CHR2FIX(x) INT2FIX((long)((x)&0xff)) - -#define ALLOC_N(type,n) ((type*)xmalloc2((n),sizeof(type))) -#define ALLOC(type) ((type*)xmalloc(sizeof(type))) -#define REALLOC_N(var,type,n) ((var)=(type*)xrealloc2((char*)(var),(n),sizeof(type))) - -#define ALLOCA_N(type,n) ((type*)alloca(sizeof(type)*(n))) - -void *rb_alloc_tmp_buffer(volatile VALUE *store, long len) RUBY_ATTR_ALLOC_SIZE((2)); -void rb_free_tmp_buffer(volatile VALUE *store); -/* allocates _n_ bytes temporary buffer and stores VALUE including it - * in _v_. _n_ may be evaluated twice. */ -#ifdef C_ALLOCA -# define ALLOCV(v, n) rb_alloc_tmp_buffer(&(v), (n)) -#else -# define ALLOCV(v, n) ((n) < 1024 ? (RB_GC_GUARD(v) = 0, alloca(n)) : rb_alloc_tmp_buffer(&(v), (n))) -#endif -#define ALLOCV_N(type, v, n) ((type*)ALLOCV((v), sizeof(type)*(n))) -#define ALLOCV_END(v) rb_free_tmp_buffer(&(v)) - -#define MEMZERO(p,type,n) memset((p), 0, sizeof(type)*(n)) -#define MEMCPY(p1,p2,type,n) memcpy((p1), (p2), sizeof(type)*(n)) -#define MEMMOVE(p1,p2,type,n) memmove((p1), (p2), sizeof(type)*(n)) -#define MEMCMP(p1,p2,type,n) memcmp((p1), (p2), sizeof(type)*(n)) - -void rb_obj_infect(VALUE,VALUE); - -typedef int ruby_glob_func(const char*,VALUE, void*); -void rb_glob(const char*,void(*)(const char*,VALUE,void*),VALUE); -int ruby_glob(const char*,int,ruby_glob_func*,VALUE); -int ruby_brace_glob(const char*,int,ruby_glob_func*,VALUE); - -VALUE rb_define_class(const char*,VALUE); -VALUE rb_define_module(const char*); -VALUE rb_define_class_under(VALUE, const char*, VALUE); -VALUE rb_define_module_under(VALUE, const char*); - -void rb_include_module(VALUE,VALUE); -void rb_extend_object(VALUE,VALUE); -void rb_prepend_module(VALUE,VALUE); - -struct rb_global_variable; - -typedef VALUE rb_gvar_getter_t(ID id, void *data, struct rb_global_variable *gvar); -typedef void rb_gvar_setter_t(VALUE val, ID id, void *data, struct rb_global_variable *gvar); -typedef void rb_gvar_marker_t(VALUE *var); - -VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar); -void rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); -void rb_gvar_undef_marker(VALUE *var); - -VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar); -void rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); -void rb_gvar_val_marker(VALUE *var); - -VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar); -void rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); -void rb_gvar_var_marker(VALUE *var); - -void rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar); - -void rb_define_variable(const char*,VALUE*); -void rb_define_virtual_variable(const char*,VALUE(*)(ANYARGS),void(*)(ANYARGS)); -void rb_define_hooked_variable(const char*,VALUE*,VALUE(*)(ANYARGS),void(*)(ANYARGS)); -void rb_define_readonly_variable(const char*,VALUE*); -void rb_define_const(VALUE,const char*,VALUE); -void rb_define_global_const(const char*,VALUE); - -#define RUBY_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))(func)) -void rb_define_method(VALUE,const char*,VALUE(*)(ANYARGS),int); -void rb_define_module_function(VALUE,const char*,VALUE(*)(ANYARGS),int); -void rb_define_global_function(const char*,VALUE(*)(ANYARGS),int); - -void rb_undef_method(VALUE,const char*); -void rb_define_alias(VALUE,const char*,const char*); -void rb_define_attr(VALUE,const char*,int,int); - -void rb_global_variable(VALUE*); -void rb_gc_register_mark_object(VALUE); -void rb_gc_register_address(VALUE*); -void rb_gc_unregister_address(VALUE*); - -ID rb_intern(const char*); -ID rb_intern2(const char*, long); -ID rb_intern_str(VALUE str); -const char *rb_id2name(ID); -ID rb_check_id(volatile VALUE *); -ID rb_to_id(VALUE); -VALUE rb_id2str(ID); - -#define CONST_ID_CACHE(result, str) \ - { \ - static ID rb_intern_id_cache; \ - if (!rb_intern_id_cache) \ - rb_intern_id_cache = rb_intern2((str), (long)strlen(str)); \ - result rb_intern_id_cache; \ - } -#define CONST_ID(var, str) \ - do CONST_ID_CACHE((var) =, (str)) while (0) -#ifdef __GNUC__ -/* __builtin_constant_p and statement expression is available - * since gcc-2.7.2.3 at least. */ -#define rb_intern(str) \ - (__builtin_constant_p(str) ? \ - __extension__ (CONST_ID_CACHE((ID), (str))) : \ - rb_intern(str)) -#define rb_intern_const(str) \ - (__builtin_constant_p(str) ? \ - __extension__ (rb_intern2((str), (long)strlen(str))) : \ - (rb_intern)(str)) -#else -#define rb_intern_const(str) rb_intern2((str), (long)strlen(str)) -#endif - -const char *rb_class2name(VALUE); -const char *rb_obj_classname(VALUE); - -void rb_p(VALUE); - -VALUE rb_eval_string(const char*); -VALUE rb_eval_string_protect(const char*, int*); -VALUE rb_eval_string_wrap(const char*, int*); -VALUE rb_funcall(VALUE, ID, int, ...); -VALUE rb_funcallv(VALUE, ID, int, const VALUE*); -VALUE rb_funcallv_public(VALUE, ID, int, const VALUE*); -#define rb_funcall2 rb_funcallv -#define rb_funcall3 rb_funcallv_public -VALUE rb_funcall_passing_block(VALUE, ID, int, const VALUE*); -VALUE rb_funcall_with_block(VALUE, ID, int, const VALUE*, VALUE); -int rb_scan_args(int, const VALUE*, const char*, ...); -VALUE rb_call_super(int, const VALUE*); - -/* rb_scan_args() format allows ':' for optional hash */ -#define HAVE_RB_SCAN_ARGS_OPTIONAL_HASH 1 - -VALUE rb_gv_set(const char*, VALUE); -VALUE rb_gv_get(const char*); -VALUE rb_iv_get(VALUE, const char*); -VALUE rb_iv_set(VALUE, const char*, VALUE); - -VALUE rb_equal(VALUE,VALUE); - -VALUE *rb_ruby_verbose_ptr(void); -VALUE *rb_ruby_debug_ptr(void); -#define ruby_verbose (*rb_ruby_verbose_ptr()) -#define ruby_debug (*rb_ruby_debug_ptr()) - -PRINTF_ARGS(NORETURN(void rb_raise(VALUE, const char*, ...)), 2, 3); -PRINTF_ARGS(NORETURN(void rb_fatal(const char*, ...)), 1, 2); -PRINTF_ARGS(NORETURN(void rb_bug(const char*, ...)), 1, 2); -NORETURN(void rb_bug_errno(const char*, int)); -NORETURN(void rb_sys_fail(const char*)); -NORETURN(void rb_sys_fail_str(VALUE)); -NORETURN(void rb_mod_sys_fail(VALUE, const char*)); -NORETURN(void rb_mod_sys_fail_str(VALUE, VALUE)); -NORETURN(void rb_readwrite_sys_fail(int, const char*)); -NORETURN(void rb_iter_break(void)); -NORETURN(void rb_iter_break_value(VALUE)); -NORETURN(void rb_exit(int)); -NORETURN(void rb_notimplement(void)); -VALUE rb_syserr_new(int, const char *); -VALUE rb_syserr_new_str(int n, VALUE arg); -NORETURN(void rb_syserr_fail(int, const char*)); -NORETURN(void rb_syserr_fail_str(int, VALUE)); -NORETURN(void rb_mod_syserr_fail(VALUE, int, const char*)); -NORETURN(void rb_mod_syserr_fail_str(VALUE, int, VALUE)); - -/* reports if `-W' specified */ -PRINTF_ARGS(void rb_warning(const char*, ...), 1, 2); -PRINTF_ARGS(void rb_compile_warning(const char *, int, const char*, ...), 3, 4); -PRINTF_ARGS(void rb_sys_warning(const char*, ...), 1, 2); -/* reports always */ -PRINTF_ARGS(void rb_warn(const char*, ...), 1, 2); -PRINTF_ARGS(void rb_compile_warn(const char *, int, const char*, ...), 3, 4); - -/* for rb_readwrite_sys_fail first argument */ -#define RB_IO_WAIT_READABLE 0 -#define RB_IO_WAIT_WRITABLE 1 - -#define RUBY_BLOCK_CALL_FUNC_TAKES_BLOCKARG 1 -#define RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg) \ - VALUE yielded_arg, VALUE callback_arg, int argc, const VALUE *argv, VALUE blockarg -typedef VALUE rb_block_call_func(RB_BLOCK_CALL_FUNC_ARGLIST(yielded_arg, callback_arg)); - -#if defined RB_BLOCK_CALL_FUNC_STRICT && RB_BLOCK_CALL_FUNC_STRICT -typedef rb_block_call_func *rb_block_call_func_t; -#else -typedef VALUE (*rb_block_call_func_t)(ANYARGS); -#endif - -VALUE rb_each(VALUE); -VALUE rb_yield(VALUE); -VALUE rb_yield_values(int n, ...); -VALUE rb_yield_values2(int n, const VALUE *argv); -VALUE rb_yield_splat(VALUE); -VALUE rb_yield_block(VALUE, VALUE, int, const VALUE *, VALUE); /* rb_block_call_func */ -int rb_block_given_p(void); -void rb_need_block(void); -VALUE rb_iterate(VALUE(*)(VALUE),VALUE,VALUE(*)(ANYARGS),VALUE); -VALUE rb_block_call(VALUE,ID,int,const VALUE*,rb_block_call_func_t,VALUE); -VALUE rb_rescue(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE); -VALUE rb_rescue2(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE,...); -VALUE rb_ensure(VALUE(*)(ANYARGS),VALUE,VALUE(*)(ANYARGS),VALUE); -VALUE rb_catch(const char*,VALUE(*)(ANYARGS),VALUE); -VALUE rb_catch_obj(VALUE,VALUE(*)(ANYARGS),VALUE); -NORETURN(void rb_throw(const char*,VALUE)); -NORETURN(void rb_throw_obj(VALUE,VALUE)); - -VALUE rb_require(const char*); - -RUBY_EXTERN VALUE rb_mKernel; -RUBY_EXTERN VALUE rb_mComparable; -RUBY_EXTERN VALUE rb_mEnumerable; -RUBY_EXTERN VALUE rb_mErrno; -RUBY_EXTERN VALUE rb_mFileTest; -RUBY_EXTERN VALUE rb_mGC; -RUBY_EXTERN VALUE rb_mMath; -RUBY_EXTERN VALUE rb_mProcess; -RUBY_EXTERN VALUE rb_mWaitReadable; -RUBY_EXTERN VALUE rb_mWaitWritable; - -RUBY_EXTERN VALUE rb_cBasicObject; -RUBY_EXTERN VALUE rb_cObject; -RUBY_EXTERN VALUE rb_cArray; -RUBY_EXTERN VALUE rb_cBignum; -RUBY_EXTERN VALUE rb_cBinding; -RUBY_EXTERN VALUE rb_cClass; -RUBY_EXTERN VALUE rb_cCont; -RUBY_EXTERN VALUE rb_cDir; -RUBY_EXTERN VALUE rb_cData; -RUBY_EXTERN VALUE rb_cFalseClass; -RUBY_EXTERN VALUE rb_cEncoding; -RUBY_EXTERN VALUE rb_cEnumerator; -RUBY_EXTERN VALUE rb_cFile; -RUBY_EXTERN VALUE rb_cFixnum; -RUBY_EXTERN VALUE rb_cFloat; -RUBY_EXTERN VALUE rb_cHash; -RUBY_EXTERN VALUE rb_cInteger; -RUBY_EXTERN VALUE rb_cIO; -RUBY_EXTERN VALUE rb_cMatch; -RUBY_EXTERN VALUE rb_cMethod; -RUBY_EXTERN VALUE rb_cModule; -RUBY_EXTERN VALUE rb_cNameErrorMesg; -RUBY_EXTERN VALUE rb_cNilClass; -RUBY_EXTERN VALUE rb_cNumeric; -RUBY_EXTERN VALUE rb_cProc; -RUBY_EXTERN VALUE rb_cRandom; -RUBY_EXTERN VALUE rb_cRange; -RUBY_EXTERN VALUE rb_cRational; -RUBY_EXTERN VALUE rb_cComplex; -RUBY_EXTERN VALUE rb_cRegexp; -RUBY_EXTERN VALUE rb_cStat; -RUBY_EXTERN VALUE rb_cString; -RUBY_EXTERN VALUE rb_cStruct; -RUBY_EXTERN VALUE rb_cSymbol; -RUBY_EXTERN VALUE rb_cThread; -RUBY_EXTERN VALUE rb_cTime; -RUBY_EXTERN VALUE rb_cTrueClass; -RUBY_EXTERN VALUE rb_cUnboundMethod; - -RUBY_EXTERN VALUE rb_eException; -RUBY_EXTERN VALUE rb_eStandardError; -RUBY_EXTERN VALUE rb_eSystemExit; -RUBY_EXTERN VALUE rb_eInterrupt; -RUBY_EXTERN VALUE rb_eSignal; -RUBY_EXTERN VALUE rb_eFatal; -RUBY_EXTERN VALUE rb_eArgError; -RUBY_EXTERN VALUE rb_eEOFError; -RUBY_EXTERN VALUE rb_eIndexError; -RUBY_EXTERN VALUE rb_eStopIteration; -RUBY_EXTERN VALUE rb_eKeyError; -RUBY_EXTERN VALUE rb_eRangeError; -RUBY_EXTERN VALUE rb_eIOError; -RUBY_EXTERN VALUE rb_eRuntimeError; -RUBY_EXTERN VALUE rb_eSecurityError; -RUBY_EXTERN VALUE rb_eSystemCallError; -RUBY_EXTERN VALUE rb_eThreadError; -RUBY_EXTERN VALUE rb_eTypeError; -RUBY_EXTERN VALUE rb_eZeroDivError; -RUBY_EXTERN VALUE rb_eNotImpError; -RUBY_EXTERN VALUE rb_eNoMemError; -RUBY_EXTERN VALUE rb_eNoMethodError; -RUBY_EXTERN VALUE rb_eFloatDomainError; -RUBY_EXTERN VALUE rb_eLocalJumpError; -RUBY_EXTERN VALUE rb_eSysStackError; -RUBY_EXTERN VALUE rb_eRegexpError; -RUBY_EXTERN VALUE rb_eEncodingError; -RUBY_EXTERN VALUE rb_eEncCompatError; - -RUBY_EXTERN VALUE rb_eScriptError; -RUBY_EXTERN VALUE rb_eNameError; -RUBY_EXTERN VALUE rb_eSyntaxError; -RUBY_EXTERN VALUE rb_eLoadError; - -RUBY_EXTERN VALUE rb_eMathDomainError; - -RUBY_EXTERN VALUE rb_stdin, rb_stdout, rb_stderr; - -static inline VALUE -rb_class_of(VALUE obj) -{ - if (IMMEDIATE_P(obj)) { - if (FIXNUM_P(obj)) return rb_cFixnum; - if (FLONUM_P(obj)) return rb_cFloat; - if (obj == Qtrue) return rb_cTrueClass; - if (SYMBOL_P(obj)) return rb_cSymbol; - } - else if (!RTEST(obj)) { - if (obj == Qnil) return rb_cNilClass; - if (obj == Qfalse) return rb_cFalseClass; - } - return RBASIC(obj)->klass; -} - -static inline int -rb_type(VALUE obj) -{ - if (IMMEDIATE_P(obj)) { - if (FIXNUM_P(obj)) return T_FIXNUM; - if (FLONUM_P(obj)) return T_FLOAT; - if (obj == Qtrue) return T_TRUE; - if (SYMBOL_P(obj)) return T_SYMBOL; - if (obj == Qundef) return T_UNDEF; - } - else if (!RTEST(obj)) { - if (obj == Qnil) return T_NIL; - if (obj == Qfalse) return T_FALSE; - } - return BUILTIN_TYPE(obj); -} - -#define RB_FLOAT_TYPE_P(obj) (FLONUM_P(obj) || (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == T_FLOAT)) - -#define RB_TYPE_P(obj, type) ( \ - ((type) == T_FIXNUM) ? FIXNUM_P(obj) : \ - ((type) == T_TRUE) ? ((obj) == Qtrue) : \ - ((type) == T_FALSE) ? ((obj) == Qfalse) : \ - ((type) == T_NIL) ? ((obj) == Qnil) : \ - ((type) == T_UNDEF) ? ((obj) == Qundef) : \ - ((type) == T_SYMBOL) ? SYMBOL_P(obj) : \ - ((type) == T_FLOAT) ? RB_FLOAT_TYPE_P(obj) : \ - (!SPECIAL_CONST_P(obj) && BUILTIN_TYPE(obj) == (type))) - -#ifdef __GNUC__ -#define rb_type_p(obj, type) \ - __extension__ (__builtin_constant_p(type) ? RB_TYPE_P((obj), (type)) : \ - rb_type(obj) == (type)) -#else -#define rb_type_p(obj, type) (rb_type(obj) == (type)) -#endif - -#ifdef __GNUC__ -#define rb_special_const_p(obj) \ - __extension__ ({VALUE special_const_obj = (obj); (int)(SPECIAL_CONST_P(special_const_obj) ? Qtrue : Qfalse);}) -#else -static inline int -rb_special_const_p(VALUE obj) -{ - if (SPECIAL_CONST_P(obj)) return (int)Qtrue; - return (int)Qfalse; -} -#endif - -#include "ruby/intern.h" - -#if defined(EXTLIB) && defined(USE_DLN_A_OUT) -/* hook for external modules */ -static char *dln_libs_to_be_linked[] = { EXTLIB, 0 }; -#endif - -#define RUBY_VM 1 /* YARV */ -#define HAVE_NATIVETHREAD -int ruby_native_thread_p(void); - -/* traditional set_trace_func events */ -#define RUBY_EVENT_NONE 0x0000 -#define RUBY_EVENT_LINE 0x0001 -#define RUBY_EVENT_CLASS 0x0002 -#define RUBY_EVENT_END 0x0004 -#define RUBY_EVENT_CALL 0x0008 -#define RUBY_EVENT_RETURN 0x0010 -#define RUBY_EVENT_C_CALL 0x0020 -#define RUBY_EVENT_C_RETURN 0x0040 -#define RUBY_EVENT_RAISE 0x0080 -#define RUBY_EVENT_ALL 0x00ff - -/* for TracePoint extended events */ -#define RUBY_EVENT_B_CALL 0x0100 -#define RUBY_EVENT_B_RETURN 0x0200 -#define RUBY_EVENT_THREAD_BEGIN 0x0400 -#define RUBY_EVENT_THREAD_END 0x0800 -#define RUBY_EVENT_TRACEPOINT_ALL 0xffff - -/* special events */ -#define RUBY_EVENT_SPECIFIED_LINE 0x010000 -#define RUBY_EVENT_COVERAGE 0x020000 - -/* internal events */ -#define RUBY_INTERNAL_EVENT_SWITCH 0x040000 -#define RUBY_EVENT_SWITCH 0x040000 /* obsolete name. this macro is for compatibility */ - /* 0x080000 */ -#define RUBY_INTERNAL_EVENT_NEWOBJ 0x100000 -#define RUBY_INTERNAL_EVENT_FREEOBJ 0x200000 -#define RUBY_INTERNAL_EVENT_GC_START 0x400000 -#define RUBY_INTERNAL_EVENT_GC_END_MARK 0x800000 -#define RUBY_INTERNAL_EVENT_GC_END_SWEEP 0x1000000 -#define RUBY_INTERNAL_EVENT_OBJSPACE_MASK 0x1f00000 -#define RUBY_INTERNAL_EVENT_MASK 0xfffe0000 - -typedef unsigned long rb_event_flag_t; -typedef void (*rb_event_hook_func_t)(rb_event_flag_t evflag, VALUE data, VALUE self, ID mid, VALUE klass); - -#define RB_EVENT_HOOKS_HAVE_CALLBACK_DATA 1 -void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data); -int rb_remove_event_hook(rb_event_hook_func_t func); - -/* locale insensitive functions */ - -#define rb_isascii(c) ((unsigned long)(c) < 128) -int rb_isalnum(int c); -int rb_isalpha(int c); -int rb_isblank(int c); -int rb_iscntrl(int c); -int rb_isdigit(int c); -int rb_isgraph(int c); -int rb_islower(int c); -int rb_isprint(int c); -int rb_ispunct(int c); -int rb_isspace(int c); -int rb_isupper(int c); -int rb_isxdigit(int c); -int rb_tolower(int c); -int rb_toupper(int c); - -#ifndef ISPRINT -#define ISASCII(c) rb_isascii((unsigned char)(c)) -#undef ISPRINT -#define ISPRINT(c) rb_isprint((unsigned char)(c)) -#define ISGRAPH(c) rb_isgraph((unsigned char)(c)) -#define ISSPACE(c) rb_isspace((unsigned char)(c)) -#define ISUPPER(c) rb_isupper((unsigned char)(c)) -#define ISLOWER(c) rb_islower((unsigned char)(c)) -#define ISALNUM(c) rb_isalnum((unsigned char)(c)) -#define ISALPHA(c) rb_isalpha((unsigned char)(c)) -#define ISDIGIT(c) rb_isdigit((unsigned char)(c)) -#define ISXDIGIT(c) rb_isxdigit((unsigned char)(c)) -#endif -#define TOUPPER(c) rb_toupper((unsigned char)(c)) -#define TOLOWER(c) rb_tolower((unsigned char)(c)) - -int st_locale_insensitive_strcasecmp(const char *s1, const char *s2); -int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n); -#define STRCASECMP(s1, s2) (st_locale_insensitive_strcasecmp((s1), (s2))) -#define STRNCASECMP(s1, s2, n) (st_locale_insensitive_strncasecmp((s1), (s2), (n))) - -unsigned long ruby_strtoul(const char *str, char **endptr, int base); -#define STRTOUL(str, endptr, base) (ruby_strtoul((str), (endptr), (base))) - -#define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();} - -PRINTF_ARGS(int ruby_snprintf(char *str, size_t n, char const *fmt, ...), 3, 4); -int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap); - -#ifndef RUBY_DONT_SUBST -#include "ruby/subst.h" -#endif - -/** - * @defgroup embed CRuby Embedding APIs - * CRuby interpreter APIs. These are APIs to embed MRI interpreter into your - * program. - * These functions are not a part of Ruby extension library API. - * Extension libraries of Ruby should not depend on these functions. - * @{ - */ - -/** @defgroup ruby1 ruby(1) implementation - * A part of the implementation of ruby(1) command. - * Other programs that embed Ruby interpreter do not always need to use these - * functions. - * @{ - */ - -void ruby_sysinit(int *argc, char ***argv); -void ruby_init(void); -void* ruby_options(int argc, char** argv); -int ruby_executable_node(void *n, int *status); -int ruby_run_node(void *n); - -/* version.c */ -void ruby_show_version(void); -void ruby_show_copyright(void); - - -/*! A convenience macro to call ruby_init_stack(). Must be placed just after - * variable declarations */ -#define RUBY_INIT_STACK \ - VALUE variable_in_this_stack_frame; \ - ruby_init_stack(&variable_in_this_stack_frame); -/*! @} */ - -#ifdef __ia64 -void ruby_init_stack(volatile VALUE*, void*); -#define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp()) -#else -void ruby_init_stack(volatile VALUE*); -#endif -#define Init_stack(addr) ruby_init_stack(addr) - -int ruby_setup(void); -int ruby_cleanup(volatile int); - -void ruby_finalize(void); -NORETURN(void ruby_stop(int)); - -void ruby_set_stack_size(size_t); -int ruby_stack_check(void); -size_t ruby_stack_length(VALUE**); - -int ruby_exec_node(void *n); - -void ruby_script(const char* name); -void ruby_set_script_name(VALUE name); - -void ruby_prog_init(void); -void ruby_set_argv(int, char**); -void *ruby_process_options(int, char**); -void ruby_init_loadpath(void); -void ruby_incpush(const char*); -void ruby_sig_finalize(void); - -/*! @} */ - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif -#endif /* RUBY_RUBY_H */ diff --git a/vendor/ruby/st.h b/vendor/ruby/st.h deleted file mode 100644 index 975da65..0000000 --- a/vendor/ruby/st.h +++ /dev/null @@ -1,154 +0,0 @@ -/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ - -/* @(#) st.h 5.1 89/12/14 */ - -#ifndef RUBY_ST_H -#define RUBY_ST_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/defines.h" - -RUBY_SYMBOL_EXPORT_BEGIN - -#if SIZEOF_LONG == SIZEOF_VOIDP -typedef unsigned long st_data_t; -#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP -typedef unsigned LONG_LONG st_data_t; -#else -# error ---->> st.c requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<---- -#endif -#define ST_DATA_T_DEFINED - -#ifndef CHAR_BIT -# ifdef HAVE_LIMITS_H -# include -# else -# define CHAR_BIT 8 -# endif -#endif -#ifndef _ -# define _(args) args -#endif -#ifndef ANYARGS -# ifdef __cplusplus -# define ANYARGS ... -# else -# define ANYARGS -# endif -#endif - -typedef struct st_table st_table; - -typedef st_data_t st_index_t; -typedef int st_compare_func(st_data_t, st_data_t); -typedef st_index_t st_hash_func(st_data_t); - -typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index_t) ? 1 : -1]; -#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP - -struct st_hash_type { - int (*compare)(ANYARGS /*st_data_t, st_data_t*/); /* st_compare_func* */ - st_index_t (*hash)(ANYARGS /*st_data_t*/); /* st_hash_func* */ -}; - -#define ST_INDEX_BITS (sizeof(st_index_t) * CHAR_BIT) - -#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR) && defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P) -# define ST_DATA_COMPATIBLE_P(type) \ - __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0) -#else -# define ST_DATA_COMPATIBLE_P(type) 0 -#endif - -struct st_table { - const struct st_hash_type *type; - st_index_t num_bins; - unsigned int entries_packed : 1; -#ifdef __GNUC__ - /* - * C spec says, - * A bit-field shall have a type that is a qualified or unqualified - * version of _Bool, signed int, unsigned int, or some other - * implementation-defined type. It is implementation-defined whether - * atomic types are permitted. - * In short, long and long long bit-field are implementation-defined - * feature. Therefore we want to supress a warning explicitly. - */ - __extension__ -#endif - st_index_t num_entries : ST_INDEX_BITS - 1; - union { - struct { - struct st_table_entry **bins; - struct st_table_entry *head, *tail; - } big; - struct { - struct st_packed_entry *entries; - st_index_t real_entries; - } packed; - } as; -}; - -#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0) - -enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; - -st_table *st_init_table(const struct st_hash_type *); -st_table *st_init_table_with_size(const struct st_hash_type *, st_index_t); -st_table *st_init_numtable(void); -st_table *st_init_numtable_with_size(st_index_t); -st_table *st_init_strtable(void); -st_table *st_init_strtable_with_size(st_index_t); -st_table *st_init_strcasetable(void); -st_table *st_init_strcasetable_with_size(st_index_t); -int st_delete(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ -int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t); -int st_shift(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ -int st_insert(st_table *, st_data_t, st_data_t); -int st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t)); -int st_lookup(st_table *, st_data_t, st_data_t *); -int st_get_key(st_table *, st_data_t, st_data_t *); -typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing); -int st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg); -int st_foreach(st_table *, int (*)(ANYARGS), st_data_t); -int st_foreach_check(st_table *, int (*)(ANYARGS), st_data_t, st_data_t); -int st_reverse_foreach(st_table *, int (*)(ANYARGS), st_data_t); -st_index_t st_keys(st_table *table, st_data_t *keys, st_index_t size); -st_index_t st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never); -st_index_t st_values(st_table *table, st_data_t *values, st_index_t size); -st_index_t st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never); -void st_add_direct(st_table *, st_data_t, st_data_t); -void st_free_table(st_table *); -void st_cleanup_safe(st_table *, st_data_t); -void st_clear(st_table *); -st_table *st_copy(st_table *); -int st_numcmp(st_data_t, st_data_t); -st_index_t st_numhash(st_data_t); -int st_locale_insensitive_strcasecmp(const char *s1, const char *s2); -int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n); -#define st_strcasecmp st_locale_insensitive_strcasecmp -#define st_strncasecmp st_locale_insensitive_strncasecmp -size_t st_memsize(const st_table *); -st_index_t st_hash(const void *ptr, size_t len, st_index_t h); -st_index_t st_hash_uint32(st_index_t h, uint32_t i); -st_index_t st_hash_uint(st_index_t h, st_index_t i); -st_index_t st_hash_end(st_index_t h); -st_index_t st_hash_start(st_index_t h); -#define st_hash_start(h) ((st_index_t)(h)) - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_ST_H */ diff --git a/vendor/ruby/subst.h b/vendor/ruby/subst.h deleted file mode 100644 index 1f0e6db..0000000 --- a/vendor/ruby/subst.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef RUBY_SUBST_H -#define RUBY_SUBST_H 1 - -#undef snprintf -#undef vsnprintf -#define snprintf ruby_snprintf -#define vsnprintf ruby_vsnprintf - -#ifdef BROKEN_CLOSE -#undef getpeername -#define getpeername ruby_getpeername -#undef getsockname -#define getsockname ruby_getsockname -#undef shutdown -#define shutdown ruby_shutdown -#undef close -#define close ruby_close -#endif -#endif diff --git a/vendor/ruby/thread.h b/vendor/ruby/thread.h deleted file mode 100644 index 550f678..0000000 --- a/vendor/ruby/thread.h +++ /dev/null @@ -1,45 +0,0 @@ -/********************************************************************** - - thread.h - - - $Author: matz $ - created at: Tue Jul 10 17:35:43 JST 2012 - - Copyright (C) 2007 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_THREAD_H -#define RUBY_THREAD_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/intern.h" - -RUBY_SYMBOL_EXPORT_BEGIN - -void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1); - -void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1, - rb_unblock_function_t *ubf, void *data2); -void *rb_thread_call_without_gvl2(void *(*func)(void *), void *data1, - rb_unblock_function_t *ubf, void *data2); - -#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_AFTER 0x01 -#define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_ - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_THREAD_H */ diff --git a/vendor/ruby/util.h b/vendor/ruby/util.h deleted file mode 100644 index 6521493..0000000 --- a/vendor/ruby/util.h +++ /dev/null @@ -1,95 +0,0 @@ -/********************************************************************** - - util.h - - - $Author: nobu $ - created at: Thu Mar 9 11:55:53 JST 1995 - - Copyright (C) 1993-2007 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_UTIL_H -#define RUBY_UTIL_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -#include "ruby/defines.h" -#ifdef RUBY_EXTCONF_H -#include RUBY_EXTCONF_H -#endif - -#ifndef _ -#ifdef __cplusplus -# ifndef HAVE_PROTOTYPES -# define HAVE_PROTOTYPES 1 -# endif -# ifndef HAVE_STDARG_PROTOTYPES -# define HAVE_STDARG_PROTOTYPES 1 -# endif -#endif -#ifdef HAVE_PROTOTYPES -# define _(args) args -#else -# define _(args) () -#endif -#ifdef HAVE_STDARG_PROTOTYPES -# define __(args) args -#else -# define __(args) () -#endif -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -#define scan_oct(s,l,e) ((int)ruby_scan_oct((s),(l),(e))) -unsigned long ruby_scan_oct(const char *, size_t, size_t *); -#define scan_hex(s,l,e) ((int)ruby_scan_hex((s),(l),(e))) -unsigned long ruby_scan_hex(const char *, size_t, size_t *); - -void ruby_qsort(void *, const size_t, const size_t, - int (*)(const void *, const void *, void *), void *); - -void ruby_setenv(const char *, const char *); -void ruby_unsetenv(const char *); -#undef setenv -#undef unsetenv -#define setenv(name,val) ruby_setenv((name),(val)) -#define unsetenv(name,val) ruby_unsetenv(name) - -char *ruby_strdup(const char *); -#undef strdup -#define strdup(s) ruby_strdup(s) - -char *ruby_getcwd(void); -#define my_getcwd() ruby_getcwd() - -double ruby_strtod(const char *, char **); -#undef strtod -#define strtod(s,e) ruby_strtod((s),(e)) - -#if defined _MSC_VER && _MSC_VER >= 1300 -#pragma warning(push) -#pragma warning(disable:4723) -#endif -#if defined _MSC_VER && _MSC_VER >= 1300 -#pragma warning(pop) -#endif - -void ruby_each_words(const char *, void (*)(const char*, int, void*), void *); - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_UTIL_H */ diff --git a/vendor/ruby/version.h b/vendor/ruby/version.h deleted file mode 100644 index 18c0e5a..0000000 --- a/vendor/ruby/version.h +++ /dev/null @@ -1,74 +0,0 @@ -/********************************************************************** - - ruby/version.h - - - $Author: nobu $ - created at: Wed May 13 12:56:56 JST 2009 - - Copyright (C) 1993-2009 Yukihiro Matsumoto - Copyright (C) 2000 Network Applied Communication Laboratory, Inc. - Copyright (C) 2000 Information-technology Promotion Agency, Japan - -**********************************************************************/ - -/* - * This file contains only - * - never-changable informations, and - * - interfaces accessible from extension libraries. - * - * Never try to check RUBY_VERSION_CODE etc in extension libraries, - * check the features with mkmf.rb instead. - */ - -#ifndef RUBY_VERSION_H -#define RUBY_VERSION_H 1 - -/* The origin. */ -#define RUBY_AUTHOR "Yukihiro Matsumoto" -#define RUBY_BIRTH_YEAR 1993 -#define RUBY_BIRTH_MONTH 2 -#define RUBY_BIRTH_DAY 24 - -/* API version */ -#define RUBY_API_VERSION_MAJOR 2 -#define RUBY_API_VERSION_MINOR 1 -#define RUBY_API_VERSION_TEENY 0 -#define RUBY_API_VERSION_CODE (RUBY_API_VERSION_MAJOR*10000+RUBY_API_VERSION_MINOR*100+RUBY_API_VERSION_TEENY) - -#ifdef RUBY_EXTERN -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -/* - * Interfaces from extension libraries. - * - * Before using these infos, think thrice whether they are really - * necessary or not, and if the answer was yes, think twice a week - * later again. - */ -RUBY_EXTERN const int ruby_api_version[3]; -RUBY_EXTERN const char ruby_version[]; -RUBY_EXTERN const char ruby_release_date[]; -RUBY_EXTERN const char ruby_platform[]; -RUBY_EXTERN const int ruby_patchlevel; -RUBY_EXTERN const char ruby_description[]; -RUBY_EXTERN const char ruby_copyright[]; -RUBY_EXTERN const char ruby_engine[]; - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif -#endif - -#endif diff --git a/vendor/ruby/vm.h b/vendor/ruby/vm.h deleted file mode 100644 index 6b7b81c..0000000 --- a/vendor/ruby/vm.h +++ /dev/null @@ -1,64 +0,0 @@ -/********************************************************************** - - ruby/vm.h - - - $Author: nobu $ - created at: Sat May 31 15:17:36 2008 - - Copyright (C) 2008 Yukihiro Matsumoto - -**********************************************************************/ - -#ifndef RUBY_VM_H -#define RUBY_VM_H 1 - -#if defined(__cplusplus) -extern "C" { -#if 0 -} /* satisfy cc-mode */ -#endif -#endif - -RUBY_SYMBOL_EXPORT_BEGIN - -/* Place holder. - * - * We will prepare VM creation/control APIs on 1.9.2 or later. - * If you have an interest about it, please see mvm branch. - * http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/mvm/ - */ - -/* VM type declaration */ -typedef struct rb_vm_struct ruby_vm_t; - -/* core API */ -int ruby_vm_destruct(ruby_vm_t *vm); - -/** - * ruby_vm_at_exit registers a function _func_ to be invoked when a VM - * passed away. Functions registered this way runs in reverse order - * of registration, just like END {} block does. The difference is - * its timing to be triggered. ruby_vm_at_exit functions runs when a - * VM _passed_ _away_, while END {} blocks runs just _before_ a VM - * _is_ _passing_ _away_. - * - * You cannot register a function to another VM than where you are in. - * So where to register is intuitive, omitted. OTOH the argument - * _func_ cannot know which VM it is in because at the time of - * invocation, the VM has already died and there is no execution - * context. The VM itself is passed as the first argument to it. - * - * @param[in] func the function to register. - */ -void ruby_vm_at_exit(void(*func)(ruby_vm_t *)); - -RUBY_SYMBOL_EXPORT_END - -#if defined(__cplusplus) -#if 0 -{ /* satisfy cc-mode */ -#endif -} /* extern "C" { */ -#endif - -#endif /* RUBY_VM_H */ diff --git a/vendor/x86_64-darwin13.0/ruby/config.h b/vendor/x86_64-darwin13.0/ruby/config.h deleted file mode 100644 index 0b59635..0000000 --- a/vendor/x86_64-darwin13.0/ruby/config.h +++ /dev/null @@ -1,326 +0,0 @@ -#ifndef INCLUDE_RUBY_CONFIG_H -#define INCLUDE_RUBY_CONFIG_H 1 -/* confdefs.h */ -#define CANONICALIZATION_FOR_MATHN 1 -#define STDC_HEADERS 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRING_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_INTTYPES_H 1 -#define HAVE_STDINT_H 1 -#define HAVE_UNISTD_H 1 -#define __EXTENSIONS__ 1 -#define _ALL_SOURCE 1 -#define _GNU_SOURCE 1 -#define _POSIX_PTHREAD_SEMANTICS 1 -#define _TANDEM_SOURCE 1 -#define RUBY_SYMBOL_EXPORT_BEGIN _Pragma("GCC visibility push(default)") -#define RUBY_SYMBOL_EXPORT_END _Pragma("GCC visibility pop") -#define HAVE_CRT_EXTERNS_H 1 -#define HAVE_LIBDL 1 -#define HAVE_DIRENT_H 1 -#define HAVE__BOOL 1 -#define HAVE_STDBOOL_H 1 -#define HAVE_SYS_WAIT_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_SYS_FILE_H 1 -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_SYS_SYSCALL_H 1 -#define HAVE_FCNTL_H 1 -#define HAVE_SYS_FCNTL_H 1 -#define HAVE_SYS_SELECT_H 1 -#define HAVE_SYS_TIME_H 1 -#define HAVE_SYS_TIMES_H 1 -#define HAVE_SYS_PARAM_H 1 -#define HAVE_PWD_H 1 -#define HAVE_GRP_H 1 -#define HAVE_UTIME_H 1 -#define HAVE_SYS_RESOURCE_H 1 -#define HAVE_FLOAT_H 1 -#define HAVE_LANGINFO_H 1 -#define HAVE_LOCALE_H 1 -#define HAVE_TIME_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_MALLOC_MALLOC_H 1 -#define HAVE_LONG_LONG 1 -#define HAVE_OFF_T 1 -#define SIZEOF_INT 4 -#define SIZEOF_SHORT 2 -#define SIZEOF_LONG 8 -#define SIZEOF_LONG_LONG 8 -#define SIZEOF___INT64 0 -#define SIZEOF___INT128 16 -#define SIZEOF_OFF_T 8 -#define SIZEOF_VOIDP 8 -#define SIZEOF_FLOAT 4 -#define SIZEOF_DOUBLE 8 -#define SIZEOF_TIME_T 8 -#define SIZEOF_CLOCK_T 8 -#define PRI_LL_PREFIX "ll" -#define rb_pid_t pid_t -#define SIGNEDNESS_OF_PID_T -1 -#define PIDT2NUM(v) INT2NUM(v) -#define NUM2PIDT(v) NUM2INT(v) -#define PRI_PIDT_PREFIX PRI_INT_PREFIX -#define rb_uid_t uid_t -#define SIGNEDNESS_OF_UID_T +1 -#define UIDT2NUM(v) UINT2NUM(v) -#define NUM2UIDT(v) NUM2UINT(v) -#define PRI_UIDT_PREFIX PRI_INT_PREFIX -#define rb_gid_t gid_t -#define SIGNEDNESS_OF_GID_T +1 -#define GIDT2NUM(v) UINT2NUM(v) -#define NUM2GIDT(v) NUM2UINT(v) -#define PRI_GIDT_PREFIX PRI_INT_PREFIX -#define rb_time_t time_t -#define SIGNEDNESS_OF_TIME_T -1 -#define TIMET2NUM(v) LONG2NUM(v) -#define NUM2TIMET(v) NUM2LONG(v) -#define PRI_TIMET_PREFIX PRI_LONG_PREFIX -#define rb_dev_t dev_t -#define SIGNEDNESS_OF_DEV_T -1 -#define DEVT2NUM(v) INT2NUM(v) -#define NUM2DEVT(v) NUM2INT(v) -#define PRI_DEVT_PREFIX PRI_INT_PREFIX -#define rb_mode_t mode_t -#define SIGNEDNESS_OF_MODE_T +1 -#define MODET2NUM(v) UINT2NUM(v) -#define NUM2MODET(v) NUM2UINT(v) -#define PRI_MODET_PREFIX PRI_INT_PREFIX -#define rb_rlim_t rlim_t -#define SIGNEDNESS_OF_RLIM_T +1 -#define RLIM2NUM(v) ULL2NUM(v) -#define NUM2RLIM(v) NUM2ULL(v) -#define PRI_RLIM_PREFIX PRI_LL_PREFIX -#define rb_off_t off_t -#define SIGNEDNESS_OF_OFF_T -1 -#define OFFT2NUM(v) LL2NUM(v) -#define NUM2OFFT(v) NUM2LL(v) -#define PRI_OFFT_PREFIX PRI_LL_PREFIX -#define rb_clockid_t int -#define SIGNEDNESS_OF_CLOCKID_T -1 -#define CLOCKID2NUM(v) INT2NUM(v) -#define NUM2CLOCKID(v) NUM2INT(v) -#define PRI_CLOCKID_PREFIX PRI_INT_PREFIX -#define HAVE_PROTOTYPES 1 -#define TOKEN_PASTE(x,y) x##y -#define STRINGIZE(expr) STRINGIZE0(expr) -#define HAVE_STDARG_PROTOTYPES 1 -#define HAVE_VA_ARGS_MACRO 1 -#define NORETURN(x) __attribute__ ((noreturn)) x -#define DEPRECATED(x) __attribute__ ((deprecated)) x -#define NOINLINE(x) __attribute__ ((noinline)) x -#define FUNC_CDECL(x) __attribute__ ((cdecl)) x -#define HAVE_GCC_ATOMIC_BUILTINS 1 -#define HAVE_GCC_SYNC_BUILTINS 1 -#define UNREACHABLE __builtin_unreachable() -#define RUBY_FUNC_EXPORTED __attribute__ ((visibility("default"))) extern -#define RUBY_FUNCTION_NAME_STRING __func__ -#define HAVE_DECL_SYS_NERR 1 -#define HAVE_DECL_GETENV 1 -#define SIZEOF_SIZE_T 8 -#define SIZEOF_PTRDIFF_T 8 -#define PRI_SIZE_PREFIX "z" -#define PRI_PTRDIFF_PREFIX "t" -#define HAVE_STRUCT_STAT_ST_BLKSIZE 1 -#define HAVE_ST_BLKSIZE 1 -#define HAVE_STRUCT_STAT_ST_BLOCKS 1 -#define HAVE_ST_BLOCKS 1 -#define HAVE_STRUCT_STAT_ST_RDEV 1 -#define HAVE_ST_RDEV 1 -#define SIZEOF_STRUCT_STAT_ST_SIZE SIZEOF_LONG -#define SIZEOF_STRUCT_STAT_ST_BLOCKS SIZEOF_LONG -#define HAVE_STRUCT_STAT_ST_ATIMESPEC 1 -#define HAVE_STRUCT_STAT_ST_MTIMESPEC 1 -#define HAVE_STRUCT_STAT_ST_CTIMESPEC 1 -#define HAVE_STRUCT_TIMEVAL 1 -#define SIZEOF_STRUCT_TIMEVAL_TV_SEC SIZEOF_TIME_T -#define HAVE_STRUCT_TIMESPEC 1 -#define HAVE_STRUCT_TIMEZONE 1 -#define HAVE_RB_FD_INIT 1 -#define HAVE_INT8_T 1 -#define SIZEOF_INT8_T 1 -#define HAVE_UINT8_T 1 -#define SIZEOF_UINT8_T 1 -#define HAVE_INT16_T 1 -#define SIZEOF_INT16_T 2 -#define HAVE_UINT16_T 1 -#define SIZEOF_UINT16_T 2 -#define HAVE_INT32_T 1 -#define SIZEOF_INT32_T 4 -#define HAVE_UINT32_T 1 -#define SIZEOF_UINT32_T 4 -#define HAVE_INT64_T 1 -#define SIZEOF_INT64_T 8 -#define HAVE_UINT64_T 1 -#define SIZEOF_UINT64_T 8 -#define HAVE_INT128_T 1 -#define int128_t __int128 -#define SIZEOF_INT128_T SIZEOF___INT128 -#define HAVE_UINT128_T 1 -#define uint128_t unsigned __int128 -#define SIZEOF_UINT128_T SIZEOF_UNSIGNED___INT128 -#define HAVE_INTPTR_T 1 -#define SIZEOF_INTPTR_T 8 -#define HAVE_UINTPTR_T 1 -#define SIZEOF_UINTPTR_T 8 -#define HAVE_SSIZE_T 1 -#define SIZEOF_SSIZE_T 8 -#define GETGROUPS_T gid_t -#define RETSIGTYPE void -#define HAVE_ALLOCA_H 1 -#define HAVE_ALLOCA 1 -#define HAVE_DUP2 1 -#define HAVE_MEMMOVE 1 -#define HAVE_STRERROR 1 -#define HAVE_STRCHR 1 -#define HAVE_STRSTR 1 -#define HAVE_CRYPT 1 -#define HAVE_FLOCK 1 -#define HAVE_ISNAN 1 -#define HAVE_FINITE 1 -#define HAVE_ISINF 1 -#define HAVE_HYPOT 1 -#define HAVE_ACOSH 1 -#define HAVE_ERF 1 -#define HAVE_TGAMMA 1 -#define HAVE_LGAMMA_R 1 -#define HAVE_CBRT 1 -#define HAVE_STRLCPY 1 -#define HAVE_STRLCAT 1 -#define HAVE_FFS 1 -#define SPT_TYPE SPT_REUSEARGV -#define HAVE_SIGNBIT 1 -#define HAVE___SYSCALL 1 -#define HAVE__LONGJMP 1 -#define HAVE__SETJMP 1 -#define HAVE_CHROOT 1 -#define HAVE_COSH 1 -#define HAVE_DLOPEN 1 -#define HAVE_DUP 1 -#define HAVE_ENDGRENT 1 -#define HAVE_FCHMOD 1 -#define HAVE_FCHOWN 1 -#define HAVE_FCNTL 1 -#define HAVE_FMOD 1 -#define HAVE_FORK 1 -#define HAVE_FSYNC 1 -#define HAVE_FTRUNCATE 1 -#define HAVE_GETCWD 1 -#define HAVE_GETGRNAM_R 1 -#define HAVE_GETGROUPS 1 -#define HAVE_GETPGID 1 -#define HAVE_GETPGRP 1 -#define HAVE_GETPRIORITY 1 -#define HAVE_GETPWNAM_R 1 -#define HAVE_GETRLIMIT 1 -#define HAVE_GETSID 1 -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_GMTIME_R 1 -#define HAVE_INITGROUPS 1 -#define HAVE_IOCTL 1 -#define HAVE_ISSETUGID 1 -#define HAVE_KILLPG 1 -#define HAVE_LCHMOD 1 -#define HAVE_LCHOWN 1 -#define HAVE_LINK 1 -#define HAVE_LLABS 1 -#define HAVE_LOCKF 1 -#define HAVE_LOG2 1 -#define HAVE_LSTAT 1 -#define HAVE_MALLOC_SIZE 1 -#define HAVE_MBLEN 1 -#define HAVE_MKTIME 1 -#define HAVE_POLL 1 -#define HAVE_POSIX_MEMALIGN 1 -#define HAVE_PREAD 1 -#define HAVE_READLINK 1 -#define HAVE_ROUND 1 -#define HAVE_SEEKDIR 1 -#define HAVE_SENDFILE 1 -#define HAVE_SETEGID 1 -#define HAVE_SETENV 1 -#define HAVE_SETEUID 1 -#define HAVE_SETGID 1 -#define HAVE_SETGROUPS 1 -#define HAVE_SETPGID 1 -#define HAVE_SETPGRP 1 -#define HAVE_SETREGID 1 -#define HAVE_SETREUID 1 -#define HAVE_SETRGID 1 -#define HAVE_SETRLIMIT 1 -#define HAVE_SETRUID 1 -#define HAVE_SETSID 1 -#define HAVE_SETUID 1 -#define HAVE_SHUTDOWN 1 -#define HAVE_SIGACTION 1 -#define HAVE_SIGALTSTACK 1 -#define HAVE_SIGPROCMASK 1 -#define HAVE_SINH 1 -#define HAVE_SYMLINK 1 -#define HAVE_SYSCALL 1 -#define HAVE_SYSCONF 1 -#define HAVE_TANH 1 -#define HAVE_TELLDIR 1 -#define HAVE_TIMEGM 1 -#define HAVE_TIMES 1 -#define HAVE_TRUNCATE 1 -#define HAVE_UNSETENV 1 -#define HAVE_UTIMES 1 -#define HAVE_WAIT4 1 -#define HAVE_WAITPID 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP16 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP32 1 -#define HAVE_BUILTIN___BUILTIN_BSWAP64 1 -#define HAVE_BUILTIN___BUILTIN_CLZ 1 -#define HAVE_BUILTIN___BUILTIN_CLZL 1 -#define HAVE_BUILTIN___BUILTIN_CLZLL 1 -#define HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR 1 -#define HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P 1 -#define RUBY_SETJMP(env) _setjmp(env) -#define RUBY_LONGJMP(env,val) _longjmp(env,val) -#define RUBY_JMP_BUF jmp_buf -#define HAVE_STRUCT_TM_TM_ZONE 1 -#define HAVE_TM_ZONE 1 -#define HAVE_STRUCT_TM_TM_GMTOFF 1 -#define HAVE_DAYLIGHT 1 -#define HAVE_VAR_TIMEZONE 1 -#define TYPEOF_VAR_TIMEZONE long -#define HAVE_TIMEZONE 1 -#define TIMEZONE_VOID 1 -#define NEGATIVE_TIME_T 1 -#define POSIX_SIGNAL 1 -#define RSHIFT(x,y) ((x)>>(int)(y)) -#define FILE_COUNT _r -#define FILE_READPTR _p -#define SIZEOF_STRUCT_STAT_ST_INO SIZEOF_LONG -#define HAVE__SC_CLK_TCK 1 -#define STACK_GROW_DIRECTION -1 -#define _REENTRANT 1 -#define _THREAD_SAFE 1 -#define HAVE_LIBPTHREAD 1 -#define HAVE_SCHED_YIELD 1 -#define HAVE_PTHREAD_ATTR_SETINHERITSCHED 1 -#define HAVE_PTHREAD_ATTR_GETSTACK 1 -#define HAVE_PTHREAD_GET_STACKADDR_NP 1 -#define HAVE_PTHREAD_GET_STACKSIZE_NP 1 -#define HAVE_PTHREAD_COND_INIT 1 -#define HAVE_PTHREAD_CONDATTR_INIT 1 -#define HAVE_PTHREAD_SIGMASK 1 -#define HAVE_PTHREAD_SETNAME_NP 1 -#define HAVE_PTHREAD_ATTR_INIT 1 -#define SET_THREAD_NAME(name) pthread_setname_np(name) -#define HAVE_EXECINFO_H 1 -#define HAVE_BACKTRACE 1 -#define BROKEN_BACKTRACE 1 -#define HAVE_DLADDR 1 -#define DLEXT_MAXLEN 7 -#define DLEXT ".bundle" -#define EXTSTATIC 1 -#define HAVE_PTHREAD_H 1 -#define LOAD_RELATIVE 1 -#define RUBY_PLATFORM "x86_64-darwin13.0" -#endif /* INCLUDE_RUBY_CONFIG_H */ From 927a17c54c08e4967b277b05224560e15264fd7d Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 11:20:38 -0400 Subject: [PATCH 03/11] removing cached makefile --- .gitignore | 1 + ext/rs_232/Makefile | 239 -------------------------------------------- 2 files changed, 1 insertion(+), 239 deletions(-) delete mode 100644 ext/rs_232/Makefile diff --git a/.gitignore b/.gitignore index f1b5581..46c661e 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ rspec.xml ruby-rs-232.xcodeproj script/ruby /vendor +ext/rs_232/Makefile diff --git a/ext/rs_232/Makefile b/ext/rs_232/Makefile deleted file mode 100644 index 90faa0e..0000000 --- a/ext/rs_232/Makefile +++ /dev/null @@ -1,239 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@:) -ECHO = $(ECHO1:0=@echo) - -#### Start of system configuration section. #### - -srcdir = . -topdir = /Users/employee/.rvm/rubies/ruby-2.1.2/include/ruby-2.1.0 -hdrdir = $(topdir) -arch_hdrdir = /Users/employee/.rvm/rubies/ruby-2.1.2/include/ruby-2.1.0/x86_64-darwin13.0 -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby: $(srcdir)/posix -prefix = $(DESTDIR)/Users/employee/.rvm/rubies/ruby-2.1.2 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(sitelibdir)/$(sitearch) -sitelibdir = $(sitedir)/$(ruby_version) -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(DESTDIR)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_A) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static -framework CoreFoundation -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -CCDLFLAGS = -fno-common -CFLAGS = $(CCDLFLAGS) -O3 -I/Users/travis/.sm/pkg/active/include -fPIC -mmacosx-version-min=10.7 -pipe -DDEBUG -g -Wall -g -DOS_DARWIN $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -I$(srcdir)/posix -DEFS = -CPPFLAGS = -DHAVE_RUBY_H -DHAVE_STDIO_H -DHAVE_TERMIOS_H -DHAVE_UNISTD_H -DHAVE_STRING_H -DHAVE_FCNTL_H -DHAVE_ERRNO_H -DHAVE_SYS_IOCTL_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(cxxflags) $(ARCH_FLAG) -ldflags = -L. -L/Users/travis/.sm/pkg/active/lib -fPIC -Bstatic -fstack-protector -dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress -ARCH_FLAG = -arch x86_64 -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -dynamic -bundle -LDSHAREDXX = $(CXX) -dynamic -bundle -AR = ar -EXEEXT = - -RUBY_INSTALL_NAME = ruby -RUBY_SO_NAME = ruby -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-darwin13.0 -sitearch = $(arch) -ruby_version = 2.1.0 -ruby = $(bindir)/ruby -RUBY = $(ruby) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = $(RUBY) -run -e rm -- -rf -RMDIRS = rmdir -p -MAKEDIRS = mkdir -p -INSTALL = /usr/bin/install -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = - -libpath = . $(libdir) -LIBPATH = -L. -L$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = -LOCAL_LIBS = -LIBS = -lstdc++ -lpthread -ldl -lobjc -ORIG_SRCS = Constants.c Option.cpp Rs232.cpp -SRCS = $(ORIG_SRCS) Option.c Constants.c Port.c Rs232.c -OBJS = Option.o Constants.o Port.o Rs232.o -HDRS = $(srcdir)/Constants.h $(srcdir)/Rs232.h $(srcdir)/Structs.h $(srcdir)/Option.hpp -TARGET = rs_232_native -TARGET_NAME = rs_232_native -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).bundle -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) -ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) - -TARGET_SO = $(DLLIB) -CLEANLIBS = $(TARGET).bundle -CLEANOBJS = *.o *.bak - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.time - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb install-rb-default -install-rb-default: pre-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -pre-install-rb-default: - $(ECHO) installing default rs_232_native libraries -$(TIMESTAMP_DIR)/.RUBYARCHDIR.time: - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .C .o - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.C.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $< - -$(DLLIB): $(OBJS) Makefile - $(ECHO) linking shared-object $(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - $(Q) $(POSTLINK) - - - -$(OBJS): $(HDRS) $(ruby_headers) From 352bfececdbb554335de801ace98de34f2ba82ad Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 11:25:36 -0400 Subject: [PATCH 04/11] refactoring ruby pub interface --- lib/rs_232.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/rs_232.rb b/lib/rs_232.rb index f715380..82efc84 100644 --- a/lib/rs_232.rb +++ b/lib/rs_232.rb @@ -18,8 +18,8 @@ module Rs232 # port.read(15) # #=> 'Hello, World!!!' # - def self.new(port) - Impl.new(port) + def new_serial_port(port, opts = {}, &block) + Impl.new(port, opts, &block) end # the following class represents ruby public interface @@ -43,22 +43,22 @@ class Impl extend Forwardable def_delegators :@impl, - :line_status, - :set_rts, - :set_dtr, :read, :write, :flush, :close, - :option, #todo: remove - :open? + :open?, + :set_rts, + :set_dtr def initialize(name, opts = {}) @impl = Rs232::Native.new(name) @opts = STD_OPTS.merge(opts).freeze freeze + yield self if block_given? end + # @raise RuntimeError in case of open error def connect return self if open? @impl.open.tap do |io| From 447223cdcb252940ac4804e112cdd3516342a7a9 Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 11:26:06 -0400 Subject: [PATCH 05/11] trying to perform pre release --- lib/rs_232/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index 8b019a6..61a02e3 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '3.0.0' + VERSION = '3.0.0.pre1' end From b60b4a8a0abeac3bf4182bab6422938ea569dec8 Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 13:55:55 -0400 Subject: [PATCH 06/11] Bump to 3.0.0.pre2 --- ext/rs_232/{constants.c => Constants.c} | 0 ext/rs_232/{constants.h => Constants.h} | 0 ext/rs_232/Rs232.cpp | 1 + ext/rs_232/{structs.h => Structs.h} | 0 ext/rs_232/extconf.rb | 4 ++-- ext/rs_232/posix/{port.c => Port.c} | 0 ext/rs_232/posix/{port.h => Port.h} | 0 ext/rs_232/windows/{port.c => Port.c} | 0 ext/rs_232/windows/{port.h => Port.h} | 0 lib/rs_232/version.rb | 2 +- rs_232.gemspec | 2 +- 11 files changed, 5 insertions(+), 4 deletions(-) rename ext/rs_232/{constants.c => Constants.c} (100%) rename ext/rs_232/{constants.h => Constants.h} (100%) rename ext/rs_232/{structs.h => Structs.h} (100%) rename ext/rs_232/posix/{port.c => Port.c} (100%) rename ext/rs_232/posix/{port.h => Port.h} (100%) rename ext/rs_232/windows/{port.c => Port.c} (100%) rename ext/rs_232/windows/{port.h => Port.h} (100%) diff --git a/ext/rs_232/constants.c b/ext/rs_232/Constants.c similarity index 100% rename from ext/rs_232/constants.c rename to ext/rs_232/Constants.c diff --git a/ext/rs_232/constants.h b/ext/rs_232/Constants.h similarity index 100% rename from ext/rs_232/constants.h rename to ext/rs_232/Constants.h diff --git a/ext/rs_232/Rs232.cpp b/ext/rs_232/Rs232.cpp index 1dc2108..4768621 100644 --- a/ext/rs_232/Rs232.cpp +++ b/ext/rs_232/Rs232.cpp @@ -10,6 +10,7 @@ * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * + */ /* * @author Roman Lishtaba diff --git a/ext/rs_232/structs.h b/ext/rs_232/Structs.h similarity index 100% rename from ext/rs_232/structs.h rename to ext/rs_232/Structs.h diff --git a/ext/rs_232/extconf.rb b/ext/rs_232/extconf.rb index 7884d9d..c8c8cf1 100644 --- a/ext/rs_232/extconf.rb +++ b/ext/rs_232/extconf.rb @@ -33,7 +33,7 @@ have_header('ruby.h') have_header('stdio.h') -have_library( 'stdc++' ); +have_library( 'stdc++' ) if OS == 'windows' $VPATH << '$(srcdir)/windows' @@ -56,7 +56,7 @@ fail "RS-233 implementation wasn't been tested for #{OS} platform." end -$objs = %w(Option.o Constants.o Port.o Rs232.o).freeze +$objs = %w(Constants.o Port.o Rs232.o).freeze $CFLAGS += " -DOS_#{OS.upcase}" diff --git a/ext/rs_232/posix/port.c b/ext/rs_232/posix/Port.c similarity index 100% rename from ext/rs_232/posix/port.c rename to ext/rs_232/posix/Port.c diff --git a/ext/rs_232/posix/port.h b/ext/rs_232/posix/Port.h similarity index 100% rename from ext/rs_232/posix/port.h rename to ext/rs_232/posix/Port.h diff --git a/ext/rs_232/windows/port.c b/ext/rs_232/windows/Port.c similarity index 100% rename from ext/rs_232/windows/port.c rename to ext/rs_232/windows/Port.c diff --git a/ext/rs_232/windows/port.h b/ext/rs_232/windows/Port.h similarity index 100% rename from ext/rs_232/windows/port.h rename to ext/rs_232/windows/Port.h diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index 61a02e3..36c8eec 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '3.0.0.pre1' + VERSION = '3.0.0.pre2' end diff --git a/rs_232.gemspec b/rs_232.gemspec index d64ca50..a9fc1a1 100644 --- a/rs_232.gemspec +++ b/rs_232.gemspec @@ -31,7 +31,7 @@ Rubygem offering simple API in order to start using Serial Port communication in spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ['lib'] - spec.extensions = 'ext/extconf.rb' + spec.extensions = 'ext/rs_232/extconf.rb' spec.add_development_dependency 'bundler' spec.add_development_dependency 'rake', '~> 10.0' From e35f984a3933468d5d9f766bb6be7198fb51d6db Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 16:00:25 -0400 Subject: [PATCH 07/11] getting ready for the prerelease --- lib/rs_232.rb | 4 ++-- lib/rs_232/version.rb | 2 +- script/console | 5 ++--- spec/lib/constants_spec.rb | 12 ++++++------ spec/support/fixtures.rb | 2 +- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/lib/rs_232.rb b/lib/rs_232.rb index 82efc84..9d8deb3 100644 --- a/lib/rs_232.rb +++ b/lib/rs_232.rb @@ -73,7 +73,7 @@ def connect end def settings - {}.tap { |o| + {}.tap do |o| o[:baud_rate] = @impl.baud_rate o[:parity] = @impl.parity o[:data_bits] = @impl.data_bits @@ -81,7 +81,7 @@ def settings o[:flow_control] = @impl.flow_control o[:timeout] = @impl.timeout o[:line_status] = @impl.line_status - }.freeze + end.freeze end def open? diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index 36c8eec..1db5ae4 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '3.0.0.pre2' + VERSION = '3.0.0.pre2'.freeze end diff --git a/script/console b/script/console index 965f783..da15006 100755 --- a/script/console +++ b/script/console @@ -1,7 +1,7 @@ #!/usr/bin/env ruby -$:<< File.join(File.dirname(__FILE__), '../ext/rs_232') -$:<< File.join(File.dirname(__FILE__), '../lib') +$LOAD_PATH << File.join(File.dirname(__FILE__), '../ext/rs_232') +$LOAD_PATH << File.join(File.dirname(__FILE__), '../lib') require 'irb' require 'irb/completion' @@ -9,4 +9,3 @@ require 'rs_232' $stdout.puts "Interactive session loaded. (Rs-232 v#{Rs232::VERSION})" IRB.start - diff --git a/spec/lib/constants_spec.rb b/spec/lib/constants_spec.rb index ab81ac4..687151e 100644 --- a/spec/lib/constants_spec.rb +++ b/spec/lib/constants_spec.rb @@ -2,12 +2,12 @@ describe Rs232 do EXPECTED_CONSTANTS = [ - :BAUD_110, :BAUD_300, :BAUD_600, :BAUD_1200, - :BAUD_2400, :BAUD_4800, :BAUD_9600, :BAUD_19200, - :BAUD_38400, :BAUD_57600, :BAUD_115200, :DATA_BITS_5, - :DATA_BITS_6, :DATA_BITS_7, :DATA_BITS_8, :PAR_NONE, - :PAR_ODD, :PAR_EVEN, :STOP_BITS_1, :STOP_BITS_3, - :FLOW_OFF, :FLOW_HARDWARE, :FLOW_XONXOFF + :BAUD_110, :BAUD_300, :BAUD_600, :BAUD_1200, + :BAUD_2400, :BAUD_4800, :BAUD_9600, :BAUD_19200, + :BAUD_38400, :BAUD_57600, :BAUD_115200, :DATA_BITS_5, + :DATA_BITS_6, :DATA_BITS_7, :DATA_BITS_8, :PAR_NONE, + :PAR_ODD, :PAR_EVEN, :STOP_BITS_1, :STOP_BITS_3, + :FLOW_OFF, :FLOW_HARDWARE, :FLOW_XONXOFF ].sort.freeze it 'should have an VERSION constant' do diff --git a/spec/support/fixtures.rb b/spec/support/fixtures.rb index 8533e39..7111926 100644 --- a/spec/support/fixtures.rb +++ b/spec/support/fixtures.rb @@ -18,6 +18,6 @@ def binary_fixture(name) end def fixtures_path - Pathname(absolute_fixture_path '') + Pathname(absolute_fixture_path('')) end end From 66a3589b3f0be6699a11965df15f6602f20a4bf4 Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 22 Jun 2016 20:13:43 -0400 Subject: [PATCH 08/11] Updating public interface & docs --- README.md | 113 ++++++-------------------------------- ext/rs_232/posix/Port.c | 2 +- ext/rs_232/windows/Port.c | 4 +- lib/rs_232.rb | 47 ++++++++++------ lib/rs_232/version.rb | 2 +- 5 files changed, 51 insertions(+), 117 deletions(-) diff --git a/README.md b/README.md index 2e32050..5796361 100644 --- a/README.md +++ b/README.md @@ -23,102 +23,23 @@ Or install it yourself as: See `examples` folder for details. ```ruby - class SerialPortAdapter - include CommPort - - attr_reader :interface - private :interface - - # constructor with default params - # by default port will be configured with: - # - # baud_rate = 115200 # BAUD_115200 - # data_bits = 8 # DATA_BITS_8 - # parity = 0 # PAR_NONE - # stop_bits = 1 # STOP_BITS_1 - # flow_control = 0 # FLOW_OFF - # - # see other public constants on CommPort namespace - # - def initialize(port, options = {}) - @port = port - @options = options - @open = false - @interface = Rs232.new(port) - connect - end - - def connect - return if open? - can_configure_timeout = interface.respond_to?(:connecting_timeout) - interface.connecting_timeout = @options.fetch(:connecting_timeout, 60) if can_configure_timeout - interface.open - configure_interface! - @open = open? - end - - def write(bytes) - interface.write(bytes) - end - - def close - return unless open? - flush - interface.close - @open = open? - !open? - end - - def flush - interface.flush - end - - def open? - interface && !interface.closed? - end - - def recv(count) - array = [] - chunk = read_io_until(count, count) - array.push chunk if chunk - array.empty? ? nil : array.join - end - - def recv_nonblock(count) - array = [] - chunks_count = (count == -1) ? interface.available? : count - chunks_count.times do - chunk = interface.read(1) - array.push chunk if chunk - end - array.empty? ? nil : array.join - end - - def read(count, blocking = false) - blocking ? recv(count) : recv_nonblock(count) - end - - private - - def configure_interface! - interface.baud_rate = @options.fetch(:baud_rate, BAUD_115200).to_i - interface.data_bits = @options.fetch(:data_bits, DATA_BITS_8).to_i - interface.parity = @options.fetch(:parity, PAR_NONE).to_i - interface.stop_bits = @options.fetch(:stop_bits, STOP_BITS_1).to_i - interface.flow_control = @options.fetch(:flow_control, FLOW_OFF).to_i - end - - def block_io_until(count, up_to) - up_to -= 1 while interface.available? < count && up_to > 0 - up_to > 0 - end - - def read_io_until(count, up_to) - sleep 0.001 until block_io_until(count, up_to) - read(count) - end - end - + > include Rs232 + > port = new_serial_port('/dev/tty.ACM0', baud_rate: 9600) + #=> # + > port.open? + #=> false + > port.connect # rasing IOError in case of port couldn't be opened. + #=> # + > port.pending_bytes + #=> 15 + > port.read(15) + #=> 'Hello, World!!!' + > port.write("Hi") + #=> 2 + > port.close + #=> true + > port.open? + #=> false ``` ## Contributing diff --git a/ext/rs_232/posix/Port.c b/ext/rs_232/posix/Port.c index 90e4860..70318f7 100644 --- a/ext/rs_232/posix/Port.c +++ b/ext/rs_232/posix/Port.c @@ -291,7 +291,7 @@ VALUE openIO(VALUE self) } else { port->status = PORT_CLOSED; - rb_raise(rb_eRuntimeError, "Unable to open comport: `%s`", port->settings.ComPort); + rb_raise(rb_eIOError, "Unable to open comport: `%s`", port->settings.ComPort); } return self; diff --git a/ext/rs_232/windows/Port.c b/ext/rs_232/windows/Port.c index 7b61352..3d2072f 100644 --- a/ext/rs_232/windows/Port.c +++ b/ext/rs_232/windows/Port.c @@ -77,7 +77,7 @@ void updateSettings(PortDescriptor *port) { if (PORT_OPEN != port->status) - rb_raise(rb_eRuntimeError, "Can not set due to comport is not open, status: %d\n", port->status); + rb_raise(rb_eIOError, "Can not set due to comport is not open, status: %d\n", port->status); if (port->toBeUpdated & T_BaudRate) @@ -230,7 +230,7 @@ VALUE openIO(VALUE self) { port->status = PORT_CLOSED; - rb_raise(rb_eRuntimeError, "Unable to open comport: `%s`", port->settings.ComPort); + rb_raise(rb_eIOError, "Unable to open comport: `%s`", port->settings.ComPort); } else { diff --git a/lib/rs_232.rb b/lib/rs_232.rb index 9d8deb3..ecee5b4 100644 --- a/lib/rs_232.rb +++ b/lib/rs_232.rb @@ -7,17 +7,27 @@ module Rs232 # # @example # - # > port = Rs232.new('/dev/tty.ACM0', baud_rate: 9600) - # #=> <#Rs232::Impl @port='/dev/tty.ACM0'> + # > include Rs232 + # > port = new_serial_port('/dev/tty.ACM0', baud_rate: 9600) + # #=> # # > port.open? # #=> false - # > port.connect - # #=> <#Rs232::Impl @port='/dev/tty.ACM0'> - # port.pending_bytes + # > port.connect # rasing IOError in case of port couldn't be opened. + # #=> # + # > port.pending_bytes # #=> 15 - # port.read(15) + # > port.read(15) # #=> 'Hello, World!!!' + # > port.write("Hi") + # #=> 2 + # > port.close + # #=> true + # > port.open? + # #=> false # + # @param [String] port name + # @param [Hash] opts with such keys as: baud_rate, parity, data_bits, stop_bits, flow_control, timeout + # @param [Proc] block is a function to apply on constructor finish def new_serial_port(port, opts = {}, &block) Impl.new(port, opts, &block) end @@ -46,7 +56,6 @@ class Impl :read, :write, :flush, - :close, :open?, :set_rts, :set_dtr @@ -58,7 +67,8 @@ def initialize(name, opts = {}) yield self if block_given? end - # @raise RuntimeError in case of open error + # @raise IOError in case of port was not open. + # @return [Impl] instance def connect return self if open? @impl.open.tap do |io| @@ -72,6 +82,18 @@ def connect self end + # @return [Boolean] + def close + return !open? unless open? + 0 == @impl.close + end + + # @return [Fixnum] representing count of bytes in the buffer + def pending_bytes + @impl.available? + end + + # @return [Hash] of configurations on the OS side. def settings {}.tap do |o| o[:baud_rate] = @impl.baud_rate @@ -83,15 +105,6 @@ def settings o[:line_status] = @impl.line_status end.freeze end - - def open? - @impl.open? - end - - def close - return !open unless open? - 0 == @impl.close - end end private_constant :Impl diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index 1db5ae4..b3a4aba 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '3.0.0.pre2'.freeze + VERSION = '3.0.0.pre3'.freeze end From 4e1efea899faf07ea733cba2df3b728924a5fe0c Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Mon, 11 Jul 2016 00:05:26 -0400 Subject: [PATCH 09/11] removing stdc++ dependency Signed-off-by: Roman Lishtaba --- ext/rs_232/{Rs232.cpp => Rs232.c} | 2 +- lib/rs_232/version.rb | 2 +- spec/lib/constants_spec.rb | 51 +++++++++++++++++++++++++++---- 3 files changed, 47 insertions(+), 8 deletions(-) rename ext/rs_232/{Rs232.cpp => Rs232.c} (99%) diff --git a/ext/rs_232/Rs232.cpp b/ext/rs_232/Rs232.c similarity index 99% rename from ext/rs_232/Rs232.cpp rename to ext/rs_232/Rs232.c index 4768621..a9114da 100644 --- a/ext/rs_232/Rs232.cpp +++ b/ext/rs_232/Rs232.c @@ -306,7 +306,7 @@ void setSettings(VALUE self) updateSettings(port); } -extern "C" void Init_rs_232_native(void) +void Init_rs_232_native(void) { const char rootModName[] = "Rs232"; const char implClassName[] = "Native"; diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index b3a4aba..58ee3af 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '3.0.0.pre3'.freeze + VERSION = '3.0.0.pre4'.freeze end diff --git a/spec/lib/constants_spec.rb b/spec/lib/constants_spec.rb index 687151e..42ea21d 100644 --- a/spec/lib/constants_spec.rb +++ b/spec/lib/constants_spec.rb @@ -2,16 +2,55 @@ describe Rs232 do EXPECTED_CONSTANTS = [ - :BAUD_110, :BAUD_300, :BAUD_600, :BAUD_1200, - :BAUD_2400, :BAUD_4800, :BAUD_9600, :BAUD_19200, - :BAUD_38400, :BAUD_57600, :BAUD_115200, :DATA_BITS_5, - :DATA_BITS_6, :DATA_BITS_7, :DATA_BITS_8, :PAR_NONE, - :PAR_ODD, :PAR_EVEN, :STOP_BITS_1, :STOP_BITS_3, - :FLOW_OFF, :FLOW_HARDWARE, :FLOW_XONXOFF + :BAUD_110, :BAUD_300, :BAUD_600, :BAUD_1200, + :BAUD_2400, :BAUD_4800, :BAUD_9600, :BAUD_19200, + :BAUD_38400, :BAUD_57600, :BAUD_115200, :DATA_BITS_5, + :DATA_BITS_6, :DATA_BITS_7, :DATA_BITS_8, :PAR_NONE, + :PAR_ODD, :PAR_EVEN, :STOP_BITS_1, :STOP_BITS_3, + :FLOW_OFF, :FLOW_HARDWARE, :FLOW_XONXOFF ].sort.freeze + TOP_LEVEL_CONSTANTS = [ + :Native, + :Constants, + :VERSION + ].sort.freeze + + INTERFACE_METHODS = [ + :baud_rate=, + :baud_rate, + :parity=, + :parity, + :data_bits=, + :data_bits, + :stop_bits=, + :stop_bits, + :flow_control=, + :flow_control, + :timeout=, + :timeout, + :open, + :close, + :flush, + :open?, + :write, + :read, + :available?, + :line_status, + :set_rts, + :set_dtr + ].sort.freeze + + it 'should have an NATIVE constant' do + expect(Rs232.constants.sort).to eq(TOP_LEVEL_CONSTANTS) + end + it 'should have an VERSION constant' do current_constants = Rs232::Constants.constants.sort expect(current_constants).to eq(EXPECTED_CONSTANTS) end + + it 'should have respond to new' do + expect((Rs232::Native.instance_methods - methods).sort).to eq(INTERFACE_METHODS) + end end From 58941ceca4e443d4056f9303db09fe7d6e18cdb9 Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Mon, 11 Jul 2016 01:32:06 -0400 Subject: [PATCH 10/11] Updating Windows impl --- ext/rs_232/extconf.rb | 29 ++++++++++++------------- ext/rs_232/windows/Port.c | 45 +++++++++++++-------------------------- lib/rs_232/version.rb | 2 +- 3 files changed, 30 insertions(+), 46 deletions(-) diff --git a/ext/rs_232/extconf.rb b/ext/rs_232/extconf.rb index c8c8cf1..2acf52d 100644 --- a/ext/rs_232/extconf.rb +++ b/ext/rs_232/extconf.rb @@ -15,25 +15,24 @@ $warnflags = '-Wall' OS = case RbConfig::CONFIG['host_os'].downcase - when /linux/ - 'linux' - when /darwin/ - 'darwin' - when /freebsd/ - 'freebsd' - when /openbsd/ - 'openbsd' - when /sunos|solaris/ - 'solaris' - when /mswin|mingw/ - 'windows' - else - RbConfig::CONFIG['host_os'].downcase + when /linux/ + 'linux' + when /darwin/ + 'darwin' + when /freebsd/ + 'freebsd' + when /openbsd/ + 'openbsd' + when /sunos|solaris/ + 'solaris' + when /mswin|mingw/ + 'windows' + else + RbConfig::CONFIG['host_os'].downcase end have_header('ruby.h') have_header('stdio.h') -have_library( 'stdc++' ) if OS == 'windows' $VPATH << '$(srcdir)/windows' diff --git a/ext/rs_232/windows/Port.c b/ext/rs_232/windows/Port.c index 3d2072f..2347302 100644 --- a/ext/rs_232/windows/Port.c +++ b/ext/rs_232/windows/Port.c @@ -167,7 +167,6 @@ void updateSettings(PortDescriptor *port) static int queryStatusIO(VALUE self) { PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); return port->status; @@ -176,7 +175,7 @@ static int queryStatusIO(VALUE self) VALUE isOpenIO(VALUE self) { - return queryStatusIO(self) != PORT_OPEN ? Qtrue : Qfalse; + return queryStatusIO(self) != PORT_OPEN ? Qfalse : Qtrue; } @@ -228,15 +227,12 @@ VALUE openIO(VALUE self) if (port->fd == INVALID_HANDLE_VALUE) { - port->status = PORT_CLOSED; rb_raise(rb_eIOError, "Unable to open comport: `%s`", port->settings.ComPort); - } else - { - + } else { port->status = PORT_OPEN; - rb_iv_set(self, "@open", INT2FIX(port->status)); + rb_iv_set(self, "@open", isOpenIO(self)); GetCommConfig(port->fd, &port->commConfig, &conf_length); GetCommState(port->fd, &(port->commConfig.dcb)); @@ -261,7 +257,6 @@ VALUE openIO(VALUE self) VALUE writeIO(VALUE self, VALUE message) { - int recv; int len; PortDescriptor *port = NULL; @@ -275,31 +270,23 @@ VALUE writeIO(VALUE self, VALUE message) strcpy(cStr, RSTRING_PTR(message)); if (!WriteFile(port->fd, cStr, len, (LPDWORD)((void *) &recv), NULL)) - { - rb_raise(rb_eIOError, "IO: writing of the %d bytes has been failed", len); - } - - return (INT2FIX(recv)); + rb_raise(rb_eIOError, "IO: writing of the %d bytes has been failed. Error #%d", len, (int) GetLastError()); + return INT2FIX(recv); } - VALUE readIO(VALUE self, VALUE rb_int) { - - { - Check_Type(rb_int, T_FIXNUM); - } - + Check_Type(rb_int, T_FIXNUM); PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); int n; int len = FIX2INT(rb_int); char buf[len]; - ReadFile(port->fd, &buf, len, (LPDWORD)((void *) &n), NULL); + if(!ReadFile(port->fd, &buf, len, (LPDWORD)((void *) &n), NULL)) + rb_raise(rb_eIOError, "IO: reading of %d bytes has been failed. Error #%d", len, (int) GetLastError()); if (n > 0) return rb_str_new(buf, n); @@ -310,19 +297,17 @@ VALUE readIO(VALUE self, VALUE rb_int) VALUE closeIO(VALUE self) { - PortDescriptor *port = NULL; - Data_Get_Struct(self, PortDescriptor, port); - flushIO(self); - port->status = CloseHandle(port->fd); - port->fd = INVALID_HANDLE_VALUE; - - rb_iv_set(self, "@open", INT2FIX(port->status)); - - return INT2FIX(port->status); + if (port->fd != INVALID_HANDLE_VALUE) { + flushIO(self); + port->status = CloseHandle(port->fd); + port->fd = INVALID_HANDLE_VALUE; + rb_iv_set(self, "@open", isOpenIO(self)); + } + return !isOpenIO(self); } diff --git a/lib/rs_232/version.rb b/lib/rs_232/version.rb index 58ee3af..6b03648 100644 --- a/lib/rs_232/version.rb +++ b/lib/rs_232/version.rb @@ -1,3 +1,3 @@ module Rs232 - VERSION = '3.0.0.pre4'.freeze + VERSION = '3.0.0.pre5'.freeze end From b0666ab7fa46abf6409ed773ddfec8874c3e8c34 Mon Sep 17 00:00:00 2001 From: Roman Lishtaba Date: Wed, 7 Sep 2016 00:13:38 -0400 Subject: [PATCH 11/11] Updating README file with links to ruby-digital-transport gem --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5796361..0f6b102 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Or install it yourself as: ## Usage -See `examples` folder for details. +You may use this gem directly as a low-level transport layer in your communication module. As an alternative you may check another gem called (ruby-digital-transport)[https://github.com/rlishtaba/ruby-digital-transport] which is kind of transport abstraction porviding unified interface to SerialPort (using this gem), TCP and USB-HID. ```ruby > include Rs232