Skip to content

Commit

Permalink
Support big endian (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford authored Oct 13, 2020
1 parent 10ef34d commit 88b711b
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/lexer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,21 @@ const strictReserved = new Set(['implements', 'interface', 'let', 'package', 'pr

let wasm;

const isLE = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;

export function parse (source, name = '@') {
if (!wasm)
throw new Error('Not initialized');

const len = source.length + 1;

// need 2 bytes per code point plus analysis space so we double again
const extraMem = (wasm.__heap_base.value || wasm.__heap_base) + source.length * 4 - wasm.memory.buffer.byteLength;
const extraMem = (wasm.__heap_base.value || wasm.__heap_base) + len * 4 - wasm.memory.buffer.byteLength;
if (extraMem > 0)
wasm.memory.grow(Math.ceil(extraMem / 65536));

const addr = wasm.sa(source.length);
copy(source, new Uint16Array(wasm.memory.buffer, addr, source.length + 1));
const addr = wasm.sa(len);
(isLE ? copyLE : copyBE)(source, new Uint16Array(wasm.memory.buffer, addr, len));

if (!wasm.parseCJS(addr, source.length, 0, 0))
throw Object.assign(new Error(`Parse error ${name}${wasm.e()}:${source.slice(0, wasm.e()).split('\n').length}:${wasm.e() - source.lastIndexOf('\n', wasm.e() - 1)}`), { idx: wasm.e() });
Expand All @@ -29,7 +33,16 @@ export function parse (source, name = '@') {
return { exports: [...exports], reexports: [...reexports] };
}

function copy (src, outBuf16) {
function copyBE (src, outBuf16) {
const len = src.length;
let i = 0;
while (i < len) {
const ch = src.charCodeAt(i);
outBuf16[i++] = (ch & 0xff) << 8 | (ch & 0xff0) >> 8;
}
}

function copyLE (src, outBuf16) {
const len = src.length;
let i = 0;
while (i < len)
Expand Down

0 comments on commit 88b711b

Please sign in to comment.