Ton

Форк
0
/
wasm_tests_common.js 
63 строки · 1.7 Кб
1
const fsSync = require('fs');
2

3
const copyToCString = (mod, str) => {
4
    const len = mod.lengthBytesUTF8(str) + 1;
5
    const ptr = mod._malloc(len);
6
    mod.stringToUTF8(str, ptr, len);
7
    return ptr;
8
};
9

10
const copyToCStringPtr = (mod, str, ptr) => {
11
    const allocated = copyToCString(mod, str);
12
    mod.setValue(ptr, allocated, '*');
13
    return allocated;
14
};
15

16
const copyFromCString = (mod, ptr) => {
17
    return mod.UTF8ToString(ptr);
18
};
19

20
async function compileFile(mod, filename) {
21
    const callbackPtr = mod.addFunction((_kind, _data, contents, error) => {
22
        const kind = copyFromCString(mod, _kind);
23
        const data = copyFromCString(mod, _data);
24
        if (kind === 'realpath') {
25
            copyToCStringPtr(mod, fsSync.realpathSync(data), contents);
26
        } else if (kind === 'source') {
27
            const path = fsSync.realpathSync(data);
28
            try {
29
                copyToCStringPtr(mod, fsSync.readFileSync(path).toString('utf-8'), contents);
30
            } catch (err) {
31
                copyToCStringPtr(mod, e.message, error);
32
            }
33
        } else {
34
            copyToCStringPtr(mod, 'Unknown callback kind ' + kind, error);
35
        }
36
    }, 'viiii');
37

38
    const config = {
39
        optLevel: 2,
40
        sources: [filename]
41
    };
42

43
    const configPtr = copyToCString(mod, JSON.stringify(config));
44

45
    const responsePtr = mod._func_compile(configPtr, callbackPtr);
46

47
    return JSON.parse(copyFromCString(mod, responsePtr));
48
}
49

50
const wasmModule = require(process.env.FUNCFIFTLIB_MODULE)
51

52
const wasmBinary = new Uint8Array(fsSync.readFileSync(process.env.FUNCFIFTLIB_WASM))
53

54
async function compileWasm() {
55
    const mod = await wasmModule({ wasmBinary })
56

57
    return mod
58
}
59

60
module.exports = {
61
    compileFile,
62
    compileWasm
63
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.