summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Rakefile1
-rw-r--r--include/mrbconf.h2
-rw-r--r--include/mruby.h3
-rw-r--r--mrbgems/mruby-math/src/math.c40
-rw-r--r--mrbgems/mruby-struct/src/struct.c7
-rw-r--r--mrblib/array.rb2
-rw-r--r--mrblib/compar.rb4
-rw-r--r--mrblib/enum.rb12
-rw-r--r--mrblib/hash.rb2
-rw-r--r--src/array.c4
-rw-r--r--src/class.c6
-rw-r--r--src/codegen.c70
-rw-r--r--src/error.c26
-rw-r--r--src/gc.c4
-rw-r--r--src/hash.c8
-rw-r--r--src/kernel.c8
-rw-r--r--src/load.c2
-rw-r--r--src/numeric.c8
-rw-r--r--src/parse.y29
-rw-r--r--src/sprintf.c4
-rw-r--r--src/variable.c2
-rw-r--r--test/assert.rb6
22 files changed, 160 insertions, 90 deletions
diff --git a/Rakefile b/Rakefile
index 33967b07b..633c50385 100644
--- a/Rakefile
+++ b/Rakefile
@@ -41,6 +41,7 @@ depfiles = MRuby.targets['host'].bins.map do |bin|
source_path = MRuby.targets['host'].exefile("#{MRuby.targets['host'].build_dir}/bin/#{bin}")
file install_path => source_path do |t|
+ FileUtils.rm_f t.name, { :verbose => $verbose }
FileUtils.cp t.prerequisites.first, t.name, { :verbose => $verbose }
end
diff --git a/include/mrbconf.h b/include/mrbconf.h
index c84480af7..b20db5d01 100644
--- a/include/mrbconf.h
+++ b/include/mrbconf.h
@@ -23,7 +23,7 @@
//#define MRB_ENDIAN_BIG
/* argv max size in mrb_funcall */
-//#define MRB_FUNCALL_ARGC_MAX 16
+//#define MRB_FUNCALL_ARGC_MAX 16
/* number of object per heap page */
//#define MRB_HEAP_PAGE_SIZE 1024
diff --git a/include/mruby.h b/include/mruby.h
index 61df6e9ed..fe97dd055 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -129,9 +129,6 @@ typedef struct mrb_state {
mrb_sym symidx;
struct kh_n2s *name2sym; /* symbol table */
-#ifdef INCLUDE_REGEXP
- struct RNode *local_svar;/* regexp */
-#endif
#ifdef ENABLE_DEBUG
void (*code_fetch_hook)(struct mrb_state* mrb, struct mrb_irep *irep, mrb_code *pc, mrb_value *regs);
diff --git a/mrbgems/mruby-math/src/math.c b/mrbgems/mruby-math/src/math.c
index 9955d9862..76058250f 100644
--- a/mrbgems/mruby-math/src/math.c
+++ b/mrbgems/mruby-math/src/math.c
@@ -26,13 +26,13 @@
double
erfc(double x);
-/*
+/*
** Implementations of error functions
** credits to http://www.digitalmars.com/archives/cplusplus/3634.html
*/
/* Implementation of Error function */
-double
+double
erf(double x)
{
static const double two_sqrtpi = 1.128379167095512574;
@@ -55,24 +55,24 @@ erf(double x)
}
/* Implementation of complementary Error function */
-double
+double
erfc(double x)
{
- static const double one_sqrtpi= 0.564189583547756287;
- double a = 1;
- double b = x;
- double c = x;
- double d = x*x+0.5;
+ static const double one_sqrtpi= 0.564189583547756287;
+ double a = 1;
+ double b = x;
+ double c = x;
+ double d = x*x+0.5;
double q1;
double q2 = b/d;
double n = 1.0;
double t;
if (fabs(x) < 2.2) {
- return 1.0 - erf(x);
- }
- if (x < 0.0) { /*signbit(x)*/
- return 2.0 - erfc(-x);
- }
+ return 1.0 - erf(x);
+ }
+ if (x < 0.0) { /*signbit(x)*/
+ return 2.0 - erfc(-x);
+ }
do {
t = a*n+b*x;
a = b;
@@ -306,7 +306,7 @@ math_asinh(mrb_state *mrb, mrb_value obj)
mrb_float x;
mrb_get_args(mrb, "f", &x);
-
+
x = asinh(x);
return mrb_float_value(x);
@@ -477,10 +477,10 @@ static mrb_value
math_sqrt(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
-
+
mrb_get_args(mrb, "f", &x);
x = sqrt(x);
-
+
return mrb_float_value(x);
}
@@ -544,7 +544,7 @@ math_frexp(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
int exp;
-
+
mrb_get_args(mrb, "f", &x);
x = frexp(x, &exp);
@@ -633,13 +633,13 @@ mrb_mruby_math_gem_init(mrb_state* mrb)
{
struct RClass *mrb_math;
mrb_math = mrb_define_module(mrb, "Math");
-
+
#ifdef M_PI
mrb_define_const(mrb, mrb_math, "PI", mrb_float_value(M_PI));
#else
mrb_define_const(mrb, mrb_math, "PI", mrb_float_value(atan(1.0)*4.0));
#endif
-
+
#ifdef M_E
mrb_define_const(mrb, mrb_math, "E", mrb_float_value(M_E));
#else
@@ -660,7 +660,7 @@ mrb_mruby_math_gem_init(mrb_state* mrb)
mrb_define_module_function(mrb, mrb_math, "acos", math_acos, ARGS_REQ(1));
mrb_define_module_function(mrb, mrb_math, "atan", math_atan, ARGS_REQ(1));
mrb_define_module_function(mrb, mrb_math, "atan2", math_atan2, ARGS_REQ(2));
-
+
mrb_define_module_function(mrb, mrb_math, "sinh", math_sinh, ARGS_REQ(1));
mrb_define_module_function(mrb, mrb_math, "cosh", math_cosh, ARGS_REQ(1));
mrb_define_module_function(mrb, mrb_math, "tanh", math_tanh, ARGS_REQ(1));
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index 96b757769..33997b294 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -352,8 +352,8 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
mrb_get_args(mrb, "*&", &argv, &argc, &b);
if (argc == 0) { /* special case to avoid crash */
rest = mrb_ary_new(mrb);
- }
- else {
+ }
+ else {
if (argc > 0) name = argv[0];
if (argc > 1) rest = argv[1];
if (mrb_array_p(rest)) {
@@ -378,7 +378,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
id = mrb_to_id(mrb, RARRAY_PTR(rest)[i]);
RARRAY_PTR(rest)[i] = mrb_symbol_value(id);
}
- }
+ }
st = make_struct(mrb, name, rest, struct_class(mrb));
if (!mrb_nil_p(b)) {
mrb_funcall(mrb, b, "call", 1, &st);
@@ -506,7 +506,6 @@ mrb_value
mrb_struct_init_copy(mrb_state *mrb, mrb_value copy)
{
mrb_value s;
- struct RArray *sv;
int i, len;
mrb_get_args(mrb, "o", &s);
diff --git a/mrblib/array.rb b/mrblib/array.rb
index abbb38cb6..82df90950 100644
--- a/mrblib/array.rb
+++ b/mrblib/array.rb
@@ -52,7 +52,7 @@ class Array
##
# Alias for collect!
- #
+ #
# ISO 15.2.12.5.20
alias map! collect!
diff --git a/mrblib/compar.rb b/mrblib/compar.rb
index 9f2ab887d..40fb2e7f0 100644
--- a/mrblib/compar.rb
+++ b/mrblib/compar.rb
@@ -25,7 +25,7 @@ module Comparable
# Return true if +self+ is less
# than or equal to +other+.
# Otherwise return false.
- #
+ #
# ISO 15.3.3.2.2
def <= other
cmp = self <=> other
@@ -88,7 +88,7 @@ module Comparable
end
##
- # Return true if +self+ is greater
+ # Return true if +self+ is greater
# than or equal to +min+ and
# less than or equal to +max+.
# Otherwise return false.
diff --git a/mrblib/enum.rb b/mrblib/enum.rb
index 2774bc856..0593e1f04 100644
--- a/mrblib/enum.rb
+++ b/mrblib/enum.rb
@@ -73,7 +73,7 @@ module Enumerable
##
# Call the given block for each element
# which is yield by +each+. Append all
- # values of each block together and
+ # values of each block together and
# return this value.
#
# ISO 15.3.2.2.3
@@ -89,7 +89,7 @@ module Enumerable
# Call the given block for each element
# which is yield by +each+. Return
# +ifnone+ if no block value was true.
- # Otherwise return the first block value
+ # Otherwise return the first block value
# which had was true.
#
# ISO 15.3.2.2.4
@@ -158,8 +158,8 @@ module Enumerable
# Call the given block for each element
# which is yield by +each+ and which return
# value was true when invoking === with
- # +pattern+. Return an array with all
- # elements or the respective block values.
+ # +pattern+. Return an array with all
+ # elements or the respective block values.
#
# ISO 15.3.2.2.9
def grep(pattern, &block)
@@ -291,9 +291,9 @@ module Enumerable
##
# Call the given block for each element
- # which is yield by +each+. Return an
+ # which is yield by +each+. Return an
# array which contains two arrays. The
- # first array contains all elements
+ # first array contains all elements
# whose block value was true. The second
# array contains all elements whose
# block value was false.
diff --git a/mrblib/hash.rb b/mrblib/hash.rb
index 7b7b3f8ac..c304d4845 100644
--- a/mrblib/hash.rb
+++ b/mrblib/hash.rb
@@ -64,7 +64,7 @@ class Hash
# it will be called for each element with
# a duplicate key. The value of the block
# will be the final value of this element.
- #
+ #
# ISO 15.2.13.4.22
def merge(other, &block)
h = {}
diff --git a/src/array.c b/src/array.c
index c767283aa..5a73ef54a 100644
--- a/src/array.c
+++ b/src/array.c
@@ -140,7 +140,7 @@ ary_modify(mrb_state *mrb, struct RArray *a)
len = a->len * sizeof(mrb_value);
ptr = (mrb_value *)mrb_malloc(mrb, len);
if (p) {
- array_copy(ptr, p, a->len);
+ array_copy(ptr, p, a->len);
}
a->ptr = ptr;
a->aux.capa = a->len;
@@ -1125,7 +1125,7 @@ mrb_ary_eql(mrb_state *mrb, mrb_value ary1)
for (i=0; i<RARRAY_LEN(ary1); i++) {
if (!mrb_eql(mrb, ary_elt(ary1, i), ary_elt(ary2, i)))
- return mrb_false_value();
+ return mrb_false_value();
}
return mrb_true_value();
}
diff --git a/src/class.c b/src/class.c
index c0e71dad7..a7fae4f63 100644
--- a/src/class.c
+++ b/src/class.c
@@ -29,7 +29,7 @@ mrb_gc_mark_mt(mrb_state *mrb, struct RClass *c)
if (kh_exist(h, k)){
struct RProc *m = kh_value(h, k);
if (m) {
- mrb_gc_mark(mrb, (struct RBasic*)m);
+ mrb_gc_mark(mrb, (struct RBasic*)m);
}
}
}
@@ -356,7 +356,7 @@ to_hash(mrb_state *mrb, mrb_value val)
retrieve arguments from mrb_state.
mrb_get_args(mrb, format, ...)
-
+
returns number of arguments parsed.
fortmat specifiers:
@@ -774,7 +774,7 @@ mrb_mod_include_p(mrb_state *mrb, mrb_value mod)
}
return mrb_false_value();
}
-
+
static mrb_value
mrb_mod_ancestors(mrb_state *mrb, mrb_value self)
{
diff --git a/src/codegen.c b/src/codegen.c
index 88bce7dac..29fce8fc4 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -330,7 +330,7 @@ genop_peep(codegen_scope *s, mrb_code i, int val)
if (c1 == OP_SUB) c = -c;
if (c > 127 || c < -127) break;
- if (0 <= c)
+ if (0 <= c)
s->iseq[s->pc-1] = MKOP_ABC(OP_ADDI, GETARG_A(i), GETARG_B(i), c);
else
s->iseq[s->pc-1] = MKOP_ABC(OP_SUBI, GETARG_A(i), GETARG_B(i), -c);
@@ -1161,7 +1161,7 @@ codegen(codegen_scope *s, node *tree, int val)
if (e) {
if (val) pop();
pos2 = new_label(s);
- genop(s, MKOP_sBx(OP_JMP, 0));
+ genop(s, MKOP_sBx(OP_JMP, 0));
dispatch(s, pos1);
codegen(s, e, val);
dispatch(s, pos2);
@@ -1935,7 +1935,7 @@ codegen(codegen_scope *s, node *tree, int val)
int ai = mrb_gc_arena_save(s->mrb);
int sym = new_sym(s, mrb_intern(s->mrb, REGEXP_CLASS));
int off = new_lit(s, mrb_str_new(s->mrb, p1, strlen(p1)));
- int n = 1;
+ int argc = 1;
genop(s, MKOP_A(OP_OCLASS, cursp()));
genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym));
@@ -1945,14 +1945,72 @@ codegen(codegen_scope *s, node *tree, int val)
push();
off = new_lit(s, mrb_str_new(s->mrb, p2, strlen(p2)));
genop(s, MKOP_ABx(OP_STRING, cursp(), off));
- n++;
+ argc++;
pop();
}
pop();
sym = new_sym(s, mrb_intern(s->mrb, "compile"));
- genop(s, MKOP_ABC(OP_SEND, cursp(), sym, n));
- mrb_gc_arena_restore(s->mrb, ai);
+ genop(s, MKOP_ABC(OP_SEND, cursp(), sym, argc));
+ mrb_gc_arena_restore(s->mrb, ai);
+ push();
+ }
+ break;
+
+ case NODE_DREGX:
+ if (val) {
+ node *n = tree->car;
+ int ai = mrb_gc_arena_save(s->mrb);
+ int sym = new_sym(s, mrb_intern(s->mrb, REGEXP_CLASS));
+ int argc = 1;
+ int off;
+ char *p;
+
+ genop(s, MKOP_A(OP_OCLASS, cursp()));
+ genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym));
push();
+ codegen(s, n->car, VAL);
+ n = n->cdr;
+ while (n) {
+ codegen(s, n->car, VAL);
+ pop(); pop();
+ genop(s, MKOP_AB(OP_STRCAT, cursp(), cursp()+1));
+ push();
+ n = n->cdr;
+ }
+ n = tree->cdr->cdr;
+ if (n->car) {
+ p = (char*)n->car;
+ off = new_lit(s, mrb_str_new(s->mrb, p, strlen(p)));
+ codegen(s, tree->car, VAL);
+ genop(s, MKOP_ABx(OP_STRING, cursp(), off));
+ pop();
+ genop(s, MKOP_AB(OP_STRCAT, cursp(), cursp()+1));
+ }
+ if (n->cdr) {
+ char *p2 = (char*)n->cdr;
+ int off;
+
+ push();
+ off = new_lit(s, mrb_str_new(s->mrb, p2, strlen(p2)));
+ genop(s, MKOP_ABx(OP_STRING, cursp(), off));
+ argc++;
+ pop();
+ }
+ pop();
+ sym = new_sym(s, mrb_intern(s->mrb, "compile"));
+ genop(s, MKOP_ABC(OP_SEND, cursp(), sym, argc));
+ mrb_gc_arena_restore(s->mrb, ai);
+ push();
+ }
+ else {
+ node *n = tree->car;
+
+ while (n) {
+ if ((intptr_t)n->car->car != NODE_STR) {
+ codegen(s, n->car, NOVAL);
+ }
+ n = n->cdr;
+ }
}
break;
diff --git a/src/error.c b/src/error.c
index 70a84455f..7599bd0a9 100644
--- a/src/error.c
+++ b/src/error.c
@@ -125,7 +125,7 @@ exc_inspect(mrb_state *mrb, mrb_value exc)
mesg = mrb_attr_get(mrb, exc, mrb_intern(mrb, "mesg"));
file = mrb_attr_get(mrb, exc, mrb_intern(mrb, "file"));
line = mrb_attr_get(mrb, exc, mrb_intern(mrb, "line"));
-
+
if (!mrb_nil_p(file) && !mrb_nil_p(line)) {
str = file;
mrb_str_cat2(mrb, str, ":");
@@ -190,12 +190,12 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
ci--;
while (ci >= mrb->cibase) {
if (ci->proc && !MRB_PROC_CFUNC_P(ci->proc)) {
- mrb_irep *irep = ci->proc->body.irep;
+ mrb_irep *irep = ci->proc->body.irep;
if (irep->filename && irep->lines && irep->iseq <= pc && pc < irep->iseq + irep->ilen) {
- mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "file"), mrb_str_new_cstr(mrb, irep->filename));
- mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "line"), mrb_fixnum_value(irep->lines[pc - irep->iseq - 1]));
- return;
+ mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "file"), mrb_str_new_cstr(mrb, irep->filename));
+ mrb_obj_iv_set(mrb, exc, mrb_intern(mrb, "line"), mrb_fixnum_value(irep->lines[pc - irep->iseq - 1]));
+ return;
}
}
pc = ci->pc;
@@ -366,14 +366,14 @@ make_exception(mrb_state *mrb, int argc, mrb_value *argv, int isstr)
n = 1;
exception_call:
{
- mrb_sym exc = mrb_intern(mrb, "exception");
- if (mrb_respond_to(mrb, argv[0], exc)) {
- mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
- }
- else {
- /* undef */
- mrb_raise(mrb, E_TYPE_ERROR, "exception class/object expected");
- }
+ mrb_sym exc = mrb_intern(mrb, "exception");
+ if (mrb_respond_to(mrb, argv[0], exc)) {
+ mesg = mrb_funcall_argv(mrb, argv[0], exc, n, argv+1);
+ }
+ else {
+ /* undef */
+ mrb_raise(mrb, E_TYPE_ERROR, "exception class/object expected");
+ }
}
break;
diff --git a/src/gc.c b/src/gc.c
index ae47de025..da6844fa5 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -301,7 +301,7 @@ mrb_free_heap(mrb_state *mrb)
page = page->next;
for (p = tmp->objects, e=p+MRB_HEAP_PAGE_SIZE; p<e; p++) {
if (p->as.free.tt != MRB_TT_FREE)
- obj_free(mrb, &p->as.basic);
+ obj_free(mrb, &p->as.basic);
}
mrb_free(mrb, tmp);
}
@@ -586,7 +586,7 @@ root_scan_phase(mrb_state *mrb)
mrb_irep *irep = mrb->irep[i];
if (!irep) continue;
for (j=0; j<irep->plen; j++) {
- mrb_gc_mark_value(mrb, irep->pool[j]);
+ mrb_gc_mark_value(mrb, irep->pool[j]);
}
}
}
diff --git a/src/hash.c b/src/hash.c
index 2439a235d..728fc0f2f 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -559,7 +559,7 @@ mrb_hash_shift(mrb_state *mrb, mrb_value hash)
delVal = mrb_hash_delete_key(mrb, hash, delKey);
mrb_gc_protect(mrb, delVal);
- return mrb_assoc_new(mrb, delKey, delVal);
+ return mrb_assoc_new(mrb, delKey, delVal);
}
}
}
@@ -1119,9 +1119,9 @@ hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, int eql)
key = kh_key(h1,k1);
k2 = kh_get(ht, h2, key);
if (k2 != kh_end(h2)) {
- if (mrb_equal(mrb, kh_value(h1,k1), kh_value(h2,k2))) {
- continue; /* next key */
- }
+ if (mrb_equal(mrb, kh_value(h1,k1), kh_value(h2,k2))) {
+ continue; /* next key */
+ }
}
return mrb_false_value();
}
diff --git a/src/kernel.c b/src/kernel.c
index e45953fd3..c37b627a1 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -191,7 +191,7 @@ mrb_f_send(mrb_state *mrb, mrb_value self)
mrb_sym name;
mrb_value block, *argv;
int argc;
-
+
mrb_get_args(mrb, "n*&", &name, &argv, &argc, &block);
return mrb_funcall_with_block(mrb,self, name, argc, argv, block);
}
@@ -305,7 +305,7 @@ init_copy(mrb_state *mrb, mrb_value dest, mrb_value obj)
case MRB_TT_SCLASS:
case MRB_TT_HASH:
case MRB_TT_DATA:
- mrb_iv_copy(mrb, dest, obj);
+ mrb_iv_copy(mrb, dest, obj);
break;
default:
@@ -483,7 +483,7 @@ mrb_value mrb_yield_internal(mrb_state *mrb, mrb_value b, int argc, mrb_value *a
* call-seq:
* obj.instance_eval {| | block } -> obj
*
- * Evaluates the given block,within the context of the receiver (_obj_).
+ * Evaluates the given block,within the context of the receiver (_obj_).
* In order to set the context, the variable +self+ is set to _obj_ while
* the code is executing, giving the code access to _obj_'s
* instance variables. In the version of <code>instance_eval</code>
@@ -913,7 +913,7 @@ mrb_f_raise(mrb_state *mrb, mrb_value self)
{
mrb_value a[2], exc;
int argc;
-
+
argc = mrb_get_args(mrb, "|oo", &a[0], &a[1]);
switch (argc) {
diff --git a/src/load.c b/src/load.c
index 850fa6e8d..84c21c186 100644
--- a/src/load.c
+++ b/src/load.c
@@ -536,7 +536,7 @@ mrb_read_irep(mrb_state *mrb, const char *bin)
nirep = read_rite_header(mrb, src, &bin_header);
if (nirep < 0)
return nirep;
-
+
src += sizeof(bin_header) + MRB_DUMP_SIZE_OF_SHORT; //header + crc
//Read Binary Data Section
diff --git a/src/numeric.c b/src/numeric.c
index b5bff652d..5aa577828 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -306,7 +306,7 @@ static mrb_value
num_eql(mrb_state *mrb, mrb_value x)
{
mrb_value y;
-
+
mrb_get_args(mrb, "o", &y);
if (mrb_type(x) != mrb_type(y)) return mrb_false_value();
if (mrb_equal(mrb, x, y)) {
@@ -699,7 +699,7 @@ mrb_value
mrb_fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y)
{
mrb_int a;
-
+
a = mrb_fixnum(x);
if (a == 0) return x;
if (mrb_fixnum_p(y)) {
@@ -1126,7 +1126,7 @@ mrb_value
mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y)
{
mrb_int a;
-
+
a = mrb_fixnum(x);
if (a == 0) return y;
if (mrb_fixnum_p(y)) {
@@ -1165,7 +1165,7 @@ mrb_value
mrb_fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y)
{
mrb_int a;
-
+
a = mrb_fixnum(x);
if (mrb_fixnum_p(y)) {
mrb_int b, c;
diff --git a/src/parse.y b/src/parse.y
index 2c5690ea3..db3445d84 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -715,6 +715,13 @@ new_regx(parser_state *p, const char *p1, const char* p2)
return cons((node*)NODE_REGX, cons((node*)p1, (node*)p2));
}
+// (:dregx . a)
+static node*
+new_dregx(parser_state *p, node *a, node *b)
+{
+ return cons((node*)NODE_DREGX, cons(a, b));
+}
+
// (:backref . n)
static node*
new_back_ref(parser_state *p, int n)
@@ -750,15 +757,6 @@ call_bin_op(parser_state *p, node *recv, char *m, node *arg1)
return new_call(p, recv, intern(m), list1(list1(arg1)));
}
-/*
-// (:match (a . b))
-static node*
-match_op(parser_state *p, node *a, node *b)
-{
- return cons((node*)NODE_MATCH, cons((node*)a, (node*)b));
-}
-*/
-
static void
args_with_block(parser_state *p, node *a, node *b)
{
@@ -2510,6 +2508,10 @@ regexp : tREGEXP_BEG tREGEXP
{
$$ = $2;
}
+ | tREGEXP_BEG string_interp tREGEXP
+ {
+ $$ = new_dregx(p, $2, $3);
+ }
;
symbol : basic_symbol
@@ -5502,6 +5504,15 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
printf("NODE_REGX /%s/%s\n", (char*)tree->car, (char*)tree->cdr);
break;
+ case NODE_DREGX:
+ printf("NODE_DREGX\n");
+ dump_recur(mrb, tree->car, offset+1);
+ dump_prefix(offset);
+ printf("tail: %s\n", (char*)tree->cdr->cdr->car);
+ dump_prefix(offset);
+ printf("opt: %s\n", (char*)tree->cdr->cdr->cdr);
+ break;
+
case NODE_SYM:
printf("NODE_SYM :%s\n", mrb_sym2name(mrb, sym(tree)));
break;
diff --git a/src/sprintf.c b/src/sprintf.c
index 905182147..192d44735 100644
--- a/src/sprintf.c
+++ b/src/sprintf.c
@@ -623,7 +623,7 @@ retry:
p++;
goto retry;
}
-
+
case '*':
CHECK_FOR_WIDTH(flags);
flags |= FWIDTH;
@@ -658,7 +658,7 @@ retry:
case '\n':
case '\0':
p--;
-
+
case '%':
if (flags != FNONE) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "invalid format character - %");
diff --git a/src/variable.c b/src/variable.c
index 5f657e3d7..d5331f844 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -753,7 +753,7 @@ mrb_vm_cv_get(mrb_state *mrb, mrb_sym sym)
struct RClass *c = mrb->ci->proc->target_class;
if (!c) c = mrb->ci->target_class;
-
+
return mrb_mod_cv_get(mrb, c, sym);
}
diff --git a/test/assert.rb b/test/assert.rb
index 86e99db5c..ff60ec59a 100644
--- a/test/assert.rb
+++ b/test/assert.rb
@@ -92,6 +92,7 @@ def assert_include(collection, obj, msg = nil)
end
def assert_raise(*exp)
+ ret = true
if $mrbtest_assert
$mrbtest_assert_idx += 1
msg = exp.last.class == String ? exp.pop : nil
@@ -104,8 +105,9 @@ def assert_raise(*exp)
msg = "#{msg}#{exp.inspect} exception expected, not"
diff = " Class: <#{e.class}>\n" +
" Message: #{e.message}"
- if exp.any?{|ex| ex.instance_of?(Module) ? e.kind_of?(ex) : ex == e.class }
+ if not exp.any?{|ex| ex.instance_of?(Module) ? e.kind_of?(ex) : ex == e.class }
$mrbtest_assert.push([$mrbtest_assert_idx, msg, diff])
+ ret = false
end
end
@@ -113,8 +115,10 @@ def assert_raise(*exp)
if should_raise
msg = "#{msg}#{exp.inspect} expected but nothing was raised."
$mrbtest_assert.push([$mrbtest_assert_idx, msg, nil])
+ ret = false
end
end
+ ret
end
##