Skip to content

Commit

Permalink
Merge branch 'master' into iij
Browse files Browse the repository at this point in the history
Conflicts:
	test/t/string.rb
  • Loading branch information
tsahara committed Sep 11, 2012
2 parents 62a69d8 + 2dbd6fa commit 2d4620f
Show file tree
Hide file tree
Showing 30 changed files with 201 additions and 168 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# makefile discription.
# Makefile description.
# basic build file for mruby

# compiler, linker (gcc), archiver, parser generator
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ To subscribe to the mruby mailing list....[T.B.D.]

See the INSTALL file.

## Running Tests

To run the tests, execute the following from the project's root directory.

$ make test

## License

Expand Down
2 changes: 1 addition & 1 deletion include/mrbconf.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
//#define MRB_USE_IV_SEGLIST

/* initial size for IV khash; ignored when MRB_USE_IV_SEGLIST is set */
//#define MRB_IV_INITIAL_SIZE 8
//#define MRB_IVHASH_INIT_SIZE 8

/* default size of khash table bucket */
//#define KHASH_DEFAULT_SIZE 32
Expand Down
1 change: 1 addition & 0 deletions include/mruby.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ void mrb_p(mrb_state*, mrb_value);
mrb_int mrb_obj_id(mrb_value obj);
mrb_sym mrb_to_id(mrb_state *mrb, mrb_value name);

int mrb_obj_eq(mrb_state*, mrb_value, mrb_value);
int mrb_obj_equal(mrb_state*, mrb_value, mrb_value);
int mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2);
mrb_value mrb_Integer(mrb_state *mrb, mrb_value val);
Expand Down
76 changes: 38 additions & 38 deletions include/mruby/value.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@ enum mrb_vtype {
MRB_TT_SYMBOL, /* 4 */
MRB_TT_UNDEF, /* 5 */
MRB_TT_FLOAT, /* 6 */
MRB_TT_OBJECT, /* 7 */
MRB_TT_CLASS, /* 8 */
MRB_TT_MODULE, /* 9 */
MRB_TT_ICLASS, /* 10 */
MRB_TT_SCLASS, /* 11 */
MRB_TT_PROC, /* 12 */
MRB_TT_ARRAY, /* 13 */
MRB_TT_HASH, /* 14 */
MRB_TT_STRING, /* 15 */
MRB_TT_RANGE, /* 16 */
MRB_TT_REGEX, /* 17 */
MRB_TT_STRUCT, /* 18 */
MRB_TT_EXCEPTION, /* 19 */
MRB_TT_MATCH, /* 20 */
MRB_TT_FILE, /* 21 */
MRB_TT_ENV, /* 22 */
MRB_TT_DATA, /* 23 */
MRB_TT_MAIN, /* 24 */
MRB_TT_MAIN, /* 7 */
MRB_TT_OBJECT, /* 8 */
MRB_TT_CLASS, /* 9 */
MRB_TT_MODULE, /* 10 */
MRB_TT_ICLASS, /* 11 */
MRB_TT_SCLASS, /* 12 */
MRB_TT_PROC, /* 13 */
MRB_TT_ARRAY, /* 14 */
MRB_TT_HASH, /* 15 */
MRB_TT_STRING, /* 16 */
MRB_TT_RANGE, /* 17 */
MRB_TT_REGEX, /* 18 */
MRB_TT_STRUCT, /* 19 */
MRB_TT_EXCEPTION, /* 20 */
MRB_TT_MATCH, /* 21 */
MRB_TT_FILE, /* 22 */
MRB_TT_ENV, /* 23 */
MRB_TT_DATA, /* 24 */
MRB_TT_MAXDEFINE /* 25 */
};

