opal/corelib/runtime.js in opal-0.6.0 vs opal/corelib/runtime.js in opal-0.6.1
- old
+ new
@@ -600,10 +600,28 @@
}
return block.apply(null, args);
};
+ // Finds the corresponding exception match in candidates. Each candidate can
+ // be a value, or an array of values. Returns null if not found.
+ Opal.$rescue = function(exception, candidates) {
+ for (var i = 0; i != candidates.length; i++) {
+ var candidate = candidates[i];
+ if (candidate._isArray) {
+ var subresult;
+ if (subresult = Opal.$rescue(exception, candidate)) {
+ return subresult;
+ }
+ }
+ else if (candidate['$==='](exception)) {
+ return candidate;
+ }
+ }
+ return null;
+ };
+
Opal.is_a = function(object, klass) {
if (object.__meta__ === klass) {
return true;
}
@@ -760,12 +778,19 @@
if (arguments.length == 1) {
if (arguments[0]._isArray) {
var args = arguments[0];
for (var i = 0, length = args.length; i < length; i++) {
- var key = args[i][0], obj = args[i][1];
+ var pair = args[i];
+ if (pair.length !== 2) {
+ throw Opal.ArgumentError.$new("value not of length 2: " + pair.$inspect());
+ }
+
+ var key = pair[0],
+ obj = pair[1];
+
if (assocs[key] == null) {
keys.push(key);
}
assocs[key] = obj;
@@ -778,10 +803,15 @@
keys.push(key);
}
}
}
else {
- for (var i = 0, length = arguments.length; i < length; i++) {
+ var length = arguments.length;
+ if (length % 2 !== 0) {
+ throw Opal.ArgumentError.$new("odd number of arguments for Hash");
+ }
+
+ for (var i = 0; i < length; i++) {
var key = arguments[i],
obj = arguments[++i];
if (assocs[key] == null) {
keys.push(key);