ruby.c File Reference

#include "ruby/ruby.h"
#include "ruby/encoding.h"
#include "internal.h"
#include "eval_intern.h"
#include "dln.h"
#include <stdio.h>
#include <sys/types.h>
#include <ctype.h>
#include "ruby/util.h"

Go to the source code of this file.

Data Structures

struct  cmdline_options
struct  load_file_arg

Defines

#define numberof(array)   (int)(sizeof(array) / sizeof((array)[0]))
#define DEFAULT_RUBYGEMS_ENABLED   "enabled"
#define DISABLE_BIT(bit)   (1U << disable_##bit)
#define DUMP_BIT(bit)   (1U << dump_##bit)
#define src_encoding_index   GET_VM()->src_encoding_index
#define forbid_setid(s)   forbid_setid((s), opt)
#define M(shortopt, longopt, desc)
#define SHOW(m)
#define rubylib_mangled_path   rb_str_new
#define RUBY_RELATIVE(path, len)   rubylib_mangled_path((path), (len))
#define PREFIX_PATH()   RUBY_RELATIVE(exec_prefix, sizeof(exec_prefix)-1)
#define NAME_MATCH_P(name, str, len)   ((len) < (int)sizeof(name) && strncmp((str), (name), (len)) == 0)
#define UNSET_WHEN(name, bit, str, len)
#define SET_WHEN(name, bit, str, len)
#define UNSET_WHEN_DISABLE(bit)   UNSET_WHEN(#bit, DISABLE_BIT(bit), str, len)
#define SET_WHEN_DISABLE(bit)   SET_WHEN(#bit, DISABLE_BIT(bit), str, len)
#define SET_WHEN_DUMP(bit)   SET_WHEN(#bit, DUMP_BIT(bit), str, len)
#define set_internal_encoding_once(opt, e, elen)   set_option_encoding_once("default_internal", &(opt)->intern.enc.name, (e), (elen))
#define set_external_encoding_once(opt, e, elen)   set_option_encoding_once("default_external", &(opt)->ext.enc.name, (e), (elen))
#define set_source_encoding_once(opt, e, elen)   set_option_encoding_once("source", &(opt)->src.enc.name, (e), (elen))
#define is_option_end(c, allow_hyphen)   (!(c) || ((allow_hyphen) && (c) == '-') || (c) == '=')
#define check_envopt(name, allow_envopt)
#define need_argument(name, s)
#define is_option_with_arg(name, allow_hyphen, allow_envopt)
#define set_encoding_part(type)
#define rb_progname   (GET_VM()->progname)
#define rb_define_readonly_boolean(name, val)   rb_define_virtual_variable((name), (val) ? true_value : false_value, 0)
#define PREPARE_PARSE_MAIN(expr)

Enumerations

enum  disable_flag_bits { disable_gems, disable_rubyopt, disable_flag_count }
enum  dump_flag_bits {
  dump_version, dump_version_v, dump_copyright, dump_usage,
  dump_help, dump_yydebug, dump_syntax, dump_parsetree,
  dump_parsetree_with_comment, dump_insns, dump_flag_count
}

Functions

char * getenv ()
static void init_ids (struct cmdline_options *)
static struct cmdline_optionscmdline_options_init (struct cmdline_options *opt)
static NODE * load_file (VALUE, VALUE, int, struct cmdline_options *)
static void forbid_setid (const char *, struct cmdline_options *)
static void usage (const char *name, int help)
static void push_include (const char *path, VALUE(*filter)(VALUE))
void ruby_push_include (const char *path, VALUE(*filter)(VALUE))
static VALUE identical_path (VALUE path)
static VALUE locale_path (VALUE path)
void ruby_incpush (const char *path)
static VALUE expand_include_path (VALUE path)
void ruby_incpush_expand (const char *path)
void ruby_init_loadpath_safe (int safe_level)
void ruby_init_loadpath (void)
static void add_modules (VALUE *req_list, const char *mod)
static void require_libraries (VALUE *req_list)
static rb_env_ttoplevel_context (VALUE toplevel_binding)
static void process_sflag (int *sflag)
static long proc_options (long argc, char **argv, struct cmdline_options *opt, int envopt)
static void moreswitches (const char *s, struct cmdline_options *opt, int envopt)
static void enable_option (const char *str, int len, void *arg)
static void disable_option (const char *str, int len, void *arg)
static void dump_option (const char *str, int len, void *arg)
static void set_option_encoding_once (const char *type, VALUE *name, const char *e, long elen)
static void ruby_init_prelude (void)
static int opt_enc_index (VALUE enc_name)
static VALUE false_value (void)
static VALUE true_value (void)
static VALUE uscore_get (void)
static VALUE rb_f_sub (int argc, VALUE *argv)
static VALUE rb_f_gsub (int argc, VALUE *argv)
static VALUE rb_f_chop (void)
static VALUE rb_f_chomp (int argc, VALUE *argv)
void Init_enc (void)
static VALUE process_options (int argc, char **argv, struct cmdline_options *opt)
static VALUE load_file_internal (VALUE arg)
static VALUE restore_lineno (VALUE lineno)
void * rb_load_file (const char *fname)
static void set_arg0 (VALUE val, ID id)
void ruby_script (const char *name)
 Sets the current script name to this value.
