Skip to content

Commit 7729dad

Browse files
committed
[js] Pass the HLL object around instead of just the name
1 parent e1d0c92 commit 7729dad

File tree

8 files changed

+69
-77
lines changed

8 files changed

+69
-77
lines changed

src/vm/js/Compiler.nqp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
412412
}
413413
else {
414414
$pos_slurpy := 1;
415-
set_variable($param, "nqp.slurpyArray({quote_string($*HLL)}, Array.prototype.slice.call(arguments,{+@sig}))");
415+
set_variable($param, "nqp.slurpyArray(HLL, Array.prototype.slice.call(arguments,{+@sig}))");
416416
}
417417
} else {
418418
my int $type := self.type_from_typeobj($param.returns);
@@ -575,7 +575,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
575575
%convert{$T_INT} := 'intToObj';
576576
%convert{$T_NUM} := 'numToObj';
577577
%convert{$T_STR} := 'strToObj';
578-
return Chunk.new($T_OBJ, "nqp.{%convert{$got}}({quote_string($*HLL)}, {$chunk.expr})", $chunk);
578+
return Chunk.new($T_OBJ, "nqp.{%convert{$got}}(HLL, {$chunk.expr})", $chunk);
579579
}
580580
}
581581

@@ -1057,7 +1057,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
10571057
if $node.has_exit_handler {
10581058
$result_for_exit_handler := $*BLOCK.add_tmp;
10591059
$wrap_in_try := 1;
1060-
$exit_handler := "\} finally \{nqp.exitHandler($*CTX, {quote_string($*HLL)}, $result_for_exit_handler);\n";
1060+
$exit_handler := "\} finally \{nqp.exitHandler($*CTX, HLL, $result_for_exit_handler);\n";
10611061
}
10621062

10631063
if $*BLOCK.pass_on_exceptions {
@@ -1331,7 +1331,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
13311331
"var sh = nqp.createArray([{nqp::join(',',@sh)}]);\n"
13321332
~ "var sc = nqp.op.createsc({quote_string(nqp::scgethandle($sc))});\n"
13331333
~ self.emit_code_refs_list($ast)
1334-
, "nqp.op.deserialize({quote_string($*HLL)}, $quoted_data,sc,sh,code_refs,null,cuids,function() \{{self.setup_wvals}\});\n"
1334+
, "nqp.op.deserialize(HLL, $quoted_data,sc,sh,code_refs,null,cuids,function() \{{self.setup_wvals}\});\n"
13351335
~ "nqp.op.scsetdesc(sc,{quote_string(nqp::scgetdesc($sc))});\n");
13361336
}
13371337

@@ -1487,7 +1487,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
14871487

14881488
my int $comp_mode := $node.compilation_mode;
14891489

1490-
my str $set_hll := $*HLL ?? "nqp.setCodeRefHLL(cuids, {quote_string($*HLL)});\n" !! '';
1490+
my str $set_hll := "nqp.setCodeRefHLL(cuids, HLL);\n";
14911491

14921492
my $set_code_objects := self.set_code_objects;
14931493
my @setup := [$pre , $comp_mode ?? self.create_sc($node) !! '', $set_code_objects, self.declare_js_vars($*BLOCK.tmps), self.declare_js_vars($*BLOCK.js_lexicals), self.capture_inners($*BLOCK), self.clone_inners($*BLOCK), $set_hll, $post, $body];
@@ -1510,7 +1510,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
15101510

15111511
multi method as_js(QAST::ParamTypeCheck $node) {
15121512
my $check := self.as_js($node[0], :want($T_BOOL));
1513-
Chunk.void($check, "if (!{$check.expr}) return nqp.paramcheckfailed({quote_string($*HLL)}, $*CTX, Array.prototype.slice.call(arguments));\n");
1513+
Chunk.void($check, "if (!{$check.expr}) return nqp.paramcheckfailed(HLL, $*CTX, Array.prototype.slice.call(arguments));\n");
15141514
}
15151515

15161516
my %default_value := nqp::hash($T_OBJ, 'nqp.Null', $T_INT, '0', $T_NUM, '0', $T_STR, 'nqp.null_s');
@@ -1807,7 +1807,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
18071807
my $suffix := self.suffix_from_type($type);
18081808
my $get := self.get_var($var);
18091809
my $set := self.set_var($var, 'value');
1810-
Chunk.new($T_OBJ, "nqp.lexRef{$suffix}({quote_string($*HLL)}, function() \{return $get\}, function(value) \{$set\})", :node($var));
1810+
Chunk.new($T_OBJ, "nqp.lexRef{$suffix}(HLL, function() \{return $get\}, function(value) \{$set\})", :node($var));
18111811
}
18121812
}
18131813
}
@@ -1881,7 +1881,7 @@ class QAST::CompilerJS does DWIMYNameMangling does SerializeOnce {
18811881
}
18821882