Expand Down Expand Up @@ -78,25 +78,25 @@ enum mrb_vtype {
MRB_TT_SYMBOL, /* 5 */
MRB_TT_UNDEF, /* 6 */
MRB_TT_FLOAT, /* 7 */
MRB_TT_OBJECT, /* 8 */
MRB_TT_CLASS, /* 9 */
MRB_TT_MODULE, /* 10 */
MRB_TT_ICLASS, /* 11 */
MRB_TT_SCLASS, /* 12 */
MRB_TT_PROC, /* 13 */
MRB_TT_ARRAY, /* 14 */
MRB_TT_HASH, /* 15 */
MRB_TT_STRING, /* 16 */
MRB_TT_RANGE, /* 17 */
MRB_TT_REGEX, /* 18 */
MRB_TT_STRUCT, /* 19 */
MRB_TT_EXCEPTION, /* 20 */
MRB_TT_MATCH, /* 21 */
MRB_TT_FILE, /* 22 */
MRB_TT_ENV, /* 23 */
MRB_TT_DATA, /* 24 */
MRB_TT_MAIN, /* 25 */
MRB_TT_MAXDEFINE /* 26 */
MRB_TT_MAIN, /* 8 */
MRB_TT_OBJECT, /* 9 */
MRB_TT_CLASS, /* 10 */
MRB_TT_MODULE, /* 11 */
MRB_TT_ICLASS, /* 12 */
MRB_TT_SCLASS, /* 13 */
MRB_TT_PROC, /* 14 */
MRB_TT_ARRAY, /* 15 */
MRB_TT_HASH, /* 16 */
MRB_TT_STRING, /* 17 */
MRB_TT_RANGE, /* 18 */
MRB_TT_REGEX, /* 19 */
MRB_TT_STRUCT, /* 20 */
MRB_TT_EXCEPTION, /* 21 */
MRB_TT_MATCH, /* 22 */
MRB_TT_FILE, /* 23 */
MRB_TT_ENV, /* 24 */
MRB_TT_DATA, /* 25 */
MRB_TT_MAXDEFINE /* 27 */
};

#ifdef MRB_ENDIAN_BIG
Expand Down Expand Up @@ -156,7 +156,7 @@ mrb_float_value(mrb_float f)

#include "mruby/object.h"

#define IMMEDIATE_P(x) (mrb_type(x) <= MRB_TT_FLOAT)
#define IMMEDIATE_P(x) (mrb_type(x) <= MRB_TT_MAIN)
#define SPECIAL_CONST_P(x) IMMEDIATE_P(x)
#define SYMBOL_P(o) (mrb_type(o) == MRB_TT_SYMBOL)
#define RTEST(o) mrb_test(o)
Expand Down
4 changes: 2 additions & 2 deletions mrblib/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# makefile discription.
# Makefile description.
# basic build file for mruby library (Ruby part)

# project-specific macros
Expand Down Expand Up @@ -69,7 +69,7 @@ $(CLIB) : $(RLIB1) $(RLIB2) $(MRBC)
$(MRBC) -Bmrblib_ext_irep -o$(DLIB2) $(RLIB2)
$(CAT) init_$(TARGET).c $(DLIB1) $(DLIB2) > $@

$(MRBC) : ../src/opcode.h ../src/codegen.c ../src/parse.y
$(MRBC) : $(LIBR0)
$(MAKE) -C ../tools/mrbc $(MAKE_FLAGS)

# merge mruby sources
Expand Down
8 changes: 0 additions & 8 deletions mrblib/error.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,6 @@ class IndexError < StandardError
class KeyError < IndexError
end

# ISO 15.2.37
class ScriptError < Exception
end

# ISO 15.2.38
class SyntaxError < ScriptError
end

class NotImplementedError < ScriptError
end

2 changes: 1 addition & 1 deletion src/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# makefile discription.
# Makefile description.
# basic build file for mruby library

# project-specific macros
Expand Down
14 changes: 7 additions & 7 deletions src/array.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,13 @@ ary_new_capa(mrb_state *mrb, int capa)
mrb_raise(mrb, E_ARGUMENT_ERROR, "ary size too big");
}
#endif
if (capa < ARY_DEFAULT_LEN) {
capa = ARY_DEFAULT_LEN;
}
blen = capa * sizeof(mrb_value) ;
if (blen < capa) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "ary size too big");
}

a = (struct RArray*)mrb_obj_alloc(mrb, MRB_TT_ARRAY, mrb->array_class);
a->ptr = (mrb_value *)mrb_calloc(mrb, blen, 1);
a->ptr = (mrb_value *)mrb_malloc(mrb, blen);
a->aux.capa = capa;
a->len = 0;

Expand Down Expand Up @@ -859,9 +856,11 @@ mrb_ary_clear(mrb_state *mrb, mrb_value self)
{
struct RArray *a = mrb_ary_ptr(self);

a->len = 0;
ary_modify(mrb, a);
ary_shrink_capa(mrb, a);
a->len = 0;
a->aux.capa = 0;
mrb_free(mrb, a->ptr);
a->ptr = 0;

return self;
}
Expand Down Expand Up @@ -1054,7 +1053,8 @@ mrb_ary_equal(mrb_state *mrb, mrb_value ary1)
mrb_value ary2;