void ruby_set_script_name (VALUE name)
 Sets the current script name to this value.
static void verbose_setter (VALUE val, ID id, void *data)
static VALUE opt_W_getter (ID id, void *data)
void ruby_prog_init (void)
 Defines built-in variables.
void ruby_set_argv (int argc, char **argv)
void * ruby_process_options (int argc, char **argv)
static void fill_standard_fds (void)
void ruby_sysinit (int *argc, char ***argv)
 Initializes the process for ruby(1).

Variables

struct {
   int   argc
   char **   argv
origarg
VALUE rb_argv0

Define Documentation

#define check_envopt ( name,
allow_envopt   ) 
Value:
(((allow_envopt) || !envopt) ? (void)0 : \
             rb_raise(rb_eRuntimeError, "invalid switch in RUBYOPT: --" name))
#define DEFAULT_RUBYGEMS_ENABLED   "enabled"

Definition at line 60 of file ruby.c.

Referenced by usage().

#define DISABLE_BIT ( bit   )     (1U << disable_##bit)

Definition at line 63 of file ruby.c.

Referenced by cmdline_options_init(), and process_options().

#define DUMP_BIT ( bit   )     (1U << dump_##bit)

Definition at line 70 of file ruby.c.

Referenced by proc_options(), and process_options().

#define forbid_setid (  )     forbid_setid((s), opt)

Definition at line 127 of file ruby.c.

Referenced by load_file_internal(), proc_options(), and process_options().

#define is_option_end ( c,
allow_hyphen   )     (!(c) || ((allow_hyphen) && (c) == '-') || (c) == '=')
#define is_option_with_arg ( name,
allow_hyphen,
allow_envopt   ) 
Value:
(strncmp((name), s, n = sizeof(name) - 1) == 0 && is_option_end(s[n], (allow_hyphen)) ? \
             (check_envopt(name, (allow_envopt)), s += n, need_argument(name, s), 1) : 0)

Referenced by proc_options().

#define M ( shortopt,
longopt,
desc   ) 
Value:
{ \
    shortopt " " longopt " " desc, \
    (unsigned short)sizeof(shortopt), \
    (unsigned short)sizeof(longopt), \
}
#define NAME_MATCH_P ( name,
str,
len   )     ((len) < (int)sizeof(name) && strncmp((str), (name), (len)) == 0)

Definition at line 685 of file ruby.c.

Referenced by disable_option(), and enable_option().

#define need_argument ( name,
 ) 
Value:
((*(s)++ ? !*(s) : (!--argc || !((s) = *++argv))) ?             \
             rb_raise(rb_eRuntimeError, "missing argument for --" name) \
             : (void)0)
#define numberof ( array   )     (int)(sizeof(array) / sizeof((array)[0]))

Definition at line 55 of file ruby.c.

 
#define PREFIX_PATH (  )     RUBY_RELATIVE(exec_prefix, sizeof(exec_prefix)-1)

Referenced by ruby_init_loadpath_safe().

#define PREPARE_PARSE_MAIN ( expr   ) 
Value:
do { \
    rb_env_t *env = toplevel_context(toplevel_binding); \
    th->parse_in_eval--; \
    th->base_block = &env->block; \
    expr; \
    th->parse_in_eval++; \
    th->base_block = 0; \
} while (0)

Referenced by process_options().

#define rb_define_readonly_boolean ( name,
val   )     rb_define_virtual_variable((name), (val) ? true_value : false_value, 0)

Definition at line 1205 of file ruby.c.

#define rb_progname   (GET_VM()->progname)
#define RUBY_RELATIVE ( path,
len   )     rubylib_mangled_path((path), (len))

Referenced by ruby_init_loadpath_safe().

#define rubylib_mangled_path   rb_str_new

Definition at line 250 of file ruby.c.

Referenced by push_include(), and ruby_init_loadpath_safe().

