Skip to content

Commit 9b3f6ae

Browse files
committed
[js] Make multi caches work properly with containers.
1 parent af35e06 commit 9b3f6ae

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

src/vm/js/Operations.nqp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,8 +1537,8 @@ class QAST::OperationsJS {
15371537
}, :side_effects);
15381538

15391539

1540-
add_simple_op('multicachefind', $T_OBJ, [$T_OBJ, $T_OBJ]);
1541-
add_simple_op('multicacheadd', $T_OBJ, [$T_OBJ, $T_OBJ, $T_OBJ]);
1540+
add_simple_op('multicachefind', $T_OBJ, [$T_OBJ, $T_OBJ], :ctx);
1541+
add_simple_op('multicacheadd', $T_OBJ, [$T_OBJ, $T_OBJ, $T_OBJ], :ctx);
15421542

15431543
add_simple_op('settypecache', $T_OBJ, [$T_OBJ, $T_OBJ], :side_effects);
15441544
add_simple_op('setmethcache', $T_OBJ, [$T_OBJ, $T_OBJ], :side_effects, :decont(0));

src/vm/js/nqp-runtime/multicache.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ function MultiCache() {
1212
}
1313
}
1414

15-
function posTypes(capture) {
15+
function posTypes(ctx, capture) {
1616
var arity = capture.pos.length;
1717
var types = new Array(arity);
1818
for (var i = 0; i < arity; i++) {
1919
var obj = capture.pos[i];
2020
if (obj._STable) {
21-
types[i] = obj._STable;
21+
types[i] = obj.$$decont(ctx)._STable;
2222
} else if (obj instanceof NQPInt) {
2323
types[i] = 1;
2424
} else if (typeof obj == 'number') {
@@ -32,7 +32,7 @@ function posTypes(capture) {
3232

3333
var op = {};
3434

35-
op.multicachefind = function(cache, capture) {
35+
op.multicachefind = function(ctx, cache, capture) {
3636
if (cache === Null) return Null;
3737
var arity = capture.pos.length;
3838
var hasNamed = capture.named ? true : false;
@@ -47,7 +47,7 @@ op.multicachefind = function(cache, capture) {
4747

4848
if (arity > MAX_ARITY) return Null;
4949

50-
var types = posTypes(capture);
50+
var types = posTypes(ctx, capture);
5151

5252
var arityCache = cache.cache[arity - 1];
5353

@@ -62,7 +62,7 @@ op.multicachefind = function(cache, capture) {
6262
return Null;
6363
};
6464

65-
op.multicacheadd = function(cache, capture, result) {
65+
op.multicacheadd = function(ctx, cache, capture, result) {
6666
var c = cache === Null ? new MultiCache() : cache;
6767
var arity = capture.pos.length;
6868
var hasNamed = capture.named ? true : false;
@@ -78,7 +78,7 @@ op.multicacheadd = function(cache, capture, result) {
7878
return c;
7979
}
8080

81-
c.cache[arity - 1].push({types: posTypes(capture), hasNamed: hasNamed, result: result});
81+
c.cache[arity - 1].push({types: posTypes(ctx, capture), hasNamed: hasNamed, result: result});
8282
return c;
8383
};
8484

0 commit comments

Comments
 (0)