Skip to content

Commit

Permalink
Move some Opal helpers to cached
Browse files Browse the repository at this point in the history
Should give better performance and smaller code size.
  • Loading branch information
elia committed Jan 27, 2020
1 parent 9fba086 commit 1d6d262
Showing 1 changed file with 33 additions and 33 deletions.
66 changes: 33 additions & 33 deletions opal/corelib/array.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# helpers: truthy, falsy
# helpers: truthy, falsy, hash_ids, yield1, hash_get, hash_put, hash_delete

require 'corelib/enumerable'
require 'corelib/numeric'
Expand Down Expand Up @@ -26,7 +26,7 @@ class Array < `Array`
for (var i = 0, i2 = 0, length = self.length; i < length; i++) {
if (!raised) {
try {
value = Opal.yield1(block, self[i])
value = $yield1(block, self[i])
} catch(error) {
raised = error;
}
Expand Down Expand Up @@ -120,12 +120,12 @@ def &(other)
var result = [], hash = #{{}}, i, length, item;
for (i = 0, length = other.length; i < length; i++) {
Opal.hash_put(hash, other[i], true);
$hash_put(hash, other[i], true);
}
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
if (Opal.hash_delete(hash, item) !== undefined) {
if ($hash_delete(hash, item) !== undefined) {
result.push(item);
}
}
Expand All @@ -145,11 +145,11 @@ def |(other)
var hash = #{{}}, i, length, item;
for (i = 0, length = self.length; i < length; i++) {
Opal.hash_put(hash, self[i], true);
$hash_put(hash, self[i], true);
}
for (i = 0, length = other.length; i < length; i++) {
Opal.hash_put(hash, other[i], true);
$hash_put(hash, other[i], true);
}
return hash.$keys();
Expand Down Expand Up @@ -201,12 +201,12 @@ def -(other)
var result = [], hash = #{{}}, i, length, item;
for (i = 0, length = other.length; i < length; i++) {
Opal.hash_put(hash, other[i], true);
$hash_put(hash, other[i], true);
}
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
if (Opal.hash_get(hash, item) === undefined) {
if ($hash_get(hash, item) === undefined) {
result.push(item);
}
}
Expand Down Expand Up @@ -537,7 +537,7 @@ def bsearch_index(&block)
while (min < max) {
mid = min + Math.floor((max - min) / 2);
val = self[mid];
ret = Opal.yield1(block, val);
ret = $yield1(block, val);
if (ret === true) {
satisfied = mid;
Expand Down Expand Up @@ -595,7 +595,7 @@ def cycle(n = nil, &block)
if (n === nil) {
while (true) {
for (i = 0, length = self.length; i < length; i++) {
value = Opal.yield1(block, self[i]);
value = $yield1(block, self[i]);
}
}
}
Expand All @@ -607,7 +607,7 @@ def cycle(n = nil, &block)
while (n > 0) {
for (i = 0, length = self.length; i < length; i++) {
value = Opal.yield1(block, self[i]);
value = $yield1(block, self[i]);
}
n--;
Expand Down Expand Up @@ -643,7 +643,7 @@ def collect(&block)
var result = [];
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, self[i]);
var value = $yield1(block, self[i]);
result.push(value);
}
Expand All @@ -656,7 +656,7 @@ def collect!(&block)

%x{
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, self[i]);
var value = $yield1(block, self[i]);
self[i] = value;
}
}
Expand Down Expand Up @@ -904,7 +904,7 @@ def each(&block)

%x{
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, self[i]);
var value = $yield1(block, self[i]);
}
}

Expand All @@ -916,7 +916,7 @@ def each_index(&block)

%x{
for (var i = 0, length = self.length; i < length; i++) {
var value = Opal.yield1(block, i);
var value = $yield1(block, i);
}
}

Expand Down Expand Up @@ -1183,29 +1183,29 @@ def flatten!(level = undefined)

def hash
%x{
var top = (Opal.hash_ids === undefined),
var top = ($hash_ids === undefined),
result = ['A'],
hash_id = self.$object_id(),
item, i, key;
try {
if (top) {
Opal.hash_ids = Object.create(null);
$hash_ids = Object.create(null);
}
// return early for recursive structures
if (Opal.hash_ids[hash_id]) {
if ($hash_ids[hash_id]) {
return 'self';
}
for (key in Opal.hash_ids) {
item = Opal.hash_ids[key];
for (key in $hash_ids) {
item = $hash_ids[key];
if (#{eql?(`item`)}) {
return 'self';
}
}
Opal.hash_ids[hash_id] = self;
$hash_ids[hash_id] = self;
for (i = 0; i < self.length; i++) {
item = self[i];
Expand All @@ -1215,7 +1215,7 @@ def hash
return result.join(',');
} finally {
if (top) {
Opal.hash_ids = undefined;
$hash_ids = undefined;
}
}
}
Expand Down Expand Up @@ -1475,7 +1475,7 @@ def permutation(num = undefined, &block)
for (var j = 0; j < perm.length; j++) {
output.push(self[perm[j]]);
}
Opal.yield1(blk, output);
$yield1(blk, output);
}
}
}
Expand Down Expand Up @@ -1881,7 +1881,7 @@ def select(&block)
for (var i = 0, length = self.length, item, value; i < length; i++) {
item = self[i];
value = Opal.yield1(block, item);
value = $yield1(block, item);
if (Opal.truthy(value)) {
result.push(item);
Expand Down Expand Up @@ -2151,7 +2151,7 @@ def to_h
}
key = ary[0];
val = ary[1];
Opal.hash_put(hash, key, val);
$hash_put(hash, key, val);
}
return hash;
Expand Down Expand Up @@ -2195,17 +2195,17 @@ def uniq(&block)
if (block === nil) {
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
if (Opal.hash_get(hash, item) === undefined) {
Opal.hash_put(hash, item, item);
if ($hash_get(hash, item) === undefined) {
$hash_put(hash, item, item);
}
}
}
else {
for (i = 0, length = self.length; i < length; i++) {
item = self[i];
key = Opal.yield1(block, item);
if (Opal.hash_get(hash, key) === undefined) {
Opal.hash_put(hash, key, item);
key = $yield1(block, item);
if ($hash_get(hash, key) === undefined) {
$hash_put(hash, key, item);
}
}
}
Expand All @@ -2220,10 +2220,10 @@ def uniq!(&block)
for (i = 0, length = original_length; i < length; i++) {
item = self[i];
key = (block === nil ? item : Opal.yield1(block, item));
key = (block === nil ? item : $yield1(block, item));
if (Opal.hash_get(hash, key) === undefined) {
Opal.hash_put(hash, key, item);
if ($hash_get(hash, key) === undefined) {
$hash_put(hash, key, item);
continue;
}
Expand Down

0 comments on commit 1d6d262

Please sign in to comment.