mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
arity/strict yield
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_3@469 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
32599f5a9d
commit
c8bd43a967
19 changed files with 380 additions and 179 deletions
34
ChangeLog
34
ChangeLog
|
|
@ -1,3 +1,37 @@
|
|||
Mon May 17 12:26:31 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* parse.y (read_escape): char may be unsigned.
|
||||
|
||||
* string.c (rb_str_succ): ditto.
|
||||
|
||||
* string.c (tr_trans): ditto.
|
||||
|
||||
* object.c (Init_Object): methods `&', `|', `^' are added to nil.
|
||||
|
||||
* range.c (rb_range_beg_len): it should be OK for [0..-len-1].
|
||||
|
||||
* regex.c (re_search): search for byte literal within mbcs.
|
||||
|
||||
* regex.c (is_in_list): parsh
|
||||
|
||||
* regex.c (re_compile_fastmap): should have not alter the loop
|
||||
variable `j' if TRASLATE_P().
|
||||
|
||||
* regex.c (re_compile_pattern): escaped characters should be read
|
||||
by PATFETCH_RAW(c).
|
||||
|
||||
Sat May 15 11:23:51 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* regex.c (re_match): endline2 (\Z) should not match at the point
|
||||
between a newline and end-of-line, like endline ($).
|
||||
|
||||
* class.c (include_class_new): should initialize iv_tbl to share
|
||||
between module and iclass.
|
||||
|
||||
Fri May 14 08:50:27 1999 Akira Endo <akendo@t3.rim.or.jp>
|
||||
|
||||
* regex.c (re_compile_fastmap): it should be k != 0 to skip.
|
||||
|
||||
Fri May 14 12:46:56 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
|
||||
|
||||
* time.c (time_load): a bug in old marshal format support.
|
||||
|
|
|
|||
5
class.c
5
class.c
|
|
@ -199,8 +199,11 @@ include_class_new(module, super)
|
|||
NEWOBJ(klass, struct RClass);
|
||||
OBJSETUP(klass, rb_cClass, T_ICLASS);
|
||||
|
||||
klass->m_tbl = RCLASS(module)->m_tbl;
|
||||
if (!RCLASS(module)->iv_tbl) {
|
||||
RCLASS(module)->iv_tbl = st_init_numtable();
|
||||
}
|
||||
klass->iv_tbl = RCLASS(module)->iv_tbl;
|
||||
klass->m_tbl = RCLASS(module)->m_tbl;
|
||||
klass->super = super;
|
||||
if (TYPE(module) == T_ICLASS) {
|
||||
RBASIC(klass)->klass = RBASIC(module)->klass;
|
||||
|
|
|
|||
2
dln.c
2
dln.c
|
|
@ -1348,7 +1348,7 @@ dln_load(file)
|
|||
if (init_fct == NULL) {
|
||||
aix_loaderror(file);
|
||||
}
|
||||
if (loadbind(0, main_module, init_fct) == -1) {
|
||||
if (loadbind(0, main_module, (void*)init_fct) == -1) {
|
||||
aix_loaderror(file);
|
||||
}
|
||||
(*init_fct)();
|
||||
|
|
|
|||
133
eval.c
133
eval.c
|
|
@ -681,8 +681,8 @@ static VALUE rb_yield_0 _((VALUE, VALUE, VALUE));
|
|||
static VALUE rb_call _((VALUE,VALUE,ID,int,VALUE*,int));
|
||||
static VALUE module_setup _((VALUE,NODE*));
|
||||
|
||||
static VALUE massign _((VALUE,NODE*,VALUE));
|
||||
static void assign _((VALUE,NODE*,VALUE));
|
||||
static VALUE massign _((VALUE,NODE*,VALUE,int));
|
||||
static void assign _((VALUE,NODE*,VALUE,int));
|
||||
|
||||
static int safe_level = 0;
|
||||
/* safe-level:
|
||||
|
|
@ -2314,7 +2314,7 @@ rb_eval(self, node)
|
|||
break;
|
||||
|
||||
case NODE_MASGN:
|
||||
result = massign(self, node, rb_eval(self, node->nd_value));
|
||||
result = massign(self, node, rb_eval(self, node->nd_value),0);
|
||||
break;
|
||||
|
||||
case NODE_LASGN:
|
||||
|
|
@ -3162,10 +3162,15 @@ rb_yield_0(val, self, klass)
|
|||
if (!self) self = block->self;
|
||||
node = block->body;
|
||||
if (block->var) {
|
||||
if (nd_type(block->var) == NODE_MASGN)
|
||||
massign(self, block->var, val);
|
||||
else
|
||||
assign(self, block->var, val);
|
||||
PUSH_TAG(PROT_NONE);
|
||||
if ((state = EXEC_TAG()) == 0) {
|
||||
if (nd_type(block->var) == NODE_MASGN)
|
||||
massign(self, block->var, val, 1);
|
||||
else
|
||||
assign(self, block->var, val, 1);
|
||||
}
|
||||
POP_TAG();
|
||||
if (state) goto pop_state;
|
||||
}
|
||||
PUSH_ITER(block->iter);
|
||||
PUSH_TAG(PROT_NONE);
|
||||
|
|
@ -3201,6 +3206,7 @@ rb_yield_0(val, self, klass)
|
|||
}
|
||||
}
|
||||
POP_TAG();
|
||||
pop_state:
|
||||
POP_ITER();
|
||||
POP_CLASS();
|
||||
POP_VARS();
|
||||
|
|
@ -3227,13 +3233,14 @@ rb_f_loop()
|
|||
}
|
||||
|
||||
static VALUE
|
||||
massign(self, node, val)
|
||||
massign(self, node, val, check)
|
||||
VALUE self;
|
||||
NODE *node;
|
||||
VALUE val;
|
||||
int check;
|
||||
{
|
||||
NODE *list;
|
||||
int i, len;
|
||||
int i = 0, len;
|
||||
|
||||
list = node->nd_head;
|
||||
|
||||
|
|
@ -3243,33 +3250,46 @@ massign(self, node, val)
|
|||
}
|
||||
len = RARRAY(val)->len;
|
||||
for (i=0; list && i<len; i++) {
|
||||
assign(self, list->nd_head, RARRAY(val)->ptr[i]);
|
||||
assign(self, list->nd_head, RARRAY(val)->ptr[i], check);
|
||||
list = list->nd_next;
|
||||
}
|
||||
if (check && list) goto arg_error;
|
||||
if (node->nd_args) {
|
||||
if (!list && i<len) {
|
||||
assign(self, node->nd_args, rb_ary_new4(len-i, RARRAY(val)->ptr+i));
|
||||
assign(self, node->nd_args, rb_ary_new4(len-i, RARRAY(val)->ptr+i), check);
|
||||
}
|
||||
else {
|
||||
assign(self, node->nd_args, rb_ary_new2(0));
|
||||
assign(self, node->nd_args, rb_ary_new2(0), check);
|
||||
}
|
||||
}
|
||||
else if (check && i<len) goto arg_error;
|
||||
}
|
||||
else if (node->nd_args) {
|
||||
assign(self, node->nd_args, Qnil);
|
||||
assign(self, node->nd_args, Qnil, check);
|
||||
}
|
||||
|
||||
if (check && list) goto arg_error;
|
||||
while (list) {
|
||||
assign(self, list->nd_head, Qnil);
|
||||
i++;
|
||||
assign(self, list->nd_head, Qnil, check);
|
||||
list = list->nd_next;
|
||||
}
|
||||
return val;
|
||||
|
||||
arg_error:
|
||||
while (list) {
|
||||
i++;
|
||||
list = list->nd_next;
|
||||
}
|
||||
rb_raise(rb_eArgError, "wrong # of arguments (%d for %d)", len, i);
|
||||
}
|
||||
|
||||
static void
|
||||
assign(self, lhs, val)
|
||||
assign(self, lhs, val, check)
|
||||
VALUE self;
|
||||
NODE *lhs;
|
||||
VALUE val;
|
||||
int check;
|
||||
{
|
||||
switch (nd_type(lhs)) {
|
||||
case NODE_GASGN:
|
||||
|
|
@ -3299,7 +3319,7 @@ assign(self, lhs, val)
|
|||
break;
|
||||
|
||||
case NODE_MASGN:
|
||||
massign(self, lhs, val);
|
||||
massign(self, lhs, val, check);
|
||||
break;
|
||||
|
||||
case NODE_CALL:
|
||||
|
|
@ -3852,7 +3872,7 @@ rb_call0(klass, recv, id, argc, argv, body, nosuper)
|
|||
NODE *opt = node->nd_opt;
|
||||
|
||||
while (opt && argc) {
|
||||
assign(recv, opt->nd_head, *argv);
|
||||
assign(recv, opt->nd_head, *argv, 1);
|
||||
argv++; argc--;
|
||||
opt = opt->nd_next;
|
||||
}
|
||||
|
|
@ -5427,10 +5447,19 @@ proc_call(proc, args)
|
|||
struct BLOCK * volatile old_block;
|
||||
struct BLOCK *data;
|
||||
volatile VALUE result = Qnil;
|
||||
int state;
|
||||
int state, n;
|
||||
volatile int orphan;
|
||||
volatile int safe = safe_level;
|
||||
|
||||
Data_Get_Struct(proc, struct BLOCK, data);
|
||||
orphan = blk_orphan(data);
|
||||
|
||||
/* PUSH BLOCK from data */
|
||||
old_block = ruby_block;
|
||||
ruby_block = data;
|
||||
PUSH_ITER(ITER_CUR);
|
||||
ruby_frame->iter = ITER_CUR;
|
||||
|
||||
if (TYPE(args) == T_ARRAY) {
|
||||
switch (RARRAY(args)->len) {
|
||||
case 0:
|
||||
|
|
@ -5442,15 +5471,6 @@ proc_call(proc, args)
|
|||
}
|
||||
}
|
||||
|
||||
Data_Get_Struct(proc, struct BLOCK, data);
|
||||
orphan = blk_orphan(data);
|
||||
|
||||
/* PUSH BLOCK from data */
|
||||
old_block = ruby_block;
|
||||
ruby_block = data;
|
||||
PUSH_ITER(ITER_CUR);
|
||||
ruby_frame->iter = ITER_CUR;
|
||||
|
||||
if (orphan) {/* orphan procedure */
|
||||
if (rb_iterator_p()) {
|
||||
ruby_block->frame.iter = ITER_CUR;
|
||||
|
|
@ -5494,6 +5514,31 @@ proc_call(proc, args)
|
|||
return result;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
proc_arity(proc)
|
||||
VALUE proc;
|
||||
{
|
||||
struct BLOCK *data;
|
||||
NODE *list;
|
||||
int n;
|
||||
|
||||
Data_Get_Struct(proc, struct BLOCK, data);
|
||||
if (data->var == 0) return 0;
|
||||
switch (nd_type(data->var)) {
|
||||
default:
|
||||
return INT2FIX(-1);
|
||||
case NODE_MASGN:
|
||||
list = data->var->nd_head;
|
||||
n = 0;
|
||||
while (list) {
|
||||
n++;
|
||||
list = list->nd_next;
|
||||
}
|
||||
if (data->var->nd_args) return INT2FIX(-n);
|
||||
return INT2FIX(n);
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
block_pass(self, node)
|
||||
VALUE self;
|
||||
|
|
@ -5645,6 +5690,38 @@ method_call(argc, argv, method)
|
|||
return result;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
method_arity(method)
|
||||
VALUE method;
|
||||
{
|
||||
struct METHOD *data;
|
||||
NODE *body;
|
||||
int n;
|
||||
|
||||
Data_Get_Struct(method, struct METHOD, data);
|
||||
|
||||
body = data->body;
|
||||
switch (nd_type(body)) {
|
||||
case NODE_CFUNC:
|
||||
if (body->nd_argc < 0) return INT2FIX(-1);
|
||||
return INT2FIX(body->nd_argc);
|
||||
case NODE_ZSUPER:
|
||||
return INT2FIX(-1);
|
||||
case NODE_ATTRSET:
|
||||
return INT2FIX(1);
|
||||
case NODE_IVAR:
|
||||
return INT2FIX(0);
|
||||
default:
|
||||
body = body->nd_next; /* skip NODE_SCOPE */
|
||||
if (nd_type(body) == NODE_BLOCK)
|
||||
body = body->nd_head;
|
||||
if (!body) return INT2FIX(0);
|
||||
n = body->nd_cnt;
|
||||
if (body->nd_rest) n = -n;
|
||||
return INT2FIX(n);
|
||||
}
|
||||
}
|
||||
|
||||
static VALUE
|
||||
method_inspect(method)
|
||||
VALUE method;
|
||||
|
|
@ -5710,6 +5787,7 @@ Init_Proc()
|
|||
rb_define_singleton_method(rb_cProc, "new", proc_s_new, 0);
|
||||
|
||||
rb_define_method(rb_cProc, "call", proc_call, -2);
|
||||
rb_define_method(rb_cProc, "arity", proc_arity, 0);
|
||||
rb_define_method(rb_cProc, "[]", proc_call, -2);
|
||||
rb_define_global_function("proc", rb_f_lambda, 0);
|
||||
rb_define_global_function("lambda", rb_f_lambda, 0);
|
||||
|
|
@ -5722,6 +5800,7 @@ Init_Proc()
|
|||
rb_undef_method(CLASS_OF(rb_cMethod), "new");
|
||||
rb_define_method(rb_cMethod, "call", method_call, -1);
|
||||
rb_define_method(rb_cMethod, "[]", method_call, -1);
|
||||
rb_define_method(rb_cMethod, "arity", method_arity, 0);
|
||||
rb_define_method(rb_cMethod, "inspect", method_inspect, 0);
|
||||
rb_define_method(rb_cMethod, "to_s", method_inspect, 0);
|
||||
rb_define_method(rb_cMethod, "to_proc", method_proc, 0);
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ def older(file1, file2)
|
|||
return false
|
||||
end
|
||||
|
||||
CFLAGS = ""
|
||||
#LINK = "cl -o conftest.exe -I../.. -Zi -O -I. %s conftest.c %s > nul"
|
||||
LINK = "cl -o conftest.exe -Zi -O %s conftest.c %s > nul"
|
||||
CPP = "cl -E -I../.. -I../../missing -I../../win32 -I. -Zi -O %s conftest.c > nul"
|
||||
|
|
@ -435,8 +436,6 @@ def extmake(target)
|
|||
|
||||
return if $nodynamic and not $static
|
||||
|
||||
$CFLAGS = nil
|
||||
$LDFLAGS = nil
|
||||
$LOCAL_LIBS = "" # to be assigned in extconf.rb
|
||||
$CFLAGS = ""
|
||||
$LDFLAGS = ""
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
require 'mkmf'
|
||||
$LDFLAGS = "-L/usr/local/lib"
|
||||
have_library("gdbm", "gdbm_open")
|
||||
have_header("gdbm.h")
|
||||
if have_func("gdbm_open")
|
||||
if have_library("gdbm", "gdbm_open") and
|
||||
have_header("gdbm.h") and
|
||||
have_func("gdbm_open") then
|
||||
create_makefile("gdbm")
|
||||
end
|
||||
|
|
|
|||
|
|
@ -180,7 +180,7 @@ chld_changed()
|
|||
rb_raise(rb_eRuntimeError, "Stopped: %d",cpid);
|
||||
}
|
||||
#else
|
||||
#error "Either IF_STOPPED or WIFSTOPPED is needed"
|
||||
---->> Either IF_STOPPED or WIFSTOPPED is needed <<----
|
||||
#endif /* WIFSTOPPED */
|
||||
#endif /* IF_STOPPED */
|
||||
if (n >= 0) {
|
||||
|
|
|
|||
|
|
@ -23,7 +23,10 @@ readline_event()
|
|||
}
|
||||
|
||||
static VALUE
|
||||
readline_readline(int argc, VALUE *argv, VALUE self)
|
||||
readline_readline(argc, argv, self)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE self;
|
||||
{
|
||||
VALUE tmp, add_hist, result;
|
||||
char *prompt = NULL;
|
||||
|
|
@ -45,7 +48,9 @@ readline_readline(int argc, VALUE *argv, VALUE self)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
readline_s_set_completion_proc(VALUE self, VALUE proc)
|
||||
readline_s_set_completion_proc(self, proc)
|
||||
VALUE self;
|
||||
VALUE proc;
|
||||
{
|
||||
if (!rb_respond_to(proc, rb_intern("call")))
|
||||
rb_raise(rb_eArgError, "argument have to respond to `call'");
|
||||
|
|
@ -53,25 +58,32 @@ readline_s_set_completion_proc(VALUE self, VALUE proc)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
readline_s_get_completion_proc(VALUE self)
|
||||
readline_s_get_completion_proc(self)
|
||||
VALUE self;
|
||||
{
|
||||
return rb_iv_get(mReadline, COMPLETION_PROC);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
readline_s_set_completion_case_fold(VALUE self, VALUE val)
|
||||
readline_s_set_completion_case_fold(self, val)
|
||||
VALUE self;
|
||||
VALUE val;
|
||||
{
|
||||
return rb_iv_set(mReadline, COMPLETION_CASE_FOLD, val);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
readline_s_get_completion_case_fold(VALUE self)
|
||||
readline_s_get_completion_case_fold(self)
|
||||
VALUE self;
|
||||
{
|
||||
return rb_iv_get(mReadline, COMPLETION_CASE_FOLD);
|
||||
}
|
||||
|
||||
static char **
|
||||
readline_attempted_completion_function(char *text, int start, int end)
|
||||
readline_attempted_completion_function(text, start, end)
|
||||
char *text;
|
||||
int start;
|
||||
int end;
|
||||
{
|
||||
VALUE proc, ary, temp;
|
||||
char **result;
|
||||
|
|
@ -133,27 +145,32 @@ readline_attempted_completion_function(char *text, int start, int end)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
readline_s_vi_editing_mode(VALUE self)
|
||||
readline_s_vi_editing_mode(self)
|
||||
VALUE self;
|
||||
{
|
||||
rl_vi_editing_mode(1,0);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
readline_s_emacs_editing_mode(VALUE self)
|
||||
readline_s_emacs_editing_mode(self)
|
||||
VALUE self;
|
||||
{
|
||||
rl_emacs_editing_mode(1,0);
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
hist_to_s(VALUE self)
|
||||
hist_to_s(self)
|
||||
VALUE self;
|
||||
{
|
||||
return rb_str_new2("HISTORY");
|
||||
}
|
||||
|
||||
static VALUE
|
||||
hist_get(VALUE self, VALUE index)
|
||||
hist_get(self, index)
|
||||
VALUE self;
|
||||
VALUE index;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
int i;
|
||||
|
|
@ -167,7 +184,10 @@ hist_get(VALUE self, VALUE index)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_set(VALUE self, VALUE index, VALUE str)
|
||||
hist_set(self, index, str)
|
||||
VALUE self;
|
||||
VALUE index;
|
||||
VALUE str;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
int i;
|
||||
|
|
@ -182,15 +202,19 @@ hist_set(VALUE self, VALUE index, VALUE str)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_push(VALUE self, VALUE str)
|
||||
hist_push(self, str)
|
||||
VALUE self;
|
||||
VALUE str;
|
||||
{
|
||||
add_history(STR2CSTR(str));
|
||||
return self;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
hist_push_method(int argc, VALUE *argv,
|
||||
VALUE self)
|
||||
hist_push_method(argc, argv, self)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE self;
|
||||
{
|
||||
VALUE str;
|
||||
|
||||
|
|
@ -202,7 +226,8 @@ hist_push_method(int argc, VALUE *argv,
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_pop(VALUE self)
|
||||
hist_pop(self)
|
||||
VALUE self;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
HIST_ENTRY *entry;
|
||||
|
|
@ -217,7 +242,8 @@ hist_pop(VALUE self)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_shift(VALUE self)
|
||||
hist_shift(self)
|
||||
VALUE self;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
HIST_ENTRY *entry;
|
||||
|
|
@ -232,7 +258,8 @@ hist_shift(VALUE self)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_each(VALUE self)
|
||||
hist_each(self)
|
||||
VALUE self;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
int i;
|
||||
|
|
@ -245,7 +272,8 @@ hist_each(VALUE self)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_length(VALUE self)
|
||||
hist_length(self)
|
||||
VALUE self;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
|
||||
|
|
@ -254,7 +282,8 @@ hist_length(VALUE self)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_empty_p(VALUE self)
|
||||
hist_empty_p(self)
|
||||
VALUE self;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
|
||||
|
|
@ -266,7 +295,9 @@ hist_empty_p(VALUE self)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
hist_delete_at(VALUE self, VALUE index)
|
||||
hist_delete_at(self, index)
|
||||
VALUE self;
|
||||
VALUE index;
|
||||
{
|
||||
HISTORY_STATE *state;
|
||||
HIST_ENTRY *entry;
|
||||
|
|
@ -282,7 +313,9 @@ hist_delete_at(VALUE self, VALUE index)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
filename_completion_proc_call(VALUE self, VALUE str)
|
||||
filename_completion_proc_call(self, str)
|
||||
VALUE self;
|
||||
VALUE str;
|
||||
{
|
||||
VALUE result;
|
||||
char **matches;
|
||||
|
|
@ -307,7 +340,9 @@ filename_completion_proc_call(VALUE self, VALUE str)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
username_completion_proc_call(VALUE self, VALUE str)
|
||||
username_completion_proc_call(self, str)
|
||||
VALUE self;
|
||||
VALUE str;
|
||||
{
|
||||
VALUE result;
|
||||
char **matches;
|
||||
|
|
@ -332,7 +367,7 @@ username_completion_proc_call(VALUE self, VALUE str)
|
|||
}
|
||||
|
||||
void
|
||||
Init_readline(void)
|
||||
Init_readline()
|
||||
{
|
||||
VALUE histary, fcomp, ucomp;
|
||||
|
||||
|
|
|
|||
|
|
@ -154,4 +154,11 @@ extern void freehostent __P((struct hostent *));
|
|||
extern void freeaddrent __P((struct addrinfo *));
|
||||
extern char *gai_strerror __P((int));
|
||||
|
||||
/* In case there is no definition of offsetof() provided - though any proper
|
||||
Standard C system should have one. */
|
||||
|
||||
#ifndef offsetof
|
||||
#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -49,7 +49,8 @@ typedef struct {
|
|||
} Tk_TimerData;
|
||||
|
||||
/* timer callback */
|
||||
void _timer_for_tcl (ClientData clientData)
|
||||
void _timer_for_tcl(clientData)
|
||||
ClientData clientData;
|
||||
{
|
||||
Tk_TimerData *timer = (Tk_TimerData*)clientData;
|
||||
|
||||
|
|
@ -64,7 +65,8 @@ void _timer_for_tcl (ClientData clientData)
|
|||
|
||||
/* execute Tk_MainLoop */
|
||||
static VALUE
|
||||
lib_mainloop(VALUE self)
|
||||
lib_mainloop(self)
|
||||
VALUE self;
|
||||
{
|
||||
Tk_TimerData *timer;
|
||||
|
||||
|
|
@ -95,7 +97,9 @@ struct tcltkip {
|
|||
|
||||
/* Tcl command `ruby' */
|
||||
static VALUE
|
||||
ip_eval_rescue(VALUE *failed, VALUE einfo)
|
||||
ip_eval_rescue(failed, einfo)
|
||||
VALUE *failed;
|
||||
VALUE einfo;
|
||||
{
|
||||
*failed = einfo;
|
||||
return Qnil;
|
||||
|
|
@ -103,10 +107,17 @@ ip_eval_rescue(VALUE *failed, VALUE einfo)
|
|||
|
||||
static int
|
||||
#if TCL_MAJOR_VERSION >= 8
|
||||
ip_ruby(ClientData clientData, Tcl_Interp *interp,
|
||||
int argc, Tcl_Obj *CONST argv[])
|
||||
ip_ruby(clientData, interp, argc, argv)
|
||||
ClientData clientData;
|
||||
Tcl_Interp *interp;
|
||||
int argc;
|
||||
Tcl_Obj *CONST argv[];
|
||||
#else
|
||||
ip_ruby(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
|
||||
ip_ruby(clientData, interp, argc, argv)
|
||||
ClientData clientData;
|
||||
Tcl_Interp *interp;
|
||||
int argc;
|
||||
char *argv[];
|
||||
#endif
|
||||
{
|
||||
VALUE res;
|
||||
|
|
@ -163,7 +174,8 @@ ip_ruby(ClientData clientData, Tcl_Interp *interp, int argc, char *argv[])
|
|||
|
||||
/* destroy interpreter */
|
||||
static void
|
||||
ip_free(struct tcltkip *ptr)
|
||||
ip_free(ptr)
|
||||
struct tcltkip *ptr;
|
||||
{
|
||||
DUMP1("Tcl_DeleteInterp");
|
||||
Tcl_DeleteInterp(ptr->ip);
|
||||
|
|
@ -172,7 +184,8 @@ ip_free(struct tcltkip *ptr)
|
|||
|
||||
/* create and initialize interpreter */
|
||||
static VALUE
|
||||
ip_new(VALUE self)
|
||||
ip_new(self)
|
||||
VALUE self;
|
||||
{
|
||||
struct tcltkip *ptr; /* tcltkip data struct */
|
||||
VALUE obj; /* newly created object */
|
||||
|
|
@ -214,7 +227,9 @@ ip_new(VALUE self)
|
|||
|
||||
/* eval string in tcl by Tcl_Eval() */
|
||||
static VALUE
|
||||
ip_eval(VALUE self, VALUE str)
|
||||
ip_eval(self, str)
|
||||
VALUE self;
|
||||
VALUE str;
|
||||
{
|
||||
char *s;
|
||||
char *buf; /* Tcl_Eval requires re-writable string region */
|
||||
|
|
@ -240,7 +255,10 @@ ip_eval(VALUE self, VALUE str)
|
|||
|
||||
|
||||
static VALUE
|
||||
ip_toUTF8(VALUE self, VALUE str, VALUE encodename)
|
||||
ip_toUTF8(self, str, encodename)
|
||||
VALUE self;
|
||||
VALUE str;
|
||||
VALUE encodename;
|
||||
{
|
||||
#ifndef TCL_UTF_MAX
|
||||
return str;
|
||||
|
|
@ -272,7 +290,10 @@ ip_toUTF8(VALUE self, VALUE str, VALUE encodename)
|
|||
}
|
||||
|
||||
static VALUE
|
||||
ip_fromUTF8(VALUE self, VALUE str, VALUE encodename)
|
||||
ip_fromUTF8(self, str, encodename)
|
||||
VALUE self;
|
||||
VALUE str;
|
||||
VALUE encodename;
|
||||
{
|
||||
#ifndef TCL_UTF_MAX
|
||||
return str;
|
||||
|
|
@ -305,7 +326,10 @@ ip_fromUTF8(VALUE self, VALUE str, VALUE encodename)
|
|||
|
||||
|
||||
static VALUE
|
||||
ip_invoke(int argc, VALUE *argv, VALUE obj)
|
||||
ip_invoke(argc, argv, obj)
|
||||
int argc;
|
||||
VALUE *argv;
|
||||
VALUE obj;
|
||||
{
|
||||
struct tcltkip *ptr; /* tcltkip data struct */
|
||||
int i;
|
||||
|
|
@ -384,7 +408,8 @@ ip_invoke(int argc, VALUE *argv, VALUE obj)
|
|||
|
||||
/* get return code from Tcl_Eval() */
|
||||
static VALUE
|
||||
ip_retval(VALUE self)
|
||||
ip_retval(self)
|
||||
VALUE self;
|
||||
{
|
||||
struct tcltkip *ptr; /* tcltkip data struct */
|
||||
|
||||
|
|
|
|||
149
lex.c
149
lex.c
|
|
@ -1,5 +1,5 @@
|
|||
/* C code produced by gperf version 2.5 (GNU C++ version) */
|
||||
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$ keywords */
|
||||
/* C code produced by gperf version 2.7.1 (19981006 egcs) */
|
||||
/* Command-line: gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$ ./keywords */
|
||||
struct kwtable {char *name; int id[2]; enum lex_state state;};
|
||||
|
||||
#define TOTAL_KEYWORDS 40
|
||||
|
|
@ -10,28 +10,41 @@ struct kwtable {char *name; int id[2]; enum lex_state state;};
|
|||
/* maximum key range = 50, duplicates = 0 */
|
||||
|
||||
#ifdef __GNUC__
|
||||
inline
|
||||
__inline
|
||||
#endif
|
||||
static unsigned int
|
||||
hash (str, len)
|
||||
register char *str;
|
||||
register int unsigned len;
|
||||
register const char *str;
|
||||
register unsigned int len;
|
||||
{
|
||||
static unsigned char asso_values[] =
|
||||
{
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 11, 56, 56, 36, 56, 1, 37,
|
||||
31, 1, 56, 56, 56, 56, 29, 56, 1, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 1, 56, 32, 1, 2,
|
||||
1, 1, 4, 23, 56, 17, 56, 20, 9, 2,
|
||||
9, 26, 14, 56, 5, 1, 1, 16, 56, 21,
|
||||
20, 9, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 11, 56, 56, 36, 56, 1, 37,
|
||||
31, 1, 56, 56, 56, 56, 29, 56, 1, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 1, 56, 32, 1, 2,
|
||||
1, 1, 4, 23, 56, 17, 56, 20, 9, 2,
|
||||
9, 26, 14, 56, 5, 1, 1, 16, 56, 21,
|
||||
20, 9, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
|
||||
56, 56, 56, 56, 56, 56
|
||||
};
|
||||
register int hval = len;
|
||||
|
||||
|
|
@ -39,68 +52,68 @@ hash (str, len)
|
|||
{
|
||||
default:
|
||||
case 3:
|
||||
hval += asso_values[str[2]];
|
||||
hval += asso_values[(unsigned char)str[2]];
|
||||
case 2:
|
||||
case 1:
|
||||
hval += asso_values[str[0]];
|
||||
hval += asso_values[(unsigned char)str[0]];
|
||||
break;
|
||||
}
|
||||
return hval + asso_values[str[len - 1]];
|
||||
return hval + asso_values[(unsigned char)str[len - 1]];
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
inline
|
||||
__inline
|
||||
#endif
|
||||
struct kwtable *
|
||||
rb_reserved_word (str, len)
|
||||
register char *str;
|
||||
register const char *str;
|
||||
register unsigned int len;
|
||||
{
|
||||
static struct kwtable wordlist[] =
|
||||
{
|
||||
{"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
||||
{"end", kEND, kEND, EXPR_END},
|
||||
{"else", kELSE, kELSE, EXPR_BEG},
|
||||
{"case", kCASE, kCASE, EXPR_BEG},
|
||||
{"ensure", kENSURE, kENSURE, EXPR_BEG},
|
||||
{"module", kMODULE, kMODULE, EXPR_BEG},
|
||||
{"elsif", kELSIF, kELSIF, EXPR_BEG},
|
||||
{"def", kDEF, kDEF, EXPR_FNAME},
|
||||
{"rescue", kRESCUE, kRESCUE, EXPR_MID},
|
||||
{"not", kNOT, kNOT, EXPR_BEG},
|
||||
{"then", kTHEN, kTHEN, EXPR_BEG},
|
||||
{"yield", kYIELD, kYIELD, EXPR_END},
|
||||
{"for", kFOR, kFOR, EXPR_BEG},
|
||||
{"self", kSELF, kSELF, EXPR_END},
|
||||
{"false", kFALSE, kFALSE, EXPR_END},
|
||||
{"retry", kRETRY, kRETRY, EXPR_END},
|
||||
{"return", kRETURN, kRETURN, EXPR_MID},
|
||||
{"true", kTRUE, kTRUE, EXPR_END},
|
||||
{"if", kIF, kIF_MOD, EXPR_BEG},
|
||||
{"defined?", kDEFINED, kDEFINED, EXPR_END},
|
||||
{"super", kSUPER, kSUPER, EXPR_END},
|
||||
{"undef", kUNDEF, kUNDEF, EXPR_FNAME},
|
||||
{"break", kBREAK, kBREAK, EXPR_END},
|
||||
{"in", kIN, kIN, EXPR_BEG},
|
||||
{"do", kDO, kDO, EXPR_BEG},
|
||||
{"nil", kNIL, kNIL, EXPR_END},
|
||||
{"until", kUNTIL, kUNTIL_MOD, EXPR_BEG},
|
||||
{"unless", kUNLESS, kUNLESS_MOD, EXPR_BEG},
|
||||
{"or", kOR, kOR, EXPR_BEG},
|
||||
{"next", kNEXT, kNEXT, EXPR_END},
|
||||
{"when", kWHEN, kWHEN, EXPR_BEG},
|
||||
{"redo", kREDO, kREDO, EXPR_END},
|
||||
{"and", kAND, kAND, EXPR_BEG},
|
||||
{"begin", kBEGIN, kBEGIN, EXPR_BEG},
|
||||
{"__LINE__", k__LINE__, k__LINE__, EXPR_END},
|
||||
{"class", kCLASS, kCLASS, EXPR_CLASS},
|
||||
{"__FILE__", k__FILE__, k__FILE__, EXPR_END},
|
||||
{"END", klEND, klEND, EXPR_END},
|
||||
{"BEGIN", klBEGIN, klBEGIN, EXPR_END},
|
||||
{"while", kWHILE, kWHILE_MOD, EXPR_BEG},
|
||||
{"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",},
|
||||
{"",},
|
||||
{"alias", kALIAS, kALIAS, EXPR_FNAME},
|
||||
{""}, {""}, {""}, {""}, {""}, {""},
|
||||
{"end", kEND, kEND, EXPR_END},
|
||||
{"else", kELSE, kELSE, EXPR_BEG},
|
||||
{"case", kCASE, kCASE, EXPR_BEG},
|
||||
{"ensure", kENSURE, kENSURE, EXPR_BEG},
|
||||
{"module", kMODULE, kMODULE, EXPR_BEG},
|
||||
{"elsif", kELSIF, kELSIF, EXPR_BEG},
|
||||
{"def", kDEF, kDEF, EXPR_FNAME},
|
||||
{"rescue", kRESCUE, kRESCUE, EXPR_MID},
|
||||
{"not", kNOT, kNOT, EXPR_BEG},
|
||||
{"then", kTHEN, kTHEN, EXPR_BEG},
|
||||
{"yield", kYIELD, kYIELD, EXPR_END},
|
||||
{"for", kFOR, kFOR, EXPR_BEG},
|
||||
{"self", kSELF, kSELF, EXPR_END},
|
||||
{"false", kFALSE, kFALSE, EXPR_END},
|
||||
{"retry", kRETRY, kRETRY, EXPR_END},
|
||||
{"return", kRETURN, kRETURN, EXPR_MID},
|
||||
{"true", kTRUE, kTRUE, EXPR_END},
|
||||
{"if", kIF, kIF_MOD, EXPR_BEG},
|
||||
{"defined?", kDEFINED, kDEFINED, EXPR_END},
|
||||
{"super", kSUPER, kSUPER, EXPR_END},
|
||||
{"undef", kUNDEF, kUNDEF, EXPR_FNAME},
|
||||
{"break", kBREAK, kBREAK, EXPR_END},
|
||||
{"in", kIN, kIN, EXPR_BEG},
|
||||
{"do", kDO, kDO, EXPR_BEG},
|
||||
{"nil", kNIL, kNIL, EXPR_END},
|
||||
{"until", kUNTIL, kUNTIL_MOD, EXPR_BEG},
|
||||
{"unless", kUNLESS, kUNLESS_MOD, EXPR_BEG},
|
||||
{"or", kOR, kOR, EXPR_BEG},
|
||||
{"next", kNEXT, kNEXT, EXPR_END},
|
||||
{"when", kWHEN, kWHEN, EXPR_BEG},
|
||||
{"redo", kREDO, kREDO, EXPR_END},
|
||||
{"and", kAND, kAND, EXPR_BEG},
|
||||
{"begin", kBEGIN, kBEGIN, EXPR_BEG},
|
||||
{"__LINE__", k__LINE__, k__LINE__, EXPR_END},
|
||||
{"class", kCLASS, kCLASS, EXPR_CLASS},
|
||||
{"__FILE__", k__FILE__, k__FILE__, EXPR_END},
|
||||
{"END", klEND, klEND, EXPR_END},
|
||||
{"BEGIN", klBEGIN, klBEGIN, EXPR_END},
|
||||
{"while", kWHILE, kWHILE_MOD, EXPR_BEG},
|
||||
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
|
||||
{""},
|
||||
{"alias", kALIAS, kALIAS, EXPR_FNAME}
|
||||
};
|
||||
|
||||
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||
|
|
@ -109,9 +122,9 @@ rb_reserved_word (str, len)
|
|||
|
||||
if (key <= MAX_HASH_VALUE && key >= 0)
|
||||
{
|
||||
register char *s = wordlist[key].name;
|
||||
register const char *s = wordlist[key].name;
|
||||
|
||||
if (*s == *str && !strcmp (str + 1, s + 1))
|
||||
if (*str == *s && !strcmp (str + 1, s + 1))
|
||||
return &wordlist[key];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
12
object.c
12
object.c
|
|
@ -1019,6 +1019,8 @@ Init_Object()
|
|||
rb_define_method(rb_mKernel, "kind_of?", rb_obj_is_kind_of, 1);
|
||||
rb_define_method(rb_mKernel, "is_a?", rb_obj_is_kind_of, 1);
|
||||
|
||||
rb_define_global_function("singleton_method_added", rb_obj_dummy, 1);
|
||||
|
||||
rb_define_global_function("sprintf", rb_f_sprintf, -1);
|
||||
rb_define_global_function("format", rb_f_sprintf, -1);
|
||||
|
||||
|
|
@ -1034,18 +1036,14 @@ Init_Object()
|
|||
rb_define_method(rb_cNilClass, "to_s", nil_to_s, 0);
|
||||
rb_define_method(rb_cNilClass, "to_a", nil_to_a, 0);
|
||||
rb_define_method(rb_cNilClass, "inspect", nil_inspect, 0);
|
||||
rb_define_method(rb_cNilClass, "&", false_and, 1);
|
||||
rb_define_method(rb_cNilClass, "|", false_or, 1);
|
||||
rb_define_method(rb_cNilClass, "^", false_xor, 1);
|
||||
|
||||
rb_define_method(rb_cNilClass, "nil?", rb_true, 0);
|
||||
rb_undef_method(CLASS_OF(rb_cNilClass), "new");
|
||||
rb_define_global_const("NIL", Qnil);
|
||||
|
||||
/* default addition */
|
||||
#ifdef NIL_PLUS
|
||||
rb_define_method(rb_cNilClass, "+", nil_plus, 1);
|
||||
#endif
|
||||
|
||||
rb_define_global_function("singleton_method_added", rb_obj_dummy, 1);
|
||||
|
||||
rb_define_method(rb_cModule, "===", rb_mod_eqq, 1);
|
||||
rb_define_method(rb_cModule, "<=>", rb_mod_cmp, 1);
|
||||
rb_define_method(rb_cModule, "<", rb_mod_lt, 1);
|
||||
|
|
|
|||
6
parse.c
6
parse.c
|
|
@ -4945,8 +4945,10 @@ read_escape()
|
|||
int i;
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
buf[i] = nextc();
|
||||
if (buf[i] == -1) goto eof;
|
||||
int cc = nextc();
|
||||
|
||||
if (cc == -1) goto eof;
|
||||
buf[i] = cc;
|
||||
if (!ISXDIGIT(buf[i])) {
|
||||
pushback(buf[i]);
|
||||
break;
|
||||
|
|
|
|||
6
parse.y
6
parse.y
|
|
@ -1882,8 +1882,10 @@ read_escape()
|
|||
int i;
|
||||
|
||||
for (i=0; i<2; i++) {
|
||||
buf[i] = nextc();
|
||||
if (buf[i] == -1) goto eof;
|
||||
int cc = nextc();
|
||||
|
||||
if (cc == -1) goto eof;
|
||||
buf[i] = cc;
|
||||
if (!ISXDIGIT(buf[i])) {
|
||||
pushback(buf[i]);
|
||||
break;
|
||||
|
|
|
|||
2
random.c
2
random.c
|
|
@ -69,7 +69,7 @@ void srand48 _((long));
|
|||
#endif /* HAVE_RANDOM */
|
||||
|
||||
/* 0 <= RANDOM_NUMBER <= 1 */
|
||||
#define RANDOM_NUMBER (((double)RANDOM())/(double)RANDOM_MAX)
|
||||
#define RANDOM_NUMBER (((double)RANDOM())/(double)RANDOM_MAX+1)
|
||||
|
||||
#endif /* not HAVE_DRAND48 */
|
||||
|
||||
|
|
|
|||
4
range.c
4
range.c
|
|
@ -189,7 +189,7 @@ rb_range_beg_len(range, begp, lenp, len, err)
|
|||
beg += len;
|
||||
if (beg < 0) goto out_of_range;
|
||||
}
|
||||
if (err == 2) {
|
||||
if (err == 0 || err == 2) {
|
||||
if (beg > len) goto out_of_range;
|
||||
if (end > len || (!EXCL(range) && end == len))
|
||||
goto out_of_range;
|
||||
|
|
@ -197,7 +197,7 @@ rb_range_beg_len(range, begp, lenp, len, err)
|
|||
if (end < 0) {
|
||||
end += len;
|
||||
if (end < 0) {
|
||||
if (err == 1 && e == -1 && !EXCL(range)) {
|
||||
if (beg == 0 && end == -1 && !EXCL(range)) {
|
||||
len = 0;
|
||||
goto length_set;
|
||||
}
|
||||
|
|
|
|||
44
regex.c
44
regex.c
|
|
@ -75,7 +75,7 @@ void *xcalloc _((unsigned long,unsigned long));
|
|||
void *xrealloc _((void*,unsigned long));
|
||||
void free _((void*));
|
||||
|
||||
/* #define NO_ALLOCA /* try it out for now */
|
||||
/* #define NO_ALLOCA */ /* try it out for now */
|
||||
#ifndef NO_ALLOCA
|
||||
/* Make alloca work the best possible way. */
|
||||
#ifdef __GNUC__
|
||||
|
|
@ -678,11 +678,10 @@ is_in_list(c, b)
|
|||
{
|
||||
unsigned short size;
|
||||
unsigned short i, j;
|
||||
int result = 0;
|
||||
|
||||
size = *b++;
|
||||
if ((int)c / BYTEWIDTH < (int)size && b[c / BYTEWIDTH] & 1 << c % BYTEWIDTH) {
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
||||
b += size + 2;
|
||||
size = EXTRACT_UNSIGNED(&b[-2]);
|
||||
|
|
@ -699,7 +698,7 @@ is_in_list(c, b)
|
|||
if (i < size && EXTRACT_MBC(&b[i*8]) <= c
|
||||
&& ((unsigned char)c != '\n' && (unsigned char)c != '\0'))
|
||||
return 1;
|
||||
return result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1183,7 +1182,7 @@ re_compile_pattern(pattern, size, bufp)
|
|||
switch (c) {
|
||||
case '$':
|
||||
if (bufp->options & RE_OPTION_POSIXLINE) {
|
||||
BUFPUSH(endbuf2);
|
||||
BUFPUSH(endbuf);
|
||||
}
|
||||
else {
|
||||
p0 = p;
|
||||
|
|
@ -1359,7 +1358,7 @@ re_compile_pattern(pattern, size, bufp)
|
|||
|
||||
/* \ escapes characters when inside [...]. */
|
||||
if (c == '\\') {
|
||||
PATFETCH(c);
|
||||
PATFETCH_RAW(c);
|
||||
switch (c) {
|
||||
case 'w':
|
||||
for (c = 0; c < (1 << BYTEWIDTH); c++) {
|
||||
|
|
@ -2610,8 +2609,7 @@ re_compile_fastmap(bufp)
|
|||
fastmap[translate['\n']] = 1;
|
||||
else
|
||||
fastmap['\n'] = 1;
|
||||
|
||||
if (bufp->can_be_null == 0)
|
||||
if ((options & RE_OPTION_POSIXLINE) == 0 && bufp->can_be_null == 0)
|
||||
bufp->can_be_null = 2;
|
||||
break;
|
||||
|
||||
|
|
@ -2680,7 +2678,7 @@ re_compile_fastmap(bufp)
|
|||
/* Get to the number of times to succeed. */
|
||||
EXTRACT_NUMBER(k, p + 2);
|
||||
/* Increment p past the n for when k != 0. */
|
||||
if (k == 0) {
|
||||
if (k != 0) {
|
||||
p += 4;
|
||||
}
|
||||
else {
|
||||
|
|
@ -2763,9 +2761,8 @@ re_compile_fastmap(bufp)
|
|||
multi-byte char. See set_list_bits(). */
|
||||
for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
|
||||
if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))) {
|
||||
if (TRANSLATE_P())
|
||||
j = translate[j];
|
||||
fastmap[j] = (j>0x7f?(ismbchar(j)?0:2):1);
|
||||
int tmp = TRANSLATE_P()?translate[j]:j;
|
||||
fastmap[tmp] = (tmp>0x7f)?2:1;
|
||||
}
|
||||
{
|
||||
unsigned short size;
|
||||
|
|
@ -2974,11 +2971,12 @@ re_search(bufp, string, size, startpos, range, regs)
|
|||
int len = mbclen(c) - 1;
|
||||
if (fastmap[c])
|
||||
break;
|
||||
p += len;
|
||||
range -= len + 1;
|
||||
c = *p;
|
||||
if (fastmap[c] == 2)
|
||||
break;
|
||||
while (len--) {
|
||||
c = *p++;
|
||||
range--;
|
||||
if (fastmap[c] == 2)
|
||||
goto startpos_adjust;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (fastmap[MAY_TRANSLATE() ? translate[c] : c])
|
||||
|
|
@ -2986,6 +2984,7 @@ re_search(bufp, string, size, startpos, range, regs)
|
|||
range--;
|
||||
}
|
||||
}
|
||||
startpos_adjust:
|
||||
startpos += irange - range;
|
||||
}
|
||||
else { /* Searching backwards. */
|
||||
|
|
@ -3664,7 +3663,10 @@ re_match(bufp, string_arg, size, pos, regs)
|
|||
else if (TRANSLATE_P())
|
||||
cc = c = (unsigned char)translate[c];
|
||||
|
||||
part = not = is_in_list(c, p);
|
||||
not = is_in_list(c, p);
|
||||
if (!not) {
|
||||
not = is_in_list(cc, p);
|
||||
}
|
||||
if (*(p - 1) == (unsigned char)charset_not) {
|
||||
not = !not;
|
||||
}
|
||||
|
|
@ -3707,8 +3709,10 @@ re_match(bufp, string_arg, size, pos, regs)
|
|||
|
||||
/* Match at the very end of the data. */
|
||||
case endbuf2:
|
||||
if (AT_STRINGS_END(d))
|
||||
break;
|
||||
if (AT_STRINGS_END(d)) {
|
||||
if (size == 0 || d[-1] != '\n')
|
||||
break;
|
||||
}
|
||||
/* .. or newline just before the end of the data. */
|
||||
if (*d == '\n' && AT_STRINGS_END(d+1))
|
||||
break;
|
||||
|
|
|
|||
4
string.c
4
string.c
|
|
@ -701,7 +701,7 @@ rb_str_succ(orig)
|
|||
{
|
||||
VALUE str, str2;
|
||||
char *sbeg, *s;
|
||||
char c = -1;
|
||||
int c = -1;
|
||||
|
||||
str = rb_str_new(RSTRING(orig)->ptr, RSTRING(orig)->len);
|
||||
|
||||
|
|
@ -1708,7 +1708,7 @@ tr_trans(str, src, repl, sflag)
|
|||
}
|
||||
}
|
||||
else {
|
||||
char r;
|
||||
int r;
|
||||
|
||||
for (i=0; i<256; i++) {
|
||||
trans[i] = 0;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ CFLAGS = -nologo -DNT=1 -Ox -I. -I./missing
|
|||
LDFLAGS = $(CFLAGS) -Fm
|
||||
#CFLAGS = -nologo -DNT=1 -Zi -MD
|
||||
#LDFLAGS = $(CFLAGS) -Fm -MD
|
||||
LIBS = $(EXTLIBS) advapi32.lib wsock32.lib
|
||||
LIBS = advapi32.lib wsock32.lib
|
||||
MISSING = crypt.obj alloca.obj win32.obj fnmatch.obj isinf.obj isnan.obj
|
||||
|
||||
prefix =
|
||||
|
|
@ -85,7 +85,7 @@ miniruby$(binsuffix): $(OBJS) $(MAINOBJ) $(EXTOBJS)
|
|||
@echo $(EXTOBJS)
|
||||
@echo $(LIBS)
|
||||
@rm -f miniruby$(binsuffix)
|
||||
$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBY_A) $(LIBS) -o $@
|
||||
$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBS) -o $@
|
||||
|
||||
$(PROGRAM): $(LIBRUBY) $(MAINOBJ) rubymw.dll
|
||||
@rm -f $(PROGRAM)
|
||||
|
|
@ -105,7 +105,7 @@ install: rbconfig.rb
|
|||
|
||||
clean:; @rm -f $(OBJS) $(LIBRUBY) rbconfig.rb
|
||||
@rm -f ext/extinit.c ext/extinit.obj *.obj
|
||||
@-./miniruby$(binsuffix) -Xext extmk.rb clean 2> /dev/null || true
|
||||
@.\miniruby$(binsuffix) -Xext extmk.rb clean 2> nul || true
|
||||
|
||||
distclean: clean
|
||||
@rm -f Makefile ext/extmk.rb config.h
|
||||
|
|
@ -118,7 +118,7 @@ realclean: distclean
|
|||
@rm -f lex.c
|
||||
|
||||
test: miniruby$(binsuffix)
|
||||
@./miniruby$(binsuffix) $(srcdir)/rubytest.rb
|
||||
@.\miniruby$(binsuffix) $(srcdir)/rubytest.rb
|
||||
|
||||
.c.obj:
|
||||
$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue