wasmonkey
Version:
Write and run C code inside JavaScript file.
53 lines (45 loc) • 1.78 kB
JavaScript
const parser = require("node-c-parser");
const settings = require("../../settings");
const serializeByFilename = (str, filename) => {
// linux
let result = filename+"__"+str;
result = result.replace(new RegExp("/","g"), "_");
result = result.split(".").join("");
return result;
}
const deserializeByFilename = (str, filename) => {
}
const replaceByIndex = (str, index, oldSub, newSub)=>
str.slice(0, index) + newSub + str.slice(index+oldSub.length,str.length);
const serializeStr = (str, tokens, filename) => {
let codeText = str.split("\n");
let serializedStr;
let token;
for(let i = 0; i < codeText.length; i++) {
let colOffset = 0;
for(let j = 0; j < tokens.length; j++) {
token = tokens[j];
if(token.row-1 === i) {
let newId = serializeByFilename(token.lexeme, filename);
let oldLineLength = codeText[i].length;
codeText[i] = replaceByIndex(codeText[i], token.col+colOffset-1, token.lexeme, newId);
colOffset = colOffset+(codeText[i].length-oldLineLength);
}
}
}
serializedStr = codeText.join("\n");
serializedStr = serializedStr.replace(new RegExp(settings.keepaliveTag,"g"),"EMSCRIPTEN_KEEPALIVE");
return serializedStr;
}
const getIdLexerTokens = (codeText) => {
let tokens = parser.lexer.lexUnit.tokenize(codeText);
let idTokens = [];
tokens.forEach(token => {
if(token.tokenClass === "IDENTIFIER") {
if(token.lexeme !== "include" && token.lexeme !== settings.keepaliveTag)
idTokens.push(token);
}
});
return idTokens;
}
module.exports = {getIdLexerTokens, serializeStr, serializeByFilename, deserializeByFilename};