mrb_get_args(mrb, "o", &ary2);
if (mrb_obj_equal(mrb, ary1,ary2)) return mrb_true_value();
if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value();
if (SPECIAL_CONST_P(ary2)) return mrb_false_value();
if (mrb_type(ary2) != MRB_TT_ARRAY) {
if (!mrb_respond_to(mrb, ary2, mrb_intern(mrb, "to_ary"))) {
return mrb_false_value();
Expand Down
3 changes: 2 additions & 1 deletion src/class.c
Original file line number Diff line number Diff line change
Expand Up @@ -1090,7 +1090,7 @@ mrb_class_name(mrb_state *mrb, struct RClass* c)
const char*
mrb_obj_classname(mrb_state *mrb, mrb_value obj)
{
return mrb_class_name(mrb, mrb_class(mrb, obj));
return mrb_class_name(mrb, mrb_obj_class(mrb, obj));
}

/*!
Expand Down Expand Up @@ -1417,6 +1417,7 @@ mrb_init_class(mrb_state *mrb)
mrb_define_method(mrb, mod, "included_modules", mrb_mod_included_modules, ARGS_NONE()); /* 15.2.2.4.30 */

mrb_define_method(mrb, mod, "to_s", mrb_mod_to_s, ARGS_NONE());
mrb_define_method(mrb, mod, "inspect", mrb_mod_to_s, ARGS_NONE());
mrb_define_method(mrb, mod, "alias_method", mrb_mod_alias, ARGS_ANY()); /* 15.2.2.4.8 */
mrb_define_method(mrb, mod, "ancestors", mrb_mod_ancestors, ARGS_NONE()); /* 15.2.2.4.9 */
mrb_define_method(mrb, mod, "undef_method", mrb_mod_undef, ARGS_ANY()); /* 15.2.2.4.41 */
Expand Down
24 changes: 10 additions & 14 deletions src/dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, char *buf, int type)
char *buf_top = buf;
char *char_buf;
uint16_t buf_size =0;
int len;
uint16_t len =0;

buf_size = MRB_DUMP_DEFAULT_STR_LEN;
if ((char_buf = (char *)mrb_malloc(mrb, buf_size)) == 0)
Expand All @@ -341,25 +341,23 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, char *buf, int type)
buf += uint32_dump((uint32_t)irep->plen, buf, type); /* number of pool */

for (pool_no = 0; pool_no < irep->plen; pool_no++) {
uint16_t nlen =0;

buf += uint8_dump(mrb_type(irep->pool[pool_no]), buf, type); /* data type */
memset(char_buf, 0, buf_size);

switch (mrb_type(irep->pool[pool_no])) {
case MRB_TT_FIXNUM:
sprintf(char_buf, "%d", mrb_fixnum(irep->pool[pool_no]));
len = sprintf(char_buf, "%d", mrb_fixnum(irep->pool[pool_no]));
break;

case MRB_TT_FLOAT:
sprintf(char_buf, "%.16e", mrb_float(irep->pool[pool_no]));
len = sprintf(char_buf, "%.16e", mrb_float(irep->pool[pool_no]));
break;

case MRB_TT_STRING:
str = mrb_string_value( mrb, &irep->pool[pool_no]);
nlen = str_dump_len(RSTRING_PTR(str), RSTRING_LEN(str), type);
if ( nlen > buf_size - 1) {
buf_size = nlen + 1;
len = str_dump_len(RSTRING_PTR(str), RSTRING_LEN(str), type);
if ( len > buf_size - 1) {
buf_size = len + 1;
if ((char_buf = (char *)mrb_realloc(mrb, char_buf, buf_size)) == 0)
goto error_exit;
memset(char_buf, 0, buf_size);
Expand All @@ -370,9 +368,9 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, char *buf, int type)
#ifdef ENABLE_REGEXP
case MRB_TT_REGEX:
str = mrb_reg_to_s(mrb, irep->pool[pool_no]);
nlen = str_dump_len(RSTRING_PTR(str), RSTRING_LEN(str), type);
if ( nlen > buf_size - 1) {
buf_size = nlen + 1;
len = str_dump_len(RSTRING_PTR(str), RSTRING_LEN(str), type);
if ( len > buf_size - 1) {
buf_size = len + 1;
if ((char_buf = mrb_realloc(mrb, char_buf, buf_size)) == 0)
goto error_exit;
memset(char_buf, 0, buf_size);
Expand All @@ -386,9 +384,7 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, char *buf, int type)
continue;
}

len = strlen(char_buf);

buf += uint16_dump((uint16_t)len, buf, type); /* data length */
buf += uint16_dump(len, buf, type); /* data length */

memcpy(buf, char_buf, len);
buf += len;
Expand Down
4 changes: 4 additions & 0 deletions src/error.c
Original file line number Diff line number Diff line change
Expand Up @@ -407,4 +407,8 @@ mrb_init_exception(mrb_state *mrb)

mrb->eStandardError_class = mrb_define_class(mrb, "StandardError", mrb->eException_class); /* 15.2.23 */
mrb_define_class(mrb, "RuntimeError", mrb->eStandardError_class); /* 15.2.28 */

mrb_define_class(mrb, "RuntimeError", mrb->eStandardError_class); /* 15.2.28 */
e = mrb_define_class(mrb, "ScriptError", mrb->eException_class); /* 15.2.37 */
mrb_define_class(mrb, "SyntaxError", e); /* 15.2.38 */
}
13 changes: 2 additions & 11 deletions src/object.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,8 @@ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)

if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
result = mrb_funcall(mrb, obj1, "==", 1, obj2);
if (mrb_nil_p(result)) {
return FALSE;
}
else {
if (mrb_type(result) == MRB_TT_TRUE) {
return TRUE;
}
else {
return FALSE;
}
}
if (mrb_test(result)) return TRUE;
return FALSE;
}