#define set_encoding_part ( type   ) 
Value:
if (!(p = strchr(s, ':'))) { \
                        set_##type##_encoding_once(opt, s, 0); \
                        break; \
                    } \
                    else if (p > s) { \
                        set_##type##_encoding_once(opt, s, p-s); \
                    }

Referenced by proc_options().

#define set_external_encoding_once ( opt,
e,
elen   )     set_option_encoding_once("default_external", &(opt)->ext.enc.name, (e), (elen))

Definition at line 761 of file ruby.c.

Referenced by proc_options().

#define set_internal_encoding_once ( opt,
e,
elen   )     set_option_encoding_once("default_internal", &(opt)->intern.enc.name, (e), (elen))

Definition at line 759 of file ruby.c.

Referenced by proc_options().

#define set_source_encoding_once ( opt,
e,
elen   )     set_option_encoding_once("source", &(opt)->src.enc.name, (e), (elen))

Definition at line 763 of file ruby.c.

Referenced by proc_options().

#define SET_WHEN ( name,
bit,
str,
len   ) 
Value:
if (NAME_MATCH_P((name), (str), (len))) { \
        *(unsigned int *)arg |= (bit);  \
        return;                         \
    }

Definition at line 694 of file ruby.c.

#define SET_WHEN_DISABLE ( bit   )     SET_WHEN(#bit, DISABLE_BIT(bit), str, len)

Referenced by disable_option().

#define SET_WHEN_DUMP ( bit   )     SET_WHEN(#bit, DUMP_BIT(bit), str, len)

Referenced by dump_option().

#define SHOW (  ) 
Value:
do { \
        int wrap = help && (m).namelen + (m).secondlen - 2 > w; \
        printf("  %.*s%-*.*s%-*s%s\n", (m).namelen-1, (m).str, \
               (wrap ? 0 : w - (m).namelen + 1), \
               (help ? (m).secondlen-1 : 0), (m).str + (m).namelen, \
               (wrap ? w + 3 : 0), (wrap ? "\n" : ""), \
               (m).str + (m).namelen + (m).secondlen); \
    } while (0)

Referenced by usage().

#define src_encoding_index   GET_VM()->src_encoding_index

Definition at line 109 of file ruby.c.

Referenced by cmdline_options_init(), load_file_internal(), and process_options().

#define UNSET_WHEN ( name,
bit,
str,
len   ) 
Value:
if (NAME_MATCH_P((name), (str), (len))) { \
        *(unsigned int *)arg &= ~(bit); \
        return;                         \
    }

Definition at line 688 of file ruby.c.

#define UNSET_WHEN_DISABLE ( bit   )     UNSET_WHEN(#bit, DISABLE_BIT(bit), str, len)

Referenced by enable_option().


Enumeration Type Documentation

Enumerator:
disable_gems 
disable_rubyopt 
disable_flag_count 

Definition at line 64 of file ruby.c.

Enumerator:
dump_version 
dump_version_v 
dump_copyright 
dump_usage 
dump_help 
dump_yydebug 
dump_syntax 
dump_parsetree 
dump_parsetree_with_comment 
dump_insns 
dump_flag_count 

Definition at line 71 of file ruby.c.


Function Documentation

static void add_modules ( VALUE *  req_list,
const char *  mod 
) [static]

Definition at line 522 of file ruby.c.

References list, rb_ary_new(), rb_ary_push(), rb_str_new2, and RBASIC.

Referenced by proc_options().

static struct cmdline_options* cmdline_options_init ( struct cmdline_options opt  )  [static, read]
static void disable_option ( const char *  str,
int  len,
void *  arg 
) [static]

Definition at line 714 of file ruby.c.

References NAME_MATCH_P, rb_warn(), and SET_WHEN_DISABLE.

Referenced by proc_options().

static void dump_option ( const char *  str,
int  len,
void *  arg 
) [static]

Definition at line 727 of file ruby.c.

References rb_warn(), SET_WHEN_DUMP, usage(), version(), and yydebug.

Referenced by proc_options().

static void enable_option ( const char *  str,
int  len,
void *  arg 
) [static]

Definition at line 701 of file ruby.c.

References NAME_MATCH_P, rb_warn(), and UNSET_WHEN_DISABLE.

Referenced by proc_options().

static VALUE expand_include_path ( VALUE  path  )  [static]

Definition at line 342 of file ruby.c.

References Qnil, rb_file_expand_path(), and RSTRING_PTR.

Referenced by ruby_incpush_expand(), and ruby_init_loadpath_safe().

static VALUE false_value ( void   )  [static]

Definition at line 1194 of file ruby.c.

References Qfalse.

static void fill_standard_fds ( void   )  [static]

Definition at line 1919 of file ruby.c.

References dup2(), errno, fstat, and stat.

Referenced by ruby_sysinit().

static void forbid_setid ( const char *  s,
struct cmdline_options opt 
) [static]
char* getenv (  ) 
static VALUE identical_path ( VALUE  path  )  [static]

Definition at line 324 of file ruby.c.

Referenced by ruby_init_loadpath_safe().

void Init_enc ( void   ) 

Definition at line 7 of file dmyext.c.

Referenced by init_libraries_internal(), and process_options().

static void init_ids ( struct cmdline_options opt  )  [static]
static NODE * load_file ( VALUE  parser,
VALUE  fname,
int  script,
struct cmdline_options opt 
) [static]
static VALUE load_file_internal ( VALUE  arg  )  [static]
static VALUE locale_path ( VALUE  path  )  [static]

Definition at line 329 of file ruby.c.

References rb_enc_associate(), and rb_locale_encoding().

Referenced by ruby_incpush().

static void moreswitches ( const char *  s,
struct cmdline_options opt,
int  envopt 
) [static]
static int opt_enc_index ( VALUE  enc_name  )  [static]
static VALUE opt_W_getter ( ID  id,
void *  data 
) [static]

Definition at line 1836 of file ruby.c.

References INT2FIX, Qfalse, Qnil, and Qtrue.

Referenced by ruby_prog_init().

static long proc_options ( long  argc,
char **  argv,
struct cmdline_options opt,
int  envopt 
) [static]
static VALUE process_options ( int  argc,
char **  argv,
struct cmdline_options opt 
) [static]

Definition at line 1300 of file ruby.c.

References cmdline_options::disable, DISABLE_BIT, dln_find_file_r(), cmdline_options::do_line, cmdline_options::do_loop, cmdline_options::do_print, cmdline_options::do_search, cmdline_options::do_split, cmdline_options::dump, DUMP_BIT, cmdline_options::e_script, cmdline_options::enc, cmdline_options::ext, fbuf, FL_TAINT, FL_UNSET, forbid_setid, GET_THREAD(), GET_VM, getenv(), Init_enc(), cmdline_options::intern, load_file(), MAXPATHLEN, moreswitches(), OBJ_TAINT, opt_enc_index(), origarg, PATH_ENV, PREPARE_PARSE_MAIN, proc_options(), process_sflag(), Qfalse, Qnil, Qtrue, Qundef, RARRAY_LEN, RARRAY_PTR, rb_argv, rb_cObject, rb_const_get(), rb_default_internal_encoding(), rb_define_global_function(), rb_define_module(), rb_enc_associate(), rb_enc_find_index(), rb_enc_from_encoding(), rb_enc_from_index(), rb_enc_set_default_external(), rb_enc_set_default_internal(), rb_f_chomp(), rb_f_chop(), rb_f_gsub(), rb_f_sub(), rb_intern, rb_io_flush(), rb_io_write(), rb_iseq_new_main(), rb_locale_encoding(), rb_obj_freeze(), rb_parser_append_print(), rb_parser_compile_string(), rb_parser_dump_tree(), rb_parser_new(), rb_parser_set_yydebug(), rb_parser_while_loop(), rb_progname, rb_realpath_internal(), rb_require(), rb_stdio_set_default_encoding(), rb_stdout, rb_str_dup(), rb_str_new_cstr(), rb_warning(), cmdline_options::req_list, require_libraries(), RSTRING_PTR, ruby_init_loadpath_safe(), ruby_init_prelude(), ruby_set_argv(), ruby_set_script_name(), ruby_show_copyright(), ruby_show_version(), cmdline_options::safe_level, cmdline_options::script, cmdline_options::script_name, cmdline_options::sflag, cmdline_options::src, src_encoding_index, usage(), cmdline_options::verbose, version(), cmdline_options::xflag, and yydebug.

Referenced by ruby_process_options().

static void process_sflag ( int *  sflag  )  [static]
static void push_include ( const char *  path,
VALUE(*)(VALUE)  filter 
) [static]

Definition at line 254 of file ruby.c.

References CharNext, GET_VM, PATH_SEP_CHAR, rb_ary_push(), and rubylib_mangled_path.

Referenced by ruby_push_include().

static VALUE rb_f_chomp ( int  argc,
VALUE *  argv 
) [static]

Definition at line 1289 of file ruby.c.

References rb_funcall_passing_block(), rb_intern, rb_lastline_set(), and uscore_get().

Referenced by process_options().

static VALUE rb_f_chop ( void   )  [static]

Definition at line 1269 of file ruby.c.

