Skip to content

Commit

Permalink
Merge pull request #1338 from h2o/i110/mruby-update
Browse files Browse the repository at this point in the history
update mruby to the latest
  • Loading branch information
kazuho committed Oct 12, 2017
1 parent 8d2b87b commit 77455f6
Show file tree
Hide file tree
Showing 64 changed files with 1,590 additions and 1,075 deletions.
52 changes: 35 additions & 17 deletions deps/mruby/include/mruby.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ typedef struct {
mrb_value *stackent;
int nregs;
int ridx;
int eidx;
int epos;
struct REnv *env;
mrb_code *pc; /* return address */
mrb_code *err; /* error position */
Expand Down Expand Up @@ -143,7 +143,7 @@ struct mrb_context {
mrb_code **rescue; /* exception handler stack */
int rsize;
struct RProc **ensure; /* ensure handler stack */
int esize;
int esize, eidx;

enum mrb_fiber_state status;
mrb_bool vmexec;
Expand All @@ -152,14 +152,6 @@ struct mrb_context {

struct mrb_jmpbuf;

typedef struct {
const char *filename;
int lineno;
struct RClass *klass;
char sep;
mrb_sym method_id;
} mrb_backtrace_entry;

typedef void (*mrb_atexit_func)(struct mrb_state*);

#define MRB_STATE_NO_REGEXP 1
Expand All @@ -174,15 +166,9 @@ typedef struct mrb_state {

struct mrb_context *c;
struct mrb_context *root_c;
struct iv_tbl *globals; /* global variable table */

struct RObject *exc; /* exception */
struct {
struct RObject *exc;
int n;
int n_allocated;
mrb_backtrace_entry *entries;
} backtrace;
struct iv_tbl *globals; /* global variable table */

struct RObject *top_self;
struct RClass *object_class; /* Object class */
Expand Down Expand Up @@ -1121,6 +1107,11 @@ MRB_API mrb_value mrb_yield(mrb_state *mrb, mrb_value b, mrb_value arg);
MRB_API mrb_value mrb_yield_argv(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv);
MRB_API mrb_value mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value *argv, mrb_value self, struct RClass *c);

/* continue execution to the proc */
/* this function should always be called as the last function of a method */
/* e.g. return mrb_yield_cont(mrb, proc, self, argc, argv); */
mrb_value mrb_yield_cont(mrb_state *mrb, mrb_value b, mrb_value self, mrb_int argc, const mrb_value *argv);

/* mrb_gc_protect() leaves the object in the arena */
MRB_API void mrb_gc_protect(mrb_state *mrb, mrb_value obj);
/* mrb_gc_register() keeps the object from GC. */
Expand Down Expand Up @@ -1187,6 +1178,33 @@ MRB_API void mrb_show_copyright(mrb_state *mrb);

MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...);

#if 0
/* memcpy and memset does not work with gdb reverse-next on my box */
/* use naive memcpy and memset instead */
#undef memcpy
#undef memset
static inline void*
mrbmemcpy(void *dst, const void *src, size_t n)
{
char *d = (char*)dst;
const char *s = (const char*)src;
while (n--)
*d++ = *s++;
return d;
}
#define memcpy(a,b,c) mrbmemcpy(a,b,c)

static inline void*
mrbmemset(void *s, int c, size_t n)
{
char *t = (char*)s;
while (n--)
*t++ = c;
return s;
}
#define memset(a,b,c) mrbmemset(a,b,c)
#endif

MRB_END_DECL

#endif /* MRUBY_H */
2 changes: 1 addition & 1 deletion deps/mruby/include/mruby/boxing_word.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ MRB_API mrb_value mrb_word_boxing_float_pool(struct mrb_state*, mrb_float);
#define mrb_ptr(o) (o).value.p
#define mrb_cptr(o) (o).value.vp->p
#define mrb_float(o) (o).value.fp->f
#define mrb_fixnum(o) (o).value.i
#define mrb_fixnum(o) ((mrb_int)(o).value.i)
#define mrb_symbol(o) (o).value.sym

static inline enum mrb_vtype
Expand Down
2 changes: 1 addition & 1 deletion deps/mruby/include/mruby/class.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ mrb_class(mrb_state *mrb, mrb_value v)
}
}