/*
Expand Down
2 changes: 2 additions & 0 deletions src/state.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ mrb_close(mrb_state *mrb)
mrb_free(mrb, mrb->irep[i]);
}
mrb_free(mrb, mrb->irep);
mrb_free(mrb, mrb->rescue);
mrb_free(mrb, mrb->ensure);
mrb_free_symtbl(mrb);
mrb_free_heap(mrb);
mrb_alloca_free(mrb);
Expand Down
3 changes: 1 addition & 2 deletions src/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@

#ifdef _WIN32
/* Win32 platform do not provide gmtime_r/localtime_r; emulate them using gmtime_s/localtime_s */
#if _MVC_VER
#define gmtime_r(tp, tm) ((gmtime_s((tm), (tp)) == 0) ? (tm) : NULL)
#define localtime_r(tp, tm) ((localtime_s((tm), (tp)) == 0) ? (tm) : NULL)
#else
#define NO_GMTIME_R
#endif
#endif

/* timegm(3) */
/* mktime() creates tm structure for localtime; timegm() is for UTF time */
Expand Down Expand Up @@ -710,6 +708,7 @@ mrb_init_time(mrb_state *mrb)
mrb_define_method(mrb, tc, "+" , mrb_time_plus , ARGS_REQ(1)); /* 15.2.19.7.2 */
mrb_define_method(mrb, tc, "-" , mrb_time_minus , ARGS_REQ(1)); /* 15.2.19.7.3 */
mrb_define_method(mrb, tc, "to_s" , mrb_time_asctime, ARGS_NONE());
mrb_define_method(mrb, tc, "inspect", mrb_time_asctime, ARGS_NONE());
mrb_define_method(mrb, tc, "asctime", mrb_time_asctime, ARGS_NONE()); /* 15.2.19.7.4 */
mrb_define_method(mrb, tc, "ctime" , mrb_time_asctime, ARGS_NONE()); /* 15.2.19.7.5 */
mrb_define_method(mrb, tc, "day" , mrb_time_day , ARGS_NONE()); /* 15.2.19.7.6 */
Expand Down
8 changes: 4 additions & 4 deletions src/variable.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,8 +251,8 @@ iv_free(mrb_state *mrb, iv_tbl *t)

#include "mruby/khash.h"

#ifndef MRB_IV_INITIAL_SIZE
#define MRB_IV_INITIAL_SIZE 8
#ifndef MRB_IVHASH_INIT_SIZE
#define MRB_IVHASH_INIT_SIZE 8
#endif

KHASH_DECLARE(iv, mrb_sym, mrb_value, 1)
Expand All @@ -265,7 +265,7 @@ typedef struct iv_tbl {
static iv_tbl*
iv_new(mrb_state *mrb)
{
return (iv_tbl*)kh_init_size(iv, mrb, MRB_IV_INITIAL_SIZE);
return (iv_tbl*)kh_init_size(iv, mrb, MRB_IVHASH_INIT_SIZE);
}

static void
Expand Down Expand Up @@ -549,7 +549,7 @@ mrb_iv_remove(mrb_state *mrb, mrb_value obj, mrb_sym sym)
iv_tbl *t = mrb_obj_ptr(obj)->iv;
mrb_value val;

if (iv_del(mrb, t, sym, &val)) {
if (t && iv_del(mrb, t, sym, &val)) {
return val;
}
}
Expand Down
Loading

0 comments on commit 2d4620f

Please sign in to comment.