1 | const VirtualMachineInstance = require('./virtual-machine');
|
2 | const base64ArrayBuffer = require('./base64-arraybuffer');
|
3 | function extractConstants($bytecode) {
|
4 |
|
5 | const textView = VirtualMachineInstance.getTypedArrayByIndex($bytecode, 6, 2);
|
6 | const unis = [];
|
7 | for (let i = 0; i < textView.length; i++) {
|
8 | unis.push(String.fromCharCode(textView[i]));
|
9 | }
|
10 | return JSON.parse(unis.join(''));
|
11 | }
|
12 |
|
13 | function loadBytecode($bytecode) {
|
14 | if (typeof $bytecode === 'string') {
|
15 | $bytecode = base64ArrayBuffer.decode($bytecode);
|
16 | }
|
17 | const $constants = extractConstants($bytecode);
|
18 | const $globals = new Map();
|
19 |
|
20 | return function instance($model, $funcLibRaw, $batchingStrategy) {
|
21 | const virtualMachine = new VirtualMachineInstance($constants, $globals, $bytecode, $model, $funcLibRaw, $batchingStrategy)
|
22 | return virtualMachine.$res;
|
23 | };
|
24 | }
|
25 |
|
26 | module.exports = loadBytecode;
|