2020-04-10 01:11:40 -04:00
|
|
|
#ifndef RUBY_RUBY_H /*-*-C++-*-vi:se ft=cpp:*/
|
2008-05-31 01:55:34 -04:00
|
|
|
#define RUBY_RUBY_H 1
|
2020-04-10 01:11:40 -04:00
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* @author $Author$
|
|
|
|
* @date Thu Jun 10 14:26:32 JST 1993
|
|
|
|
* @copyright Copyright (C) 1993-2008 Yukihiro Matsumoto
|
|
|
|
* @copyright Copyright (C) 2000 Network Applied Communication Laboratory, Inc.
|
|
|
|
* @copyright Copyright (C) 2000 Information-technology Promotion Agency, Japan
|
|
|
|
* @copyright This file is a part of the programming language Ruby.
|
|
|
|
* Permission is hereby granted, to either redistribute and/or
|
|
|
|
* modify this file, provided that the conditions mentioned in the
|
|
|
|
* file COPYING are met. Consult the file for details.
|
|
|
|
*/
|
2020-05-08 05:31:09 -04:00
|
|
|
#include "ruby/internal/config.h"
|
2014-09-28 11:27:24 -04:00
|
|
|
|
2003-12-22 03:23:55 -05:00
|
|
|
#ifdef HAVE_INTRINSICS_H
|
|
|
|
# include <intrinsics.h>
|
|
|
|
#endif
|
|
|
|
|
2010-04-03 21:10:53 -04:00
|
|
|
#include <stdarg.h>
|
2005-12-06 02:52:18 -05:00
|
|
|
|
2020-04-08 00:28:13 -04:00
|
|
|
#include "defines.h"
|
2020-05-08 05:31:09 -04:00
|
|
|
#include "ruby/internal/anyargs.h"
|
|
|
|
#include "ruby/internal/arithmetic.h"
|
|
|
|
#include "ruby/internal/core.h"
|
|
|
|
#include "ruby/internal/ctype.h"
|
|
|
|
#include "ruby/internal/dllexport.h"
|
|
|
|
#include "ruby/internal/error.h"
|
|
|
|
#include "ruby/internal/eval.h"
|
|
|
|
#include "ruby/internal/event.h"
|
|
|
|
#include "ruby/internal/fl_type.h"
|
|
|
|
#include "ruby/internal/gc.h"
|
|
|
|
#include "ruby/internal/glob.h"
|
|
|
|
#include "ruby/internal/globals.h"
|
|
|
|
#include "ruby/internal/has/warning.h"
|
|
|
|
#include "ruby/internal/interpreter.h"
|
|
|
|
#include "ruby/internal/iterator.h"
|
|
|
|
#include "ruby/internal/memory.h"
|
|
|
|
#include "ruby/internal/method.h"
|
|
|
|
#include "ruby/internal/module.h"
|
|
|
|
#include "ruby/internal/newobj.h"
|
|
|
|
#include "ruby/internal/rgengc.h"
|
|
|
|
#include "ruby/internal/scan_args.h"
|
|
|
|
#include "ruby/internal/special_consts.h"
|
|
|
|
#include "ruby/internal/symbol.h"
|
|
|
|
#include "ruby/internal/value.h"
|
|
|
|
#include "ruby/internal/value_type.h"
|
|
|
|
#include "ruby/internal/variable.h"
|
2020-04-08 00:28:13 -04:00
|
|
|
#include "ruby/assert.h"
|
|
|
|
#include "ruby/backward/2/assume.h"
|
|
|
|
#include "ruby/backward/2/inttypes.h"
|
|
|
|
#include "ruby/backward/2/limits.h"
|
|
|
|
#include "ruby/backward/2/rmodule.h"
|
|
|
|
#include "ruby/backward/2/r_cast.h"
|
2012-08-23 03:22:40 -04:00
|
|
|
|
2020-05-04 02:52:56 -04:00
|
|
|
RBIMPL_SYMBOL_EXPORT_BEGIN()
|
2012-08-23 03:22:40 -04:00
|
|
|
|
2009-02-22 20:19:43 -05:00
|
|
|
/* Module#methods, #singleton_methods and so on return Symbols */
|
|
|
|
#define USE_SYMBOL_AS_METHOD_NAME 1
|
|
|
|
|
* bignum.c: changed `foo _((boo))' to `foo(boo)`. [ruby-dev:27056]
* defines.h, dir.c, dln.h, enumerator.c, env.h, error.c, eval.c, file.c,
gc.c, hash.c, inits.c, intern.h, io.c, lex.c, marshal.c, missing.h,
node.h, numeric.c, pack.c, process.c, re.h, ruby.c, ruby.h, rubyio.h,
rubysig.h, signal.c, sprintf.c, st.h, string.c, struct.c, time.c,
util.c, util.h, variable.c: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-09-14 02:32:32 -04:00
|
|
|
VALUE rb_get_path(VALUE);
|
2009-05-25 16:39:30 -04:00
|
|
|
#define FilePathValue(v) (RB_GC_GUARD(v) = rb_get_path(v))
|
2004-04-07 02:30:15 -04:00
|
|
|
|
2007-12-09 00:12:31 -05:00
|
|
|
VALUE rb_get_path_no_checksafe(VALUE);
|
2019-09-20 22:06:22 -04:00
|
|
|
#define FilePathStringValue(v) ((v) = rb_get_path(v))
|
2007-12-09 00:12:31 -05:00
|
|
|
|
2018-12-10 08:58:36 -05:00
|
|
|
#if defined(HAVE_BUILTIN___BUILTIN_CONSTANT_P) && defined(HAVE_STMT_AND_DECL_IN_EXPR)
|
2017-04-14 04:33:08 -04:00
|
|
|
# define rb_varargs_argc_check_runtime(argc, vargc) \
|
|
|
|
(((argc) <= (vargc)) ? (argc) : \
|
|
|
|
(rb_fatal("argc(%d) exceeds actual arguments(%d)", \
|
|
|
|
argc, vargc), 0))
|
2018-01-31 22:55:55 -05:00
|
|
|
# define rb_varargs_argc_valid_p(argc, vargc) \
|
|
|
|
((argc) == 0 ? (vargc) <= 1 : /* [ruby-core:85266] [Bug #14425] */ \
|
|
|
|
(argc) == (vargc))
|
2017-04-14 04:33:08 -04:00
|
|
|
# if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR_CONSTANT_P)
|
|
|
|
# if HAVE_ATTRIBUTE_ERRORFUNC
|
|
|
|
ERRORFUNC((" argument length doesn't match"), int rb_varargs_bad_length(int,int));
|
|
|
|
# else
|
2018-01-31 22:55:55 -05:00
|
|
|
# define rb_varargs_bad_length(argc, vargc) \
|
|
|
|
((argc)/rb_varargs_argc_valid_p(argc, vargc))
|
2017-04-14 04:33:08 -04:00
|
|
|
# endif
|
|
|
|
# define rb_varargs_argc_check(argc, vargc) \
|
|
|
|
__builtin_choose_expr(__builtin_constant_p(argc), \
|
2018-01-31 22:55:55 -05:00
|
|
|
(rb_varargs_argc_valid_p(argc, vargc) ? (argc) : \
|
2017-04-14 04:33:08 -04:00
|
|
|
rb_varargs_bad_length(argc, vargc)), \
|
|
|
|
rb_varargs_argc_check_runtime(argc, vargc))
|
|
|
|
# else
|
|
|
|
# define rb_varargs_argc_check(argc, vargc) \
|
|
|
|
rb_varargs_argc_check_runtime(argc, vargc)
|
|
|
|
# endif
|
2008-01-04 12:21:53 -05:00
|
|
|
#endif
|
|
|
|
|
2008-05-31 05:28:20 -04:00
|
|
|
const char *rb_class2name(VALUE);
|
|
|
|
const char *rb_obj_classname(VALUE);
|
1998-01-16 07:19:22 -05:00
|
|
|
|
* bignum.c: changed `foo _((boo))' to `foo(boo)`. [ruby-dev:27056]
* defines.h, dir.c, dln.h, enumerator.c, env.h, error.c, eval.c, file.c,
gc.c, hash.c, inits.c, intern.h, io.c, lex.c, marshal.c, missing.h,
node.h, numeric.c, pack.c, process.c, re.h, ruby.c, ruby.h, rubyio.h,
rubysig.h, signal.c, sprintf.c, st.h, string.c, struct.c, time.c,
util.c, util.h, variable.c: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-09-14 02:32:32 -04:00
|
|
|
void rb_p(VALUE);
|
1998-01-16 07:13:05 -05:00
|
|
|
|
* bignum.c: changed `foo _((boo))' to `foo(boo)`. [ruby-dev:27056]
* defines.h, dir.c, dln.h, enumerator.c, env.h, error.c, eval.c, file.c,
gc.c, hash.c, inits.c, intern.h, io.c, lex.c, marshal.c, missing.h,
node.h, numeric.c, pack.c, process.c, re.h, ruby.c, ruby.h, rubyio.h,
rubysig.h, signal.c, sprintf.c, st.h, string.c, struct.c, time.c,
util.c, util.h, variable.c: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-09-14 02:32:32 -04:00
|
|
|
VALUE rb_equal(VALUE,VALUE);
|
1998-01-16 07:13:05 -05:00
|
|
|
|
* bignum.c: changed `foo _((boo))' to `foo(boo)`. [ruby-dev:27056]
* defines.h, dir.c, dln.h, enumerator.c, env.h, error.c, eval.c, file.c,
gc.c, hash.c, inits.c, intern.h, io.c, lex.c, marshal.c, missing.h,
node.h, numeric.c, pack.c, process.c, re.h, ruby.c, ruby.h, rubyio.h,
rubysig.h, signal.c, sprintf.c, st.h, string.c, struct.c, time.c,
util.c, util.h, variable.c: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-09-14 02:32:32 -04:00
|
|
|
VALUE rb_require(const char*);
|
|
|
|
|
2007-06-09 23:06:15 -04:00
|
|
|
#include "ruby/intern.h"
|
1998-01-16 07:19:22 -05:00
|
|
|
|
1998-01-16 07:13:05 -05:00
|
|
|
#if defined(EXTLIB) && defined(USE_DLN_A_OUT)
|
|
|
|
/* hook for external modules */
|
1999-01-19 23:59:39 -05:00
|
|
|
static char *dln_libs_to_be_linked[] = { EXTLIB, 0 };
|
1998-01-16 07:13:05 -05:00
|
|
|
#endif
|
|
|
|
|
2007-02-24 21:43:43 -05:00
|
|
|
#define RUBY_VM 1 /* YARV */
|
|
|
|
#define HAVE_NATIVETHREAD
|
2007-12-25 02:28:51 -05:00
|
|
|
int ruby_native_thread_p(void);
|
2003-11-19 22:50:32 -05:00
|
|
|
|
2010-04-01 16:38:38 -04:00
|
|
|
#define InitVM(ext) {void InitVM_##ext(void);InitVM_##ext();}
|
|
|
|
|
2010-08-07 19:55:49 -04:00
|
|
|
PRINTF_ARGS(int ruby_snprintf(char *str, size_t n, char const *fmt, ...), 3, 4);
|
2010-04-03 21:10:53 -04:00
|
|
|
int ruby_vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
|
|
|
|
|
2020-05-04 02:52:56 -04:00
|
|
|
#if RBIMPL_HAS_WARNING("-Wgnu-zero-variadic-macro-arguments")
|
2020-04-08 00:28:13 -04:00
|
|
|
# /* Skip it; clang -pedantic doesn't like the following */
|
|
|
|
#elif defined(__GNUC__) && defined(HAVE_VA_ARGS_MACRO) && defined(__OPTIMIZE__)
|
2017-04-14 04:33:08 -04:00
|
|
|
# define rb_yield_values(argc, ...) \
|
|
|
|
__extension__({ \
|
|
|
|
const int rb_yield_values_argc = (argc); \
|
|
|
|
const VALUE rb_yield_values_args[] = {__VA_ARGS__}; \
|
|
|
|
const int rb_yield_values_nargs = \
|
|
|
|
(int)(sizeof(rb_yield_values_args) / sizeof(VALUE)); \
|
|
|
|
rb_yield_values2( \
|
|
|
|
rb_varargs_argc_check(rb_yield_values_argc, rb_yield_values_nargs), \
|
2017-08-03 04:09:24 -04:00
|
|
|
rb_yield_values_nargs ? rb_yield_values_args : NULL); \
|
2017-04-14 22:09:27 -04:00
|
|
|
})
|
|
|
|
|
|
|
|
# define rb_funcall(recv, mid, argc, ...) \
|
|
|
|
__extension__({ \
|
|
|
|
const int rb_funcall_argc = (argc); \
|
|
|
|
const VALUE rb_funcall_args[] = {__VA_ARGS__}; \
|
|
|
|
const int rb_funcall_nargs = \
|
|
|
|
(int)(sizeof(rb_funcall_args) / sizeof(VALUE)); \
|
2019-09-04 02:55:02 -04:00
|
|
|
rb_funcallv(recv, mid, \
|
2017-04-14 22:09:27 -04:00
|
|
|
rb_varargs_argc_check(rb_funcall_argc, rb_funcall_nargs), \
|
2017-08-03 04:09:24 -04:00
|
|
|
rb_funcall_nargs ? rb_funcall_args : NULL); \
|
2017-04-14 04:33:08 -04:00
|
|
|
})
|
|
|
|
#endif
|
|
|
|
|
2010-08-07 11:44:27 -04:00
|
|
|
#ifndef RUBY_DONT_SUBST
|
|
|
|
#include "ruby/subst.h"
|
|
|
|
#endif
|
|
|
|
|
2016-01-06 21:34:33 -05:00
|
|
|
#if !defined RUBY_EXPORT && !defined RUBY_NO_OLD_COMPATIBILITY
|
|
|
|
# include "ruby/backward.h"
|
|
|
|
#endif
|
|
|
|
|
2020-05-04 02:52:56 -04:00
|
|
|
RBIMPL_SYMBOL_EXPORT_END()
|
2019-09-05 10:50:45 -04:00
|
|
|
|
2008-05-31 01:55:34 -04:00
|
|
|
#endif /* RUBY_RUBY_H */
|