summaryrefslogtreecommitdiffstats
path: root/third_party/rust/jsparagus/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/jsparagus/Makefile')
-rw-r--r--third_party/rust/jsparagus/Makefile111
1 files changed, 111 insertions, 0 deletions
diff --git a/third_party/rust/jsparagus/Makefile b/third_party/rust/jsparagus/Makefile
new file mode 100644
index 0000000000..827e232c7f
--- /dev/null
+++ b/third_party/rust/jsparagus/Makefile
@@ -0,0 +1,111 @@
+PY_OUT = js_parser/parser_tables.py
+HANDLER_FILE = crates/generated_parser/src/ast_builder.rs
+HANDLER_INFO_OUT = jsparagus/emit/collect_handler_info/info.json
+RS_TABLES_OUT = crates/generated_parser/src/parser_tables_generated.rs
+RS_AST_OUT = crates/ast/src/types_generated.rs \
+ crates/ast/src/type_id_generated.rs \
+ crates/ast/src/dump_generated.rs \
+ crates/ast/src/visit_generated.rs \
+ crates/ast/src/source_location_accessor_generated.rs \
+ crates/generated_parser/src/stack_value_generated.rs
+
+JSPARAGUS_DIR := $(dir $(firstword $(MAKEFILE_LIST)))
+VENV_BIN_DIR := $(JSPARAGUS_DIR)jsparagus_build_venv/bin
+PYTHON := $(VENV_BIN_DIR)/python
+PIP := $(VENV_BIN_DIR)/pip
+
+all: $(PY_OUT) rust
+
+init-venv:
+ python3 -m venv jsparagus_build_venv &&\
+ $(PIP) install --upgrade pip &&\
+ $(PIP) install -r requirements.txt
+
+init: init-venv
+ git config core.hooksPath .githooks
+
+ECMA262_SPEC_HTML = ../tc39/ecma262/spec.html
+STANDARD_ES_GRAMMAR_OUT = js_parser/es.esgrammar
+
+# List of files which have a grammar_extension! Rust macro. The macro content is
+# scrapped to patch the extracted grammar.
+EXTENSION_FILES = \
+
+# Incomplete list of files that contribute to the dump file.
+SOURCE_FILES = $(EXTENSION_FILES) \
+jsparagus/gen.py \
+jsparagus/grammar.py \
+jsparagus/rewrites.py \
+jsparagus/lr0.py \
+jsparagus/parse_table.py \
+jsparagus/extension.py \
+jsparagus/utils.py \
+jsparagus/actions.py \
+jsparagus/aps.py \
+jsparagus/types.py \
+js_parser/esgrammar.pgen \
+js_parser/generate_js_parser_tables.py \
+js_parser/parse_esgrammar.py \
+js_parser/load_es_grammar.py \
+js_parser/es-simplified.esgrammar
+
+EMIT_FILES = $(SOURCE_FILES) \
+jsparagus/emit/__init__.py \
+jsparagus/emit/python.py \
+jsparagus/emit/rust.py
+
+DUMP_FILE = js_parser/parser_generated.jsparagus_dump
+
+$(DUMP_FILE): $(SOURCE_FILES)
+ $(PYTHON) -m js_parser.generate_js_parser_tables --progress -o $@ $(EXTENSION_FILES:%=--extend %)
+
+$(PY_OUT): $(EMIT_FILES) $(DUMP_FILE)
+ $(PYTHON) -m js_parser.generate_js_parser_tables --progress -o $@ $(DUMP_FILE)
+
+$(HANDLER_INFO_OUT): jsparagus/emit/collect_handler_info/src/main.rs $(HANDLER_FILE)
+ (cd jsparagus/emit/collect_handler_info/; cargo run --bin collect_handler_info ../../../$(HANDLER_FILE) $(subst jsparagus/emit/collect_handler_info/,,$(HANDLER_INFO_OUT)))
+
+$(RS_AST_OUT): crates/ast/ast.json crates/ast/generate_ast.py
+ (cd crates/ast && $(abspath $(PYTHON)) generate_ast.py)
+
+$(RS_TABLES_OUT): $(EMIT_FILES) $(DUMP_FILE) $(HANDLER_INFO_OUT)
+ $(PYTHON) -m js_parser.generate_js_parser_tables --progress -o $@ $(DUMP_FILE) $(HANDLER_INFO_OUT)
+
+# This isn't part of the `all` target because it relies on a file that might
+# not be there -- it lives in a different git respository.
+$(STANDARD_ES_GRAMMAR_OUT): $(ECMA262_SPEC_HTML)
+ $(PYTHON) -m js_parser.extract_es_grammar $(ECMA262_SPEC_HTML) > $@ || rm $@
+
+rust: $(RS_AST_OUT) $(RS_TABLES_OUT)
+ cargo build --all
+
+jsparagus/parse_pgen_generated.py:
+ $(PYTHON) -m jsparagus.parse_pgen --regenerate > $@
+
+check: all static-check dyn-check
+
+dyn-check:
+ ./test.sh
+ cargo fmt
+ cargo test --all
+
+static-check:
+ $(VENV_BIN_DIR)/mypy -p jsparagus -p tests -p js_parser
+
+jsdemo: $(PY_OUT)
+ $(PYTHON) -m js_parser.try_it
+
+update-stencil:
+ $(PYTHON) update_stencil.py \
+ ../mozilla-unified ./
+
+update-unicode:
+ $(PYTHON) update_unicode.py UNIDATA ./
+
+smoosh-status:
+ $(PYTHON) smoosh_status.py
+
+smoosh-status-ci:
+ $(PYTHON) smoosh_status.py ci
+
+.PHONY: all check static-check dyn-check jsdemo rust update-opcodes-m-u smoosh-status smoosh-status-ci