// TODO: figure out where to put user flags
/* TODO: figure out where to put user flags */
#define MRB_FLAG_IS_FROZEN (1 << 18)
#define MRB_FLAG_IS_PREPENDED (1 << 19)
#define MRB_FLAG_IS_ORIGIN (1 << 20)
Expand Down
1 change: 0 additions & 1 deletion deps/mruby/include/mruby/compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ MRB_API struct mrb_parser_state* mrb_parse_file(mrb_state*,FILE*,mrbc_context*);
MRB_API struct mrb_parser_state* mrb_parse_string(mrb_state*,const char*,mrbc_context*);
MRB_API struct mrb_parser_state* mrb_parse_nstring(mrb_state*,const char*,int,mrbc_context*);
MRB_API struct RProc* mrb_generate_code(mrb_state*, struct mrb_parser_state*);
MRB_API mrb_value mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c);

/* program load functions */
#ifndef MRB_DISABLE_STDIO
Expand Down
2 changes: 1 addition & 1 deletion deps/mruby/include/mruby/dump.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ MRB_API mrb_irep *mrb_read_irep(mrb_state*, const uint8_t*);
/* Rite Binary File header */
#define RITE_BINARY_IDENT "RITE"
#define RITE_BINARY_IDENT_LIL "ETIR"
#define RITE_BINARY_FORMAT_VER "0003"
#define RITE_BINARY_FORMAT_VER "0004"
#define RITE_COMPILER_NAME "MATZ"
#define RITE_COMPILER_VERSION "0000"

Expand Down
7 changes: 7 additions & 0 deletions deps/mruby/include/mruby/error.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ MRB_API mrb_noreturn void mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_va
/* declaration for fail method */
MRB_API mrb_value mrb_f_raise(mrb_state*, mrb_value);

struct RBreak {
MRB_OBJECT_HEADER;
struct iv_tbl *iv;
struct RProc *proc;
mrb_value val;
};

/**
* Protect
*
Expand Down
5 changes: 4 additions & 1 deletion deps/mruby/include/mruby/gc.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ MRB_BEGIN_DECL

struct mrb_state;

typedef void (mrb_each_object_callback)(struct mrb_state *mrb, struct RBasic *obj, void *data);
#define MRB_EACH_OBJ_OK 0
#define MRB_EACH_OBJ_BREAK 1
typedef int (mrb_each_object_callback)(struct mrb_state *mrb, struct RBasic *obj, void *data);
void mrb_objspace_each_objects(struct mrb_state *mrb, mrb_each_object_callback *callback, void *data);
MRB_API void mrb_free_context(struct mrb_state *mrb, struct mrb_context *c);

Expand Down Expand Up @@ -62,6 +64,7 @@ typedef struct mrb_gc {
size_t threshold;
int interval_ratio;
int step_ratio;
mrb_bool iterating :1;
mrb_bool disabled :1;
mrb_bool full :1;
mrb_bool generational :1;
Expand Down
2 changes: 1 addition & 1 deletion deps/mruby/include/mruby/hash.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ struct RHash {
#define mrb_hash_ptr(v) ((struct RHash*)(mrb_ptr(v)))
#define mrb_hash_value(p) mrb_obj_value((void*)(p))

MRB_API mrb_value mrb_hash_new_capa(mrb_state*, int);
MRB_API mrb_value mrb_hash_new_capa(mrb_state*, mrb_int);

/*
* Initializes a new hash.
Expand Down
8 changes: 8 additions & 0 deletions deps/mruby/include/mruby/numeric.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ MRB_BEGIN_DECL
#define NEGFIXABLE(f) ((f) >= MRB_INT_MIN)
#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))

#ifdef MRB_INT64
#define FIXABLE_FLOAT(f) FIXABLE((mrb_int)(f))
#else
#define FIXABLE_FLOAT(f) FIXABLE(f)
#endif

MRB_API mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val);
MRB_API mrb_value mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, int base);
/* ArgumentError if format string doesn't match /%(\.[0-9]+)?[aAeEfFgG]/ */
Expand All @@ -42,9 +48,11 @@ mrb_value mrb_num_div(mrb_state *mrb, mrb_value x, mrb_value y);
# define MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
#endif

