All files / asm80-core parser.js

100% Statements 32/32
100% Branches 4/4
100% Functions 1/1
100% Lines 32/32

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 331x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 51x 51x 51x 51x 51x 51x 51x 51x 51x 51x 43x 43x 43x 43x 43x 43x 1x  
// assembler file parser
// gets a text file, returns an array of parsed lines
 
import { prepro, unroll } from "./preprocessor.js";
import { parseLine } from "./parseLine.js";
 
import { toInternal, nonempty, norm } from "./utils/utils.js";
 
/**
 * Parsuje assemblerový zdrojový kód do pole tokenizovaných řádků (včetně makroexpanze)
 * @param {string} s - Zdrojový kód jako text
 * @param {Object} opts - Možnosti assembleru (včetně readFile, assembler, atd.)
 * @returns {Promise<Array>} Pole tokenizovaných a expandovaných řádků
 */
export const parse = async (s, opts) => {
  // split and convert to internal lines
  let i = toInternal(s.split(/\n/));
  //remove empty lines
  i = nonempty(i);
  //normalize lines
  i = norm(i);
 
  //macro processing and expansion
  
  let prei = await prepro(i, opts);
  //console.log(prei)
  i = prei[0].map((line) => parseLine(line, prei[1], opts));
  i = unroll(i, prei[1], null, opts);
  
  //console.log("prei",i)
  return i;
};