diff --git a/Makefile b/Makefile index af11313f75b4fdb4d46af4c79cce57c595312a56..ccca23d7fb3f6cb4e61d5c69dcce496b6979750e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,15 @@ PUB_FILES=driver.html libraries jquery-ui-1.11.4.custom jquery_scroll \ - generator/tests/jsref/displayed_sources.js tools.js node_modules/esprima/esprima.js \ - esprima-to-ast.js generator/tests/jsref/lineof.js navig-driver.js \ - generator/tests/jsref/assembly.js + jsref/displayed_sources.js tools.js node_modules/esprima/esprima.js \ + esprima-to-ast.js jsref/lineof.js navig-driver.js \ + jsref/assembly.js + +all: jsjsref + +init: + opam switch 4.03.0 + eval `opam config env` + opam pin -yn add jsjsref . + opam install -y jsjsref --deps-only publish: generator $(PUB_FILES) rsync -azR --no-p --rsh=ssh -O $^ gf:/home/groups/ajacs/htdocs/jsexplain/ @@ -9,10 +17,13 @@ publish: generator $(PUB_FILES) generator: $(MAKE) -C generator +jsjsref: generator + $(MAKE) -C jsref + test_init: npm install test: generator node_modules/.bin/mocha -.PHONY: publish generator test_init test +.PHONY: publish jsjsref generator test_init test diff --git a/generator/.gitignore b/generator/.gitignore index d301b77fc4c0faf34e76cff802c3e6895a47f09e..6b45179e462ac6a959733d86327cfde903d20de0 100644 --- a/generator/.gitignore +++ b/generator/.gitignore @@ -1,13 +1,6 @@ -*.cmi -*.log.js -*.unlog.js -*.token.js -*.pseudo.js -*.ptoken.js -*.mlloc.js -*.pre -tests/jsref/assembly.js -tests/jsref/lineof.js -tests/jsref/.depends -tests/jsref/displayed_sources.js +_build +*.byte +*.native +stdlib_ml/stdlib.cmi .ocamldebug + diff --git a/generator/Makefile b/generator/Makefile index 80845c5a9ec1c409edb71f0d4a161ed52b9a4f82..0d9385abe162661103ef25549d048db0618265f4 100644 --- a/generator/Makefile +++ b/generator/Makefile @@ -1,274 +1,35 @@ - # -# Usage: -# make all # not implemented yet, will build everything -# make full # build *.log.js, *.unlog.js, *.token.js -# make lineof # build lineof.js -# make interp # build interp.js -# - -# TODO: test/lambda is not longer supported - -############################################################### -# Paths - -all: everything -init: - opam switch 4.03.0 - eval `opam config env` - opam pin -yn add jsjsref . - opam install -y jsjsref --deps-only - - -STDLIB_DIR := stdlib_ml -TESTS_DIR := tests -JSREF_DIR := jsref -JSREF_PATH := $(TESTS_DIR)/$(JSREF_DIR) -JSREF_ML := $(filter-out JsOutput.ml,$(wildcard $(JSREF_PATH)/*.ml)) -JSREF_MLI := $(wildcard $(JSREF_PATH)/*.mli) - - -############################################################### - -# ASSEMBLY_JS must respect dependencies order -ASSEMBLY_JS_FILES := \ - BinNums.unlog.js \ - Bool0.unlog.js \ - List0.unlog.js \ - Datatypes.unlog.js \ - Fappli_IEEE_bits.unlog.js \ - Fappli_IEEE.unlog.js \ - LibList.unlog.js \ - LibOption.unlog.js \ - LibProd.unlog.js \ - StdMap.unlog.js \ - Heap.unlog.js \ - HeapInt.unlog.js \ - HeapStr.unlog.js \ - HeapList.unlog.js \ - Shared.unlog.js \ - Compare.js \ - Debug.js \ - JsNumber.js \ - JsSyntax.unlog.js \ - JsSyntaxAux.unlog.js \ - HeapObj.unlog.js \ - Translate_syntax.js \ - JsCommon.unlog.js \ - JsCommonAux.unlog.js \ - JsPreliminary.unlog.js \ - JsInit.unlog.js \ - JsInterpreterMonads.unlog.js \ - JsInterpreter.log.js \ - ModuleExport.js -ASSEMBLY_JS := $(STDLIB_DIR)/stdlib.js $(addprefix tests/jsref/,$(ASSEMBLY_JS_FILES)) - -# - - -############################################################### - -DISPLAYED_FILES := \ - JsInterpreter.ml - -DISPLAYED := $(addprefix tests/jsref/,$(DISPLAYED_FILES)) - -ALL_DISPLAYED := $(DISPLAYED:.ml=.unlog.js) $(DISPLAYED:.ml=.pseudo.js) $(DISPLAYED) - -ALL_LINEOF := $(DISPLAYED:.ml=.token.js) $(DISPLAYED:.ml=.mlloc.js) $(DISPLAYED:.ml=.ptoken.js) - - -############################################################### -# Global options - -.PHONY: all clean .log.js .unlog.js .token.js .mlloc.js .ptoken.js .pseudo.js - # all gen log unlog - -# Do not delete intermediate files. -.SECONDARY: - - -############################################################### -# Tools - +OCAMLBUILD := ocamlbuild -j 4 -classic-display -use-ocamlfind CC := ocamlc -c -OCAMLDEP := ocamldep -one-line -OCAMLBUILD := ocamlbuild -j 4 -classic-display -use-ocamlfind -X tests -X $(STDLIB_DIR) - -OCAMLPAR := OCAMLRUNPARAM="l=200M" - -LINEOF := $(OCAMLPAR) ./lineof.byte -MLTOJS := $(OCAMLPAR) ./main.byte -ppx ./monad_ppx.native -# -dsource is automatically considered by main.byte - - -DISPLAYGEN := $(OCAMLPAR) ./displayed_sources.byte - -############################################################### -# Dependencies - -ifeq ($(filter clean%,$(MAKECMDGOALS)),) -#-include $(JSREF_ML:.ml=.ml.d) -include $(JSREF_PATH)/.depends -endif +STDLIB_DIR := stdlib_ml +EXECUTABLES := main monad_ppx displayed_sources lineof assembly +all: byte native stdlib +byte: $(addsuffix .byte,$(EXECUTABLES)) +native: $(addsuffix .native,$(EXECUTABLES)) +stdlib: $(STDLIB_DIR)/stdlib.cmi -############################################################### # Rules - - - -##### Compilation of STDLIB - -$(STDLIB_DIR)/stdlib.cmi: $(STDLIB_DIR)/stdlib.mli - $(CC) $< - -##### Rule for parser extension - -monad_ppx.native: monad_ppx.ml +%.native: FORCE $(OCAMLBUILD) $@ -##### Rule for binaries - -%.byte: *.ml _tags monad_ppx.native +%.byte: FORCE $(OCAMLBUILD) $@ -##### Rule for dependencies - -$(JSREF_PATH)/.depends: $(JSREF_ML) - $(OCAMLDEP) -all -I $(<D) $(<D)/* > $@ - - -##### Rule for cmi -tests/%.cmi: tests/%.ml main.byte stdlib - $(MLTOJS) -mode cmi -I $(<D) $< - -tests/%.cmi: tests/%.mli stdlib - ocamlc -I $(JSREF_PATH) -I stdlib_ml -open Stdlib $< - -##### Rule for log/unlog/token - -tests/%.log.js: tests/%.ml main.byte stdlib tests/%.cmi - $(MLTOJS) -mode log -I $(<D) $< - -tests/%.unlog.js: tests/%.ml main.byte stdlib tests/%.cmi - $(MLTOJS) -mode unlog -I $(<D) $< - -tests/%.token.js tests/%.mlloc.js: tests/%.ml main.byte stdlib tests/%.cmi - $(MLTOJS) -mode token -I $(<D) $< - -tests/%.pseudo.js: tests/%.ml main.byte stdlib tests/%.cmi - $(MLTOJS) -mode pseudo -I $(<D) $< - -tests/%.ptoken.js: tests/%.ml main.byte stdlib tests/%.cmi - $(MLTOJS) -mode ptoken -I $(<D) $< - -##### Rule for lineof.js - -$(JSREF_PATH)/lineof.js: lineof.byte $(ALL_LINEOF) - ./lineof.byte -o $@ $(ALL_LINEOF) - -##### Rule for assembly.js - -#--LATER (optional) add as dependencies the unlog files: $(JSREF_ML:.ml=.unlog.js) - -$(JSREF_PATH)/assembly.js: assembly.byte $(ASSEMBLY_JS) - ./assembly.byte -o $@ $(ASSEMBLY_JS) -# -stdlib $(STDLIB_DIR)/stdlib.js - -##### Rule for displayed_sources.js - -$(JSREF_PATH)/displayed_sources.js: displayed_sources.byte $(ALL_DISPLAYED) - $(DISPLAYGEN) -o $@ $(ALL_DISPLAYED) - - -pseudo: tests/jsref/JsInterpreter.pseudo.js tests/jsref/JsInterpreter.ptoken.js - - - -#### maybe useful ?? - -tests/jsref/%.log.js: tests/jsref/%.ml - - -##################################################################### -# Short targets - -everything: assembly lineof display - -main: main.byte - -cmi: $(JSREF_ML:.ml=.cmi) $(JSREF_MLI:.mli=.cmi) - -gen: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.unlog.js) $(JSREF_ML:.ml=.token.js) - -ref: $(JSREF_PATH)/JsInterpreter.log.js $(JSREF_PATH)/JsInterpreter.unlog.js $(JSREF_PATH)/JsInterpreter.token.js - -log: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.token.js) - -unlog: $(JSREF_ML:.ml=.unlog.js) - -lineof: $(JSREF_PATH)/lineof.js - -assembly: $(JSREF_PATH)/assembly.js - -display: $(JSREF_PATH)/displayed_sources.js - -stdlib: $(STDLIB_DIR)/stdlib.cmi - - - -##################################################################### -# Clean - -DIRTY_EXTS := cmi,.mlloc.js,token.js,log.js,unlog.js,d,ml.d,mli.d,js.pre - -clean_genjs: - rm -f $(JSREF_PATH)/lineof.js - rm -f $(JSREF_PATH)/assembly.js - -clean_tests: - bash -c "rm -f $(JSREF_PATH)/*.{$(DIRTY_EXTS)}" - bash -c "rm -f $(JSREF_PATH)/.depends" - -# bash -c "rm -f $(TESTS_DIR)/*.{$(DIRTY_EXTS)}" - -clean_stdlib: - rm -f $(STDLIB_DIR)/*.cmi - -clean: clean_genjs clean_tests clean_stdlib - rm -rf _build - bash -c "rm -rf .ocamldebug" - rm -f *.native *.byte - - - -##################################################################### -# Extra +$(STDLIB_DIR)/stdlib.cmi: $(STDLIB_DIR)/stdlib.mli + $(CC) $< -debug: main.d.byte .ocamldebug +# Debug +debug: $(addsuffix .d.byte,$(EXECUTABLES)) .ocamldebug .ocamldebug: _tags grep -o "package([^)]*)" _tags | sed "s/package(\([^)]*\))/\1/" | xargs ocamlfind query -recursive | sed "s/^/directory /" > .ocamldebug -native: _tags - $(OCAMLBUILD) main.native - -##### Shorthand - -tests/%.all: tests/%.log.js tests/%.unlog.js tests/%.token.js - touch $@ - -##################################################################### -# Original Build of JSRef Coq to "Humanified" OCaml +clean: + ocamlbuild -clean + rm -f $(STDLIB_DIR)/*.cmi + bash -c "rm -f .ocamldebug" -#tests/%.ml: tests/%.v -# $(MAKE) -C $(CURDIR)/../../lib/tlc/src -# cd $(<D) && coqc -I $(CURDIR)/../../lib/tlc/src $(<F) -# cd $(@D) && rm *.mli -# cd $(@D) && $(CURDIR)/../ml-add-cstr-annots.pl *.ml +.PHONY: all byte native stdlib debug clean -#$(JSREF_PATH)/%.ml: -# $(MAKE) -C $(CURDIR)/../.. interpreter -# cp ../../interp/src/extract/*.ml $(JSREF_PATH)/ -# ../convert-ml-strings.pl $(JSREF_PATH)/*.ml -# cd $(@D) && $(CURDIR)/../ml-add-cstr-annots.pl *.ml +# Force rebuilds of OCaml targets via ocamlbuild, the FORCE file must not exist. +FORCE: diff --git a/generator/_tags b/generator/_tags index 0909b3f71e714b38f5cdb910bcc6dfdd06027dc2..8e2d3b9d7e5c5084d7be01db98e8314bc6dc5dae 100644 --- a/generator/_tags +++ b/generator/_tags @@ -3,5 +3,5 @@ true: package(str), package(compiler-libs.common) # Generate cmt type information files true: bin_annot -# <tests>: precious -# <stdlib_ml>: precious +<tests>: -traverse +<stdlib_ml>: -traverse diff --git a/generator/js_of_ast.ml b/generator/js_of_ast.ml index 55eab9be79c468a321fd5e4bfb48a3e83249a596..44d752aef9e3fe82ec9273e5f73d94672efb7f20 100644 --- a/generator/js_of_ast.ml +++ b/generator/js_of_ast.ml @@ -242,9 +242,7 @@ let is_coercion_constructor lident = "Coq_resvalue_ref"; "Coq_resvalue_ref"; ] in - if (is_mode_pseudo()) then Printf.printf "%s %s\n" x (if b then " [yes]" else ""); (* *) - - + (* if (is_mode_pseudo()) then Printf.printf "%s %s\n" x (if b then " [yes]" else ""); *) b diff --git a/generator/tests/jsref/Makefile b/generator/tests/jsref/Makefile deleted file mode 100644 index caf836f0f51a216011beed83ee4354a28228124d..0000000000000000000000000000000000000000 --- a/generator/tests/jsref/Makefile +++ /dev/null @@ -1,3 +0,0 @@ - -all: - make -C ../.. \ No newline at end of file diff --git a/jsref/.gitignore b/jsref/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..813a567258b5442dee987063548dd845e43d9be5 --- /dev/null +++ b/jsref/.gitignore @@ -0,0 +1,12 @@ +*.cmi +*.log.js +*.unlog.js +*.token.js +*.pseudo.js +*.ptoken.js +*.mlloc.js +*.pre +assembly.js +lineof.js +.depends +displayed_sources.js diff --git a/generator/tests/jsref/BinNums.ml b/jsref/BinNums.ml similarity index 100% rename from generator/tests/jsref/BinNums.ml rename to jsref/BinNums.ml diff --git a/generator/tests/jsref/Bool0.ml b/jsref/Bool0.ml similarity index 100% rename from generator/tests/jsref/Bool0.ml rename to jsref/Bool0.ml diff --git a/generator/tests/jsref/Compare.js b/jsref/Compare.js similarity index 100% rename from generator/tests/jsref/Compare.js rename to jsref/Compare.js diff --git a/generator/tests/jsref/Datatypes.ml b/jsref/Datatypes.ml similarity index 100% rename from generator/tests/jsref/Datatypes.ml rename to jsref/Datatypes.ml diff --git a/generator/tests/jsref/Debug.js b/jsref/Debug.js similarity index 100% rename from generator/tests/jsref/Debug.js rename to jsref/Debug.js diff --git a/generator/tests/jsref/Debug.mli b/jsref/Debug.mli similarity index 100% rename from generator/tests/jsref/Debug.mli rename to jsref/Debug.mli diff --git a/generator/tests/jsref/Fappli_IEEE.ml b/jsref/Fappli_IEEE.ml similarity index 100% rename from generator/tests/jsref/Fappli_IEEE.ml rename to jsref/Fappli_IEEE.ml diff --git a/generator/tests/jsref/Fappli_IEEE_bits.ml b/jsref/Fappli_IEEE_bits.ml similarity index 100% rename from generator/tests/jsref/Fappli_IEEE_bits.ml rename to jsref/Fappli_IEEE_bits.ml diff --git a/generator/tests/jsref/Heap.ml b/jsref/Heap.ml similarity index 100% rename from generator/tests/jsref/Heap.ml rename to jsref/Heap.ml diff --git a/generator/tests/jsref/HeapInt.ml b/jsref/HeapInt.ml similarity index 100% rename from generator/tests/jsref/HeapInt.ml rename to jsref/HeapInt.ml diff --git a/generator/tests/jsref/HeapList.ml b/jsref/HeapList.ml similarity index 100% rename from generator/tests/jsref/HeapList.ml rename to jsref/HeapList.ml diff --git a/generator/tests/jsref/HeapObj.ml b/jsref/HeapObj.ml similarity index 100% rename from generator/tests/jsref/HeapObj.ml rename to jsref/HeapObj.ml diff --git a/generator/tests/jsref/HeapStr.ml b/jsref/HeapStr.ml similarity index 100% rename from generator/tests/jsref/HeapStr.ml rename to jsref/HeapStr.ml diff --git a/generator/tests/jsref/JsCommon.ml b/jsref/JsCommon.ml similarity index 100% rename from generator/tests/jsref/JsCommon.ml rename to jsref/JsCommon.ml diff --git a/generator/tests/jsref/JsCommonAux.ml b/jsref/JsCommonAux.ml similarity index 100% rename from generator/tests/jsref/JsCommonAux.ml rename to jsref/JsCommonAux.ml diff --git a/generator/tests/jsref/JsInit.ml b/jsref/JsInit.ml similarity index 100% rename from generator/tests/jsref/JsInit.ml rename to jsref/JsInit.ml diff --git a/generator/tests/jsref/JsInterpreter.ml b/jsref/JsInterpreter.ml similarity index 100% rename from generator/tests/jsref/JsInterpreter.ml rename to jsref/JsInterpreter.ml diff --git a/generator/tests/jsref/JsInterpreterMonads.ml b/jsref/JsInterpreterMonads.ml similarity index 100% rename from generator/tests/jsref/JsInterpreterMonads.ml rename to jsref/JsInterpreterMonads.ml diff --git a/generator/tests/jsref/JsNumber.js b/jsref/JsNumber.js similarity index 100% rename from generator/tests/jsref/JsNumber.js rename to jsref/JsNumber.js diff --git a/generator/tests/jsref/JsNumber.mli b/jsref/JsNumber.mli similarity index 100% rename from generator/tests/jsref/JsNumber.mli rename to jsref/JsNumber.mli diff --git a/generator/tests/jsref/JsPreliminary.ml b/jsref/JsPreliminary.ml similarity index 100% rename from generator/tests/jsref/JsPreliminary.ml rename to jsref/JsPreliminary.ml diff --git a/generator/tests/jsref/JsSyntax.ml b/jsref/JsSyntax.ml similarity index 100% rename from generator/tests/jsref/JsSyntax.ml rename to jsref/JsSyntax.ml diff --git a/generator/tests/jsref/JsSyntaxAux.ml b/jsref/JsSyntaxAux.ml similarity index 100% rename from generator/tests/jsref/JsSyntaxAux.ml rename to jsref/JsSyntaxAux.ml diff --git a/generator/tests/jsref/LibList.ml b/jsref/LibList.ml similarity index 100% rename from generator/tests/jsref/LibList.ml rename to jsref/LibList.ml diff --git a/generator/tests/jsref/LibOption.ml b/jsref/LibOption.ml similarity index 100% rename from generator/tests/jsref/LibOption.ml rename to jsref/LibOption.ml diff --git a/generator/tests/jsref/LibProd.ml b/jsref/LibProd.ml similarity index 100% rename from generator/tests/jsref/LibProd.ml rename to jsref/LibProd.ml diff --git a/generator/tests/jsref/List0.ml b/jsref/List0.ml similarity index 100% rename from generator/tests/jsref/List0.ml rename to jsref/List0.ml diff --git a/jsref/Makefile b/jsref/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..6b2617d6b4edf071d4fe40e5828a0521833fad71 --- /dev/null +++ b/jsref/Makefile @@ -0,0 +1,190 @@ +# +# Usage: +# make all # not implemented yet, will build everything +# make full # build *.log.js, *.unlog.js, *.token.js +# make lineof # build lineof.js +# make interp # build interp.js +# +############################################################### +# Paths + +all: # Defined below + +JSREF_DIR := . +JSREF_ML := $(filter-out JsOutput.ml,$(wildcard $(JSREF_DIR)/*.ml)) +JSREF_MLI := $(wildcard $(JSREF_DIR)/*.mli) + +GENERATOR_DIR := ../generator +STDLIB_DIR := $(GENERATOR_DIR)/stdlib_ml + +############################################################### + +# ASSEMBLY_JS must respect dependencies order +ASSEMBLY_JS_FILES := \ + BinNums.unlog.js \ + Bool0.unlog.js \ + List0.unlog.js \ + Datatypes.unlog.js \ + Fappli_IEEE_bits.unlog.js \ + Fappli_IEEE.unlog.js \ + LibList.unlog.js \ + LibOption.unlog.js \ + LibProd.unlog.js \ + StdMap.unlog.js \ + Heap.unlog.js \ + HeapInt.unlog.js \ + HeapStr.unlog.js \ + HeapList.unlog.js \ + Shared.unlog.js \ + Compare.js \ + Debug.js \ + JsNumber.js \ + JsSyntax.unlog.js \ + JsSyntaxAux.unlog.js \ + HeapObj.unlog.js \ + Translate_syntax.js \ + JsCommon.unlog.js \ + JsCommonAux.unlog.js \ + JsPreliminary.unlog.js \ + JsInit.unlog.js \ + JsInterpreterMonads.unlog.js \ + JsInterpreter.log.js \ + ModuleExport.js +ASSEMBLY_JS := $(STDLIB_DIR)/stdlib.js $(addprefix $(JSREF_DIR)/,$(ASSEMBLY_JS_FILES)) + + +############################################################### + +DISPLAYED_FILES := \ + JsInterpreter.ml + +DISPLAYED := $(addprefix $(JSREF_DIR)/,$(DISPLAYED_FILES)) + +ALL_DISPLAYED := $(DISPLAYED:.ml=.unlog.js) $(DISPLAYED:.ml=.pseudo.js) $(DISPLAYED) + +ALL_LINEOF := $(DISPLAYED:.ml=.token.js) $(DISPLAYED:.ml=.mlloc.js) $(DISPLAYED:.ml=.ptoken.js) + +############################################################### +# Tools + +OCAMLDEP := ocamldep -one-line +OCAMLPAR := OCAMLRUNPARAM="l=200M" + +LINEOF_BIN := $(GENERATOR_DIR)/lineof.byte +LINEOF := $(OCAMLPAR) $(LINEOF_BIN) + +MLTOJS_BIN := $(GENERATOR_DIR)/main.byte +PPX_BIN := $(GENERATOR_DIR)/monad_ppx.native +MLTOJS := $(OCAMLPAR) $(MLTOJS_BIN) -ppx $(PPX_BIN) +# -dsource is automatically considered by main.byte + +ASSEMBLY_BIN := $(GENERATOR_DIR)/assembly.byte +ASSEMBLY := $(ASSEMBLY_BIN) + +DISPLAYGEN_BIN := $(GENERATOR_DIR)/displayed_sources.byte +DISPLAYGEN := $(OCAMLPAR) $(DISPLAYGEN_BIN) + +############################################################### +# Dependencies + +ifeq ($(filter clean%,$(MAKECMDGOALS)),) +include $(JSREF_DIR)/.depends +endif + + +############################################################### +# Rules + + + +##### Rule for dependencies + +$(JSREF_DIR)/.depends: $(JSREF_ML) + $(OCAMLDEP) -all -I $(<D) $(<D)/* > $@ + + +##### Rule for cmi +%.cmi: %.ml $(MLTOJS_BIN) + $(MLTOJS) -mode cmi -I $(<D) -I $(STDLIB_DIR) $< + +%.cmi: %.mli + ocamlc -I $(JSREF_DIR) -I $(STDLIB_DIR) -open Stdlib $< + +##### Rule for log/unlog/token + +%.log.js: %.ml %.cmi $(MLTOJS_BIN) + $(MLTOJS) -mode log -I $(<D) -I $(STDLIB_DIR) $< + +%.unlog.js: %.ml %.cmi $(MLTOJS_BIN) + $(MLTOJS) -mode unlog -I $(<D) -I $(STDLIB_DIR) $< + +%.token.js %.mlloc.js: %.ml %.cmi $(MLTOJS_BIN) + $(MLTOJS) -mode token -I $(<D) -I $(STDLIB_DIR) $< + +%.pseudo.js: %.ml %.cmi $(MLTOJS_BIN) + $(MLTOJS) -mode pseudo -I $(<D) -I $(STDLIB_DIR) $< + +%.ptoken.js: %.ml %.cmi $(MLTOJS_BIN) + $(MLTOJS) -mode ptoken -I $(<D) -I $(STDLIB_DIR) $< + +##### Rule for lineof.js + +$(JSREF_DIR)/lineof.js: $(ALL_LINEOF) $(LINEOF_BIN) + $(LINEOF) -o $@ $(ALL_LINEOF) + +##### Rule for assembly.js + +#--LATER (optional) add as dependencies the unlog files: $(JSREF_ML:.ml=.unlog.js) + +$(JSREF_DIR)/assembly.js: $(ASSEMBLY_JS) $(ASEMBLY_BIN) + $(ASSEMBLY) -o $@ $(ASSEMBLY_JS) +# -stdlib $(STDLIB_DIR)/stdlib.js + +##### Rule for displayed_sources.js + +$(JSREF_DIR)/displayed_sources.js: $(ALL_DISPLAYED) $(DISPLAYGEN_BIN) + $(DISPLAYGEN) -o $@ $(ALL_DISPLAYED) + + +##################################################################### +# Short targets + +all: assembly lineof display + +cmi: $(JSREF_ML:.ml=.cmi) $(JSREF_MLI:.mli=.cmi) + +gen: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.unlog.js) $(JSREF_ML:.ml=.token.js) + +ref: $(JSREF_DIR)/JsInterpreter.log.js $(JSREF_DIR)/JsInterpreter.unlog.js $(JSREF_DIR)/JsInterpreter.token.js + +pseudo: $(JSREF_DIR)/JsInterpreter.pseudo.js $(JSREF_DIR)/JsInterpreter.ptoken.js + +log: $(JSREF_ML:.ml=.log.js) $(JSREF_ML:.ml=.token.js) + +unlog: $(JSREF_ML:.ml=.unlog.js) + +lineof: $(JSREF_DIR)/lineof.js + +assembly: $(JSREF_DIR)/assembly.js + +display: $(JSREF_DIR)/displayed_sources.js + +############################################################### +# Global options + +.PHONY: all cmi gen ref pseudo log unlog lineof assembly display + +# Do not delete intermediate files. +.SECONDARY: + + +##################################################################### +# Clean + +DIRTY_EXTS := cmi,.mlloc.js,token.js,log.js,unlog.js,d,ml.d,mli.d,js.pre + +clean: + rm -f $(JSREF_DIR)/lineof.js + rm -f $(JSREF_DIR)/assembly.js + bash -c "rm -f $(JSREF_DIR)/*.{$(DIRTY_EXTS)}" + bash -c "rm -f $(JSREF_DIR)/.depends" diff --git a/generator/tests/jsref/ModuleExport.js b/jsref/ModuleExport.js similarity index 100% rename from generator/tests/jsref/ModuleExport.js rename to jsref/ModuleExport.js diff --git a/generator/tests/jsref/Shared.ml b/jsref/Shared.ml similarity index 100% rename from generator/tests/jsref/Shared.ml rename to jsref/Shared.ml diff --git a/generator/tests/jsref/StdMap.ml b/jsref/StdMap.ml similarity index 100% rename from generator/tests/jsref/StdMap.ml rename to jsref/StdMap.ml diff --git a/generator/tests/jsref/Translate_syntax.js b/jsref/Translate_syntax.js similarity index 100% rename from generator/tests/jsref/Translate_syntax.js rename to jsref/Translate_syntax.js diff --git a/generator/tests/jsref/Translate_syntax.mli b/jsref/Translate_syntax.mli similarity index 100% rename from generator/tests/jsref/Translate_syntax.mli rename to jsref/Translate_syntax.mli diff --git a/generator/opam b/opam similarity index 100% rename from generator/opam rename to opam diff --git a/deprecated/convert-ml-strings.pl b/tools/convert-ml-strings.pl similarity index 100% rename from deprecated/convert-ml-strings.pl rename to tools/convert-ml-strings.pl diff --git a/generator/tests/jsref/convert_monads_to_ppx.php b/tools/convert_monads_to_ppx.php similarity index 100% rename from generator/tests/jsref/convert_monads_to_ppx.php rename to tools/convert_monads_to_ppx.php diff --git a/deprecated/ml-add-cstr-annots.pl b/tools/ml-add-cstr-annots.pl similarity index 100% rename from deprecated/ml-add-cstr-annots.pl rename to tools/ml-add-cstr-annots.pl