1.2.3 • Published 3 years ago

@alu0100987522/constant-folding v1.2.3

Weekly downloads
-
License
Unlicense
Repository
github
Last release
3 years ago

npm version

constant-folding

CI for constant folding transformations.

Installation

Install globally

$ npm i -g @alu0100987522/constant-folding

Install as a dependency project

$ npm i -D @alu0100987522/constant-folding

Usage

  • Usage from CI:

General use

$ npx cf inputFile.js -o outputFile.js

--help

$ npx cf --help

Usage: cf [options] <filename>

Constant Folding javascript code

Arguments:
  filename                 file with the original code

Options:
  -V, --version            output the version number
  -o, --output <filename>  specify a file to save the output (default: "output.js")
  -h, --help               display help for command
  • Usage from code:

const constantFolding = require('@alu0100987522/constant-folding');

You can finde more information about the functions that implement the constant folding here.

Examples

  • code example:
const constantFolding = require('@alu0100987522/constant-folding');

console.log(constantFolding(`["a", "b", "c"][1*1];`));  // Output: 'b';
  • CI example:

For this input.js:

image

We use:

npx cf input.js -o output.js

image

And we get the output in the output.js:

image

About the author and the package

This package was built and published by Aitor Hernández, alu0100987522@ull.edu.es, as a part of a lab from Procesadores de Lenguajes subject, in Universidad de La Laguna.

Tests

Tested in node 16x. version for Ubuntu, MacOs and Windows.

image

Tested with the javascript code that follows:

  --- constantFolding tests ---

    Works correctly for literals
      ✔ var f = 3+null; ==> var f = 3;
      ✔ var e = 4 | 3; ==> var e = 7;
      ✔ var d = 3+"c"; ==> var d = '3c';
      ✔ var b = 9 +1; ==> var b = 10;
      ✔ var a = 2+3*5+b; ==> var a = 17 + b;
    Works correctly for operator []
      ✔ [1, 2, 3][0]; ==> 1;
      ✔ [1, 2, 3][2-1]; ==> 2;
      ✔ ["a", "b", "c"][2]; ==> 'c';
      ✔ ["a", "b", "c"][1*1]; ==> 'b';
      ✔ ["a", 1, 2][1+1]; ==> 2;
    Works correctly for pop()
      ✔ [1, 2, 3].pop(); ==> 3;
      ✔ ["a","b","c"].pop(); ==> 'c';