• Stars
    star
    123
  • Rank 290,145 (Top 6 %)
  • Language
    C++
  • License
    MIT License
  • Created about 6 years ago
  • Updated almost 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

ECMAScript Interpreter

mjs

Introduction

mjs is an interpreter for the ECMAScript (a.k.a. Javascript) 1st , 3rd and 5(.1)th editions written in C++17. It was written as a hobby project for the purpose of gaining a better understanding of how Javascript actually works. As such, it neither strives to be fast, secure nor particularly beautiful. In fact, some things are downright terribly implemented; also no real programs were actually tested.

All ES1, ES3 and ES5.1 features should be implemented (to some degree...), but conformance is always work in progress.

See the TODO file some of the known pain points and the progress on passing the ES5 Conformance Suite tests.

Building

You need a modern C++ compiler that supports C++17 and CMake 3.7 or later. It has currently been tested with the following compilers:

  • Visual C++ 2017 15.9.6 on Windows 10
  • GCC 8.2.0 (x64 distribution from Stephan T. Lavavej) on Windows 10
  • GCC 8.2.0 (on x64 Linux, Debian testing as of October 2018)
  • Clang 7.0.0 (on Windows 10 and x64 Linux)

To run the tests build the check target.

The interpreter is built in the src directory. It accepts a Javascript file on the command line or starts in REPL mode if no argument is given. The ECMAScript version can be chosen by supplying it as a command line argument (e.g. mjs -es1).

These steps should work for most people:

mkdir build
cd build
cmake .. # Here you may want to use e.g. CXX=g++-8 cmake ..
cmake --build .
cmake --build . --target check

Several debugging features can also be enabled. Use your favorite CMake GUI to view and toggle them (they are all off by default).

Documentation

The project is currently light on the documentation front, but here is what's available so far:

Support

Forget about it :) Feel free to raise an issue on GitHub, but don't expect anything to come of it.