18831883

1884-
Chunk.new($T_OBJ, "nqp.attrRef{$suffix}({quote_string($*HLL)}, function() \{return $get\}, function(value) \{$set\})", :node($var));
1884+
Chunk.new($T_OBJ, "nqp.attrRef{$suffix}(HLL, function() \{return $get\}, function(value) \{$set\})", :node($var));
18851885
}
18861886
elsif $var.scope eq 'attribute' {
18871887
my @types := [$T_OBJ, $T_INT, $T_NUM, $T_STR];

src/vm/js/Operations.nqp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ class QAST::OperationsJS {
3838

3939
if $hll {
4040
if $method_call {
41-
nqp::splice(@exprs, nqp::list(quote_string($*HLL)), 1, 0);
41+
nqp::splice(@exprs, 'HLL', 1, 0);
4242
} else {
43-
@exprs.unshift(quote_string($*HLL));
43+
@exprs.unshift('HLL');
4444
}
4545
}
4646

@@ -577,7 +577,7 @@ class QAST::OperationsJS {
577577
@exprs.push($chunk.expr);
578578
}
579579

580-
my $hll := $type == $T_OBJ ?? quote_string($*HLL) ~ ',' !! '';
580+
my $hll := $type == $T_OBJ ?? 'HLL,' !! '';
581581
@setup.push($list ~ " = nqp.list" ~ $suffix ~ "(" ~ $hll ~ "[" ~ nqp::join(',', @exprs) ~ "]);\n");
582582

583583
Chunk.new($T_OBJ, $list , @setup, :$node);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -244,15 +244,15 @@ op.bool_I = function(n) {
244244
return intishBool(getBI(n).toNumber());
245245
};
246246

247-
op.radix_I = function(hllName, radix, str, zpos, flags, type) {
247+
op.radix_I = function(currentHLL, radix, str, zpos, flags, type) {
248248
var extracted = core.radixHelper(radix, str, zpos, flags);
249249
if (extracted == null) {
250-
return hll.slurpyArray(hllName, [makeBI(type, bignum(0)), makeBI(type, bignum(1)), -1]);
250+
return hll.slurpyArray(currentHLL, [makeBI(type, bignum(0)), makeBI(type, bignum(1)), -1]);
251251
}
252252

253253
if (radix == 10 || radix == 16) {
254254
var pow = bignum(radix).pow(extracted.power);
255-
return hll.slurpyArray(hllName, [makeBI(type, bignum(extracted.number, radix)), makeBI(type, pow), extracted.offset]);
255+
return hll.slurpyArray(currentHLL, [makeBI(type, bignum(extracted.number, radix)), makeBI(type, pow), extracted.offset]);
256256
} else {
257257
var n = extracted.number;
258258
var base = bignum(1);
@@ -271,6 +271,6 @@ op.radix_I = function(hllName, radix, str, zpos, flags, type) {
271271

272272
if (n[0] == '-') result = result.neg();
273273

274-
return hll.slurpyArray(hllName, [makeBI(type, result), makeBI(type, base), extracted.offset]);
274+
return hll.slurpyArray(currentHLL, [makeBI(type, result), makeBI(type, base), extracted.offset]);
275275
}
276276
};

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,13 @@ function radixHelper(radix, str, zpos, flags) {
7979

8080
exports.radixHelper = radixHelper;
8181

82-
op.radix = function(hllName, radix, str, zpos, flags) {
82+
op.radix = function(currentHLL, radix, str, zpos, flags) {
8383
var extracted = radixHelper(radix, str, zpos, flags);
8484
if (extracted == null) {
85-
return hll.slurpyArray(hllName, [0, 1, -1]);
85+
return hll.slurpyArray(currentHLL, [0, 1, -1]);
8686
}
8787
var pow = Math.pow(radix, extracted.power);
88-
return hll.slurpyArray(hllName, [parseInt(extracted.number, radix), pow, extracted.offset]);
88+
return hll.slurpyArray(currentHLL, [parseInt(extracted.number, radix), pow, extracted.offset]);
8989
};
9090

9191
op.setdebugtypename = function(type, debugName) {
@@ -1058,11 +1058,11 @@ op.getstaticcode = function(codeRef) {
10581058
return codeRef.staticCode;
10591059
};
10601060

1061-
op.backtracestrings = function(hllName, exception) {
1062-
return hll.list(hllName, [exception.stack.replace(/^Error: .*\n/, '')]);
1061+
op.backtracestrings = function(currentHLL, exception) {
1062+
return hll.list(currentHLL, [exception.stack.replace(/^Error: .*\n/, '')]);
10631063
};
10641064

1065-
op.backtrace = function(hllName, exception) {
1065+
op.backtrace = function(currentHLL, exception) {
10661066
if (exception.$$ctx) {
10671067
let ctx = exception.$$ctx.$$skipHandlers();
10681068

@@ -1114,9 +1114,9 @@ op.backtrace = function(hllName, exception) {
11141114

11151115
ctx = ctx.$$caller;
11161116
}
1117-
return hll.list(hllName, rows);
1117+
return hll.list(currentHLL, rows);
11181118
} else {
1119-
return hll.list(hllName, []);
1119+
return hll.list(currentHLL, []);
11201120
}
11211121
};
11221122

@@ -1272,8 +1272,8 @@ op.islist = function(list) {
12721272
return (list._STable && list._STable.REPR instanceof reprs.VMArray) ? 1 : 0;
12731273
};
12741274

1275-
op.split = function(hllName, separator, string) {
1276-
return hll.slurpyArray(hllName, string !== '' ? string.split(separator) : []);
1275+
op.split = function(currentHLL, separator, string) {
1276+
return hll.slurpyArray(currentHLL, string !== '' ? string.split(separator) : []);
12771277
};
12781278

12791279
op.exception = function() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ module.exports.wval = function(handle, idx) {
4141
return serializationContexts[handle].rootObjects[idx];
4242
};
4343

44-
op.deserialize = function(hllName, blob, sc, sh, codeRefs, conflict, cuids, setupWVals) {
44+
op.deserialize = function(currentHLL, blob, sc, sh, codeRefs, conflict, cuids, setupWVals) {
4545
var buffer = new Buffer(blob, 'base64');
4646
sc.codeRefs = codeRefs.array;
4747

@@ -54,7 +54,7 @@ op.deserialize = function(hllName, blob, sc, sh, codeRefs, conflict, cuids, setu
5454
sh = sh.array;
5555
var cursor = new BinaryCursor(buffer, 0, sh, sc);
5656

57-
cursor.deserialize(sc, cuids, setupWVals, hll.getHLL(hllName));
57+
cursor.deserialize(sc, cuids, setupWVals, currentHLL);
5858
};
5959

6060
op.createsc = function(handle) {

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ exports.hllConfigs = hllConfigs;
8585
function getHLL(language) {
8686
if (!hllConfigs[language]) {
8787
hllConfigs[language] = new Map;
88+
hllConfigs[language].set('slurpy_array', BOOT.Array)
89+
hllConfigs[language].set('list', BOOT.Array)
8890

8991
// For serialization purposes
9092
hllConfigs[language].set('name', language);
@@ -115,16 +117,12 @@ op.settypehllrole = function(type, role) {
115117
return type;
116118
};
117119

118-
exports.slurpyArray = function(hllName, array) {
119-
var slurpyArray;
120-
if (hllConfigs[hllName]) slurpyArray = hllConfigs[hllName].get('slurpy_array');
121-
if (slurpyArray === undefined) slurpyArray = BOOT.Array;
120+
exports.slurpyArray = function(currentHLL, array) {
121+
const slurpyArray = currentHLL.get('slurpy_array');
122122
return slurpyArray._STable.REPR.allocateFromArray(slurpyArray._STable, array);
123123
};
124124

125-
exports.list = function(hllName, array) {
126-
var list;
127-
if (hllConfigs[hllName]) list = hllConfigs[hllName].get('list');
128-
if (list === undefined) list = BOOT.Array;
125+
exports.list = function(currentHLL, array) {
126+
const list = currentHLL.get('list');
129127
return list._STable.REPR.allocateFromArray(list._STable, array);
130128
};

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

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ let hll = require('./hll.js');
33
let helpers = exports.helpers = {};
44
let op = exports.op = {};
55

6-
function attrRef_i(hllName, get, set) {
7-
var refType = hll.hllConfigs[hllName].get('int_attr_ref');
6+
function attrRef_i(currentHLL, get, set) {
7+
var refType = currentHLL.get('int_attr_ref');
88
if (refType === undefined) {
99
throw 'No int attribute reference type registered for current HLL';
1010
}
@@ -15,8 +15,8 @@ function attrRef_i(hllName, get, set) {
1515
return ref;
1616
}
1717

18-
function attrRef_n(hllName, get, set) {
19-
var refType = hll.hllConfigs[hllName].get('num_attr_ref');
18+
function attrRef_n(currentHLL, get, set) {
19+
var refType = currentHLL.get('num_attr_ref');
2020
if (refType === undefined) {
2121
throw 'No num attribute reference type registered for current HLL';
2222
}
@@ -27,8 +27,8 @@ function attrRef_n(hllName, get, set) {
2727
return ref;
2828
}
2929

30-
function attrRef_s(hllName, get, set) {
31-
var refType = hll.hllConfigs[hllName].get('str_attr_ref');
30+
function attrRef_s(currentHLL, get, set) {
31+
var refType = currentHLL.get('str_attr_ref');
3232
if (refType === undefined) {
3333
throw 'No str attribute reference type registered for current HLL';
3434
}
@@ -39,26 +39,26 @@ function attrRef_s(hllName, get, set) {
3939
return ref;
4040
}
4141

42-
op.getattrref_i = function(hllName, obj, classHandle, attrName) {
43-
return attrRef_i(hllName,
42+
op.getattrref_i = function(currentHLL, obj, classHandle, attrName) {
43+
return attrRef_i(currentHLL,
4444
() => obj.$$getattr_i(classHandle, attrName),
4545
value => obj.$$bindattr_i(classHandle, attrName, value));
4646
};
4747

48-
op.getattrref_n = function(hllName, obj, classHandle, attrName) {
49-
return attrRef_n(hllName,
48+
op.getattrref_n = function(currentHLL, obj, classHandle, attrName) {
49+
return attrRef_n(currentHLL,
5050
() => obj.$$getattr_n(classHandle, attrName),
5151
value => obj.$$bindattr_n(classHandle, attrName, value));
5252
};
5353

54-
op.getattrref_s = function(hllName, obj, classHandle, attrName) {
55-
return attrRef_s(hllName,
54+
op.getattrref_s = function(currentHLL, obj, classHandle, attrName) {
55+
return attrRef_s(currentHLL,
5656
() => obj.$$getattr_s(classHandle, attrName),
5757
value => obj.$$bindattr_s(classHandle, attrName, value));
5858
};
5959

60-
helpers.lexRef_i = function(hllName, get, set) {
61-
var refType = hll.hllConfigs[hllName].get('int_lex_ref');
60+
helpers.lexRef_i = function(currentHLL, get, set) {
61+
var refType = currentHLL.get('int_lex_ref');
6262
if (refType === undefined) {
6363
throw 'No int lexical reference type registered for current HLL';
6464
}
@@ -69,8 +69,8 @@ helpers.lexRef_i = function(hllName, get, set) {
6969
return ref;
7070
};
7171

72-
helpers.lexRef_s = function(hllName, get, set) {
73-
var refType = hll.hllConfigs[hllName].get('str_lex_ref');
72+
helpers.lexRef_s = function(currentHLL, get, set) {
73+
var refType = currentHLL.get('str_lex_ref');
7474
if (refType === undefined) {
7575
throw 'No str lexical reference type registered for current HLL';
7676
}
@@ -81,8 +81,8 @@ helpers.lexRef_s = function(hllName, get, set) {
8181
return ref;
8282
};
8383

84-
helpers.lexRef_n = function(hllName, get, set) {
85-
var refType = hll.hllConfigs[hllName].get('num_lex_ref');
84+
helpers.lexRef_n = function(currentHLL, get, set) {
85+
var refType = currentHLL.get('num_lex_ref');
8686
if (refType === undefined) {
8787
throw 'No num lexical reference type registered for current HLL';
8888
}
@@ -93,8 +93,8 @@ helpers.lexRef_n = function(hllName, get, set) {
9393
return ref;
9494
};
9595

96-
op.atposref_i = function(hllName, obj, index) {
97-
var refType = hll.hllConfigs[hllName].get('int_pos_ref');
96+
op.atposref_i = function(currentHLL, obj, index) {
97+
var refType = currentHLL.get('int_pos_ref');
9898
if (refType === undefined) {
9999
throw 'No int lexical reference type registered for current HLL';
100100
}
@@ -105,8 +105,8 @@ op.atposref_i = function(hllName, obj, index) {
105105
return ref;
106106
};
107107

108-
op.atposref_n = function(hllName, obj, index) {
109-
var refType = hll.hllConfigs[hllName].get('num_pos_ref');
108+
op.atposref_n = function(currentHLL, obj, index) {
109+
var refType = currentHLL.get('num_pos_ref');
110110
if (refType === undefined) {
111111
throw 'No num lexical reference type registered for current HLL';
112112
}
@@ -117,8 +117,8 @@ op.atposref_n = function(hllName, obj, index) {
117117
return ref;
118118
};
119119

120-
op.atposref_s = function(hllName, obj, index) {
121-
var refType = hll.hllConfigs[hllName].get('str_pos_ref');
120+
op.atposref_s = function(currentHLL, obj, index) {
121+
var refType = currentHLL.get('str_pos_ref');
122122
if (refType === undefined) {
123123
throw 'No str lexical reference type registered for current HLL';
124124
}

0 commit comments

Comments
 (0)