summaryrefslogtreecommitdiffhomepage
path: root/mrblib
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-11-01 16:12:57 +0800
committerDaniel Bovensiepen <[email protected]>2012-11-01 16:12:57 +0800
commitcdb72a05a294eb8521dd40c011160228496312cb (patch)
tree283586ad23f2dc6dfd1fd1aaa354f18c23d8c0d6 /mrblib
parent88dfaf19aa0808f78d13133d61ea433d043923f9 (diff)
parent57910ca5353e1feba1fb069a876b84a52f33d39f (diff)
downloadmruby-cdb72a05a294eb8521dd40c011160228496312cb.tar.gz
mruby-cdb72a05a294eb8521dd40c011160228496312cb.zip
Merge remote-tracking branch 'upstream/master' into mrbgems
Diffstat (limited to 'mrblib')
-rw-r--r--mrblib/enum.rb19
-rw-r--r--mrblib/init_mrblib.c1
-rw-r--r--mrblib/print.rb1
-rw-r--r--mrblib/string.rb2
4 files changed, 17 insertions, 6 deletions
diff --git a/mrblib/enum.rb b/mrblib/enum.rb
index 2699a18af..2774bc856 100644
--- a/mrblib/enum.rb
+++ b/mrblib/enum.rb
@@ -200,19 +200,30 @@ module Enumerable
# ISO 15.3.2.2.11
def inject(*args, &block)
raise ArgumentError, "too many arguments" if args.size > 2
- flag = true # 1st element?
- result = nil
+ if Symbol === args[-1]
+ sym = args[-1]
+ block = ->(x,y){x.send(sym,y)}
+ args.pop
+ end
+ if args.empty?
+ flag = true # no initial argument
+ result = nil
+ else
+ flag = false
+ result = args[0]
+ end
self.each{|val|
if flag
- # 1st element
- result = (args.empty?)? val: block.call(args[0], val)
+ # push first element as initial
flag = false
+ result = val
else
result = block.call(result, val)
end
}
result
end
+ alias reduce inject
##
# Alias for collect
diff --git a/mrblib/init_mrblib.c b/mrblib/init_mrblib.c
index a845489f5..72355e3eb 100644
--- a/mrblib/init_mrblib.c
+++ b/mrblib/init_mrblib.c
@@ -11,7 +11,6 @@ mrb_init_mrblib(mrb_state *mrb)
{
int n = mrb_read_irep(mrb, mrblib_irep);
- extern mrb_value mrb_top_self(mrb_state *mrb);
mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
}
diff --git a/mrblib/print.rb b/mrblib/print.rb
index 9183f6bb2..68c7837f3 100644
--- a/mrblib/print.rb
+++ b/mrblib/print.rb
@@ -74,6 +74,7 @@ module Kernel
def printf(*args)
__printstr__(sprintf(*args))
+ nil
end
end
end
diff --git a/mrblib/string.rb b/mrblib/string.rb
index d09b787da..0b995f9ca 100644
--- a/mrblib/string.rb
+++ b/mrblib/string.rb
@@ -118,7 +118,7 @@ class String
##
# Call the given block for each byte of +self+.
def each_byte(&block)
- bytes = self.unpack("C*")
+ bytes = self.bytes
pos = 0
while(pos < bytes.size)
block.call(bytes[pos])