Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: opal/opal
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 1bd3d5a17a87
Choose a base ref
...
head repository: opal/opal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: c46e937609f6
Choose a head ref
  • 3 commits
  • 4 files changed
  • 1 contributor

Commits on Oct 27, 2013

  1. Copy the full SHA
    3dab7ec View commit details
  2. Copy the full SHA
    0f6de45 View commit details
  3. Copy the full SHA
    c46e937 View commit details
Showing with 71 additions and 82 deletions.
  1. +56 −82 corelib/enumerable.rb
  2. +5 −0 spec/opal/enumerable/grep_break_spec.rb
  3. +5 −0 spec/opal/enumerable/max_break_spec.rb
  4. +5 −0 spec/opal/enumerable/min_break_spec.rb
138 changes: 56 additions & 82 deletions corelib/enumerable.rb
Original file line number Diff line number Diff line change
@@ -426,40 +426,37 @@ def first(number = undefined)

def grep(pattern, &block)
%x{
var result = [],
proc;
var result = [];
if (block !== nil) {
proc = function() {
var param = arguments.length == 1 ?
arguments[0] : $slice.call(arguments);
self.$each._p = function() {
var param = #{Opal.destructure(`arguments`)},
value = #{pattern === `param`};
var value = #{pattern === `param`};
if (#{Opal.truthy?(`value`)}) {
value = $opal.$yield1(block, param);
if (value !== false && value !== nil) {
if ((value = block(param)) === $breaker) {
return $breaker.$v;
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
result.push(value);
}
};
}
else {
proc = function() {
var param = arguments.length == 1 ?
arguments[0] : $slice.call(arguments);
var value = #{pattern === `param`};
self.$each._p = function() {
var param = #{Opal.destructure(`arguments`)},
value = #{pattern === `param`};
if (value !== false && value !== nil) {
if (#{Opal.truthy?(`value`)}) {
result.push(param);
}
};
}
#{self}.$each._p = proc;
#{self}.$each();
self.$each();
return result;
}
@@ -531,116 +528,93 @@ def inject(object = undefined, &block)

def max(&block)
%x{
var proc, result;
var arg_error = false;
var result;
if (block !== nil) {
proc = function() {
var param = arguments.length == 1 ?
arguments[0] : $slice.call(arguments);
self.$each._p = function() {
var param = #{Opal.destructure(`arguments`)};
if (result == undefined) {
if (result === undefined) {
result = param;
return;
}
else if ((value = block(param, result)) === $breaker) {
result = $breaker.$v;
var value = block(param, result);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
else {
if (value > 0) {
result = param;
}
$breaker.$v = nil;
if (value > 0) {
result = param;
}
}
};
}
else {
proc = function() {
var param = arguments.length == 1 ?
arguments[0] : $slice.call(arguments);
var modules = param.$class().__inc__;
if (modules == undefined || modules.length == 0 || modules.indexOf(Opal.Comparable) == -1) {
arg_error = true;
self.$each._p = function() {
var param = #{Opal.destructure(`arguments`)};
return $breaker;
if (result === undefined) {
result = param;
return;
}
if (result == undefined || #{`param` > `result`}) {
if (#{`param` <=> `result`} > 0) {
result = param;
}
}
};
}
#{self}.$each._p = proc;
#{self}.$each();
if (arg_error) {
#{raise ArgumentError, "Array#max"};
}
self.$each();
return (result == undefined ? nil : result);
return result === undefined ? nil : result;
}
end

def min(&block)
%x{
var proc,
result,
arg_error = false;
var result;
if (block !== nil) {
proc = function() {
var param = arguments.length == 1 ?
arguments[0] : $slice.call(arguments);
self.$each._p = function() {
var param = #{Opal.destructure(`arguments`)};
if (result == undefined) {
if (result === undefined) {
result = param;
return;
}
else if ((value = block(param, result)) === $breaker) {
result = $breaker.$v;
var value = block(param, result);
if (value === $breaker) {
result = $breaker.$v;
return $breaker;
}
else {
if (value < 0) {
result = param;
}
$breaker.$v = nil;
if (value < 0) {
result = param;
}
}
};
}
else {
proc = function(obj) {
var param = arguments.length == 1 ?
arguments[0] : $slice.call(arguments);
var modules = param.$class().__inc__;
if (modules == undefined || modules.length == 0 || modules.indexOf(Opal.Comparable) == -1) {
arg_error = true;
self.$each._p = function() {
var param = #{Opal.destructure(`arguments`)};
return $breaker;
if (result === undefined) {
result = param;
return;
}
if (result == undefined || #{`param` < `result`}) {
if (#{`param` <=> `result`} < 0) {
result = param;
}
}
};
}
#{self}.$each._p = proc;
#{self}.$each();
if (arg_error) {
#{raise ArgumentError, "Array#min"};
}
self.$each();
return result == undefined ? nil : result;
return result === undefined ? nil : result;
}
end

5 changes: 5 additions & 0 deletions spec/opal/enumerable/grep_break_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe "Enumerable#grep" do
it "breaks out with the proper value" do
[1, 2, 3].grep(1) { break 42 }.should == 42
end
end
5 changes: 5 additions & 0 deletions spec/opal/enumerable/max_break_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe "Enumerable#max" do
it "breaks out with the proper value" do
[1, 2, 3].max { break 42 }.should == 42
end
end
5 changes: 5 additions & 0 deletions spec/opal/enumerable/min_break_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
describe "Enumerable#min" do
it "breaks out with the proper value" do
[1, 2, 3].min { break 42 }.should == 42
end
end