References rb_funcall_passing_block(), rb_intern, rb_lastline_set(), and uscore_get().

Referenced by process_options().

static VALUE rb_f_gsub ( int  argc,
VALUE *  argv 
) [static]

Definition at line 1251 of file ruby.c.

References rb_funcall_passing_block(), rb_intern, rb_lastline_set(), and uscore_get().

Referenced by process_options().

static VALUE rb_f_sub ( int  argc,
VALUE *  argv 
) [static]

Definition at line 1232 of file ruby.c.

References rb_funcall_passing_block(), rb_intern, rb_lastline_set(), and uscore_get().

Referenced by process_options().

void* rb_load_file ( const char *  fname  ) 

Definition at line 1751 of file ruby.c.

References cmdline_options_init(), load_file(), rb_parser_new(), and rb_str_new_cstr().

static void require_libraries ( VALUE *  req_list  )  [static]
static VALUE restore_lineno ( VALUE  lineno  )  [static]

Definition at line 1734 of file ruby.c.

References rb_gv_set().

Referenced by load_file().

void ruby_incpush ( const char *  path  ) 

Definition at line 336 of file ruby.c.

References locale_path(), and ruby_push_include().

Referenced by init_loadpath().

void ruby_incpush_expand ( const char *  path  ) 

Definition at line 353 of file ruby.c.

References expand_include_path(), and ruby_push_include().

Referenced by proc_options().

void ruby_init_loadpath ( void   ) 

Definition at line 379 of file ruby.c.

References ruby_init_loadpath_safe().

void ruby_init_loadpath_safe ( int  safe_level  ) 
static void ruby_init_prelude ( void   )  [static]

Definition at line 1169 of file ruby.c.

References rb_cObject, rb_const_remove(), and rb_intern_const.

Referenced by process_options().

void* ruby_process_options ( int  argc,
char **  argv 
)
void ruby_prog_init ( void   ) 
void ruby_push_include ( const char *  path,
VALUE(*)(VALUE)  filter 
)

Definition at line 316 of file ruby.c.

References push_include().

Referenced by ruby_incpush(), ruby_incpush_expand(), and ruby_init_loadpath_safe().

void ruby_script ( const char *  name  ) 

Sets the current script name to this value.

This is similiar to $0 = name in Ruby level but also affects Method::location and others.

Definition at line 1782 of file ruby.c.

References rb_external_str_new(), rb_progname, rb_vm_set_progname(), and strlen().

Referenced by ruby_process_options().

void ruby_set_argv ( int  argc,
char **  argv 
)

Definition at line 1876 of file ruby.c.

References OBJ_FREEZE, origarg, rb_argv, rb_ary_clear(), rb_ary_push(), and rb_external_str_new_cstr().

Referenced by process_options().

void ruby_set_script_name ( VALUE  name  ) 

Sets the current script name to this value.

Same as ruby_script() but accepts a VALUE.

Definition at line 1795 of file ruby.c.

References rb_progname, rb_str_dup(), and rb_vm_set_progname().

Referenced by load_file_internal(), and process_options().

void ruby_sysinit ( int *  argc,
char ***  argv 
)

Initializes the process for ruby(1).

This function assumes this process is ruby(1) and it has just started. Usually programs that embeds CRuby interpreter should not call this function, and should do their own initialization.

Definition at line 1955 of file ruby.c.

References fill_standard_fds(), origarg, and rb_w32_sysinit().

static void set_arg0 ( VALUE  val,
ID  id 
) [static]
static void set_option_encoding_once ( const char *  type,
VALUE *  name,
const char *  e,
long  elen 
) [static]
static rb_env_t* toplevel_context ( VALUE  toplevel_binding  )  [static]

Definition at line 562 of file ruby.c.

References rb_binding_t::env, env, GetBindingPtr, and GetEnvPtr.

static VALUE true_value ( void   )  [static]

Definition at line 1200 of file ruby.c.

References Qtrue.

static void usage ( const char *  name,
int  help 
) [static]

Definition at line 135 of file ruby.c.

References DEFAULT_RUBYGEMS_ENABLED, M, numberof, and SHOW.

Referenced by dump_option(), proc_options(), and process_options().

static VALUE uscore_get ( void   )  [static]
static void verbose_setter ( VALUE  val,
ID  id,
void *  data 
) [static]

Definition at line 1829 of file ruby.c.

References Qtrue, and RTEST.

Referenced by ruby_prog_init().


Variable Documentation

int argc
char** argv
struct { ... } origarg [static]
VALUE rb_argv0

Generated on 18 May 2020 for Ruby by  doxygen 1.6.1