/*
// Clang 3.8 and 3.9 have problem compiling mruby in 32-bit mode, when MRB_INT64 is set
// because of missing __mulodi4 and similar functions in its runtime. We need to use custom
// implementation for them.
*/
#ifdef MRB_HAVE_TYPE_GENERIC_CHECKED_ARITHMETIC_BUILTINS
#if defined(__clang__) && (__clang_major__ == 3) && (__clang_minor__ >= 8) && \
defined(MRB_32BIT) && defined(MRB_INT64)
Expand Down
7 changes: 6 additions & 1 deletion deps/mruby/include/mruby/proc.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,11 @@ MRB_BEGIN_DECL
struct REnv {
MRB_OBJECT_HEADER;
mrb_value *stack;
mrb_sym mid;
ptrdiff_t cioff;
union {
mrb_sym mid;
struct mrb_context *c;
} cxt;
};

#define MRB_SET_ENV_STACK_LEN(e,len) (e)->flags = (unsigned int)(len)
Expand Down Expand Up @@ -52,6 +55,8 @@ struct RProc {
#define MRB_PROC_CFUNC_P(p) (((p)->flags & MRB_PROC_CFUNC) != 0)
#define MRB_PROC_STRICT 256
#define MRB_PROC_STRICT_P(p) (((p)->flags & MRB_PROC_STRICT) != 0)
#define MRB_PROC_ORPHAN 512
#define MRB_PROC_ORPHAN_P(p) (((p)->flags & MRB_PROC_ORPHAN) != 0)

#define mrb_proc_ptr(v) ((struct RProc*)(mrb_ptr(v)))

Expand Down
12 changes: 11 additions & 1 deletion deps/mruby/include/mruby/value.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ enum mrb_vtype {
MRB_TT_DATA, /* 21 */
MRB_TT_FIBER, /* 22 */
MRB_TT_ISTRUCT, /* 23 */
MRB_TT_MAXDEFINE /* 24 */
MRB_TT_BREAK, /* 24 */
MRB_TT_MAXDEFINE /* 25 */
};

#include <mruby/object.h>
Expand Down Expand Up @@ -266,6 +267,14 @@ mrb_undef_value(void)
}

#ifdef MRB_USE_ETEXT_EDATA
#if (defined(__APPLE__) && defined(__MACH__))
#include <mach-o/getsect.h>
static inline mrb_bool
mrb_ro_data_p(const char *p)
{
return (const char*)get_etext() < p && p < (const char*)get_edata();
}
#else
extern char _etext[];
#ifdef MRB_NO_INIT_ARRAY_START
extern char _edata[];
Expand All @@ -284,6 +293,7 @@ mrb_ro_data_p(const char *p)
return _etext < p && p < (char*)&__init_array_start;
}
#endif
#endif
#else
# define mrb_ro_data_p(p) FALSE
#endif
Expand Down
2 changes: 1 addition & 1 deletion deps/mruby/include/mruby/version.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ MRB_BEGIN_DECL
/*
* Minor release version number.
*/
#define MRUBY_RELEASE_MINOR 2
#define MRUBY_RELEASE_MINOR 3

