UNPKG

wasmonkey

Version:

Write and run C code inside JavaScript file.

53 lines (45 loc) 1.78 kB
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};