mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-15 04:32:21 +00:00
* fully refactor run_tests.py, make it extensible for the future * an ability to write @compilation_should_fail tests * an ability to launch run_tests.py for a single .fc file * keep run_tests.js in sync with run_tests.py * extract legacy_tests names/hashes to a separate file shared between legacy_tester.py and legacy_tester.js
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
const fsSync = require('fs');
|
|
|
|
const copyToCString = (mod, str) => {
|
|
const len = mod.lengthBytesUTF8(str) + 1;
|
|
const ptr = mod._malloc(len);
|
|
mod.stringToUTF8(str, ptr, len);
|
|
return ptr;
|
|
};
|
|
|
|
const copyToCStringPtr = (mod, str, ptr) => {
|
|
const allocated = copyToCString(mod, str);
|
|
mod.setValue(ptr, allocated, '*');
|
|
return allocated;
|
|
};
|
|
|
|
const copyFromCString = (mod, ptr) => {
|
|
return mod.UTF8ToString(ptr);
|
|
};
|
|
|
|
/** @return {{status: string, message: string, fiftCode: string, codeBoc: string, codeHashHex: string}} */
|
|
function compileFile(mod, filename) {
|
|
const callbackPtr = mod.addFunction((_kind, _data, contents, error) => {
|
|
const kind = copyFromCString(mod, _kind);
|
|
const data = copyFromCString(mod, _data);
|
|
if (kind === 'realpath') {
|
|
copyToCStringPtr(mod, fsSync.realpathSync(data), contents);
|
|
} else if (kind === 'source') {
|
|
const path = fsSync.realpathSync(data);
|
|
try {
|
|
copyToCStringPtr(mod, fsSync.readFileSync(path).toString('utf-8'), contents);
|
|
} catch (err) {
|
|
copyToCStringPtr(mod, err.message, error);
|
|
}
|
|
} else {
|
|
copyToCStringPtr(mod, 'Unknown callback kind ' + kind, error);
|
|
}
|
|
}, 'viiii');
|
|
|
|
const config = {
|
|
optLevel: 2,
|
|
sources: [filename]
|
|
};
|
|
|
|
const configPtr = copyToCString(mod, JSON.stringify(config));
|
|
|
|
const responsePtr = mod._func_compile(configPtr, callbackPtr);
|
|
|
|
return JSON.parse(copyFromCString(mod, responsePtr));
|
|
}
|
|
|
|
async function compileWasm(fiftFuncLibJsFileName, fiftFuncLibWasmFileName) {
|
|
const wasmModule = require(fiftFuncLibJsFileName)
|
|
const wasmBinary = new Uint8Array(fsSync.readFileSync(fiftFuncLibWasmFileName))
|
|
|
|
return await wasmModule({ wasmBinary })
|
|
}
|
|
|
|
module.exports = {
|
|
compileFile,
|
|
compileWasm
|
|
}
|