/*
* Tiny release version number.
Expand Down
2 changes: 1 addition & 1 deletion deps/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ main(int argc, char **argv)
char_index = 0;
while ((last_char = getchar()) != '\n') {
if (last_char == EOF) break;
if (char_index > sizeof(last_code_line)-2) {
if (char_index >= sizeof(last_code_line)-2) {
fputs("input string too long\n", stderr);
continue;
}
Expand Down
2 changes: 1 addition & 1 deletion deps/mruby/mrbgems/mruby-bin-mruby-config/mrbgem.rake
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ MRuby.each_target do
FileUtils.copy "#{File.dirname(__FILE__)}/#{mruby_config}", t.name
config = Hash[open("#{build_dir}/lib/libmruby.flags.mak").read.split("\n").map {|x| a = x.split(/\s*=\s*/, 2); [a[0], a[1].gsub('\\"', '"') ]}]
IO.write(t.name, File.open(t.name) {|f|
f.read.gsub (/echo (MRUBY_CFLAGS|MRUBY_LIBS|MRUBY_LDFLAGS_BEFORE_LIBS|MRUBY_LDFLAGS)/) {|x| config[$1].empty? ? '' : "echo #{config[$1]}"}
f.read.gsub (/echo (MRUBY_CFLAGS|MRUBY_LIBS|MRUBY_LDFLAGS_BEFORE_LIBS|MRUBY_LDFLAGS|MRUBY_LIBMRUBY_PATH)/) {|x| config[$1].empty? ? '' : "echo #{config[$1]}"}
})
FileUtils.chmod(0755, t.name)
end
Expand Down
4 changes: 3 additions & 1 deletion deps/mruby/mrbgems/mruby-bin-mruby-config/mruby-config
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ while [ $# -gt 0 ]; do
--ldflags) echo MRUBY_LDFLAGS;;
--ldflags-before-libs) echo MRUBY_LDFLAGS_BEFORE_LIBS;;
--libs) echo MRUBY_LIBS;;
--libmruby-path) echo MRUBY_LIBMRUBY_PATH;;
--help) echo "Usage: mruby-config [switches]"
echo " switches:"
echo " --cflags print flags passed to compiler"
echo " --ldflags print flags passed to linker"
echo " --ldflags-before-libs print flags passwd to linker before linked libraries"
echo " --ldflags-before-libs print flags passed to linker before linked libraries"
echo " --libs print linked libraries"
echo " --libmruby-path print libmruby path"
exit 0;;
esac
shift
Expand Down
8 changes: 7 additions & 1 deletion deps/mruby/mrbgems/mruby-bin-mruby-config/mruby-config.bat
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ if "%0" equ "--cflags" goto cflags
if "%0" equ "--ldflags" goto ldflags
if "%0" equ "--ldflags-before-libs" goto ldflagsbeforelibs
if "%0" equ "--libs" goto libs
if "%0" equ "--libmruby-path" goto libmrubypath
if "%0" equ "--help" goto showhelp
echo Invalid Option
goto :eof
Expand All @@ -27,10 +28,15 @@ goto top
echo MRUBY_LDFLAGS_BEFORE_LIBS
goto top

:libmrubypath
echo MRUBY_LIBMRUBY_PATH
goto top

:showhelp
echo Usage: mruby-config [switches]
echo switches:
echo --cflags print flags passed to compiler
echo --ldflags print flags passed to linker
echo --ldflags-before-libs print flags passwd to linker before linked libraries
echo --ldflags-before-libs print flags passed to linker before linked libraries
echo --libs print linked libraries
echo --libmruby-path print libmruby path
5 changes: 4 additions & 1 deletion deps/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,10 @@ main(int argc, char **argv)
mrb_gc_arena_restore(mrb, ai);
mrbc_context_free(mrb, c);
if (mrb->exc) {
if (!mrb_undef_p(v)) {
if (mrb_undef_p(v)) {
mrb_p(mrb, mrb_obj_value(mrb->exc));
}
else {
mrb_print_error(mrb);
}
n = -1;
Expand Down
9 changes: 9 additions & 0 deletions deps/mruby/mrbgems/mruby-compiler/bintest/mrbc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,12 @@
assert_equal "#{cmd('mrbc')}:#{a.path}:Syntax OK", result.chomp
assert_equal 0, $?.exitstatus
end

assert('embedded document with invalid terminator') do
a, out = Tempfile.new('a.rb'), Tempfile.new('out.mrb')
a.write("=begin\n=endx\n")
a.flush
result = `#{cmd('mrbc')} -c -o #{out.path} #{a.path} 2>&1`
assert_equal "#{a.path}:3:0: embedded document meets end of file", result.chomp
assert_equal 1, $?.exitstatus
end
Loading

0 comments on commit 77455f6

Please sign in to comment.