-
Notifications
You must be signed in to change notification settings - Fork 185
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Compiler: refactor control flow compilation #1496
Conversation
@pmwhite, this PR changes how we translate control flow to javascript. It can affect compilation time, size of generated files, and runtime performance. Let me know if you have time to test this and report positive and negative impact. |
@vouillon, I think the diff is ready for review, commit history is not and will be squashed. |
@hhugo I should have time to test this out this week, hopefully tomorrow. |
@vouillon , this is ready for another round of review |
@vouillon, I've cleaned up the commit history. |
This looks good to me. |
Sorry, I have not gotten to testing this yet. I will let you know the results when I do. |
CHANGES: ## Features/Changes * Compiler: global dead code elimination (Micah Cantor, ocsigen/js_of_ocaml#1503) * Compiler: change control-flow compilation strategy (ocsigen/js_of_ocaml#1496) * Compiler: loop no longer absorb the whole continuation * Compiler: Dead code elimination of unused references (ocsigen/js_of_ocaml#2076) * Compiler: reduce memory consumption (ocsigen/js_of_ocaml#1516) * Compiler: support for import and export construct in the js parser/printer * Lib: add download attribute to anchor element * Misc: switch CI to OCaml 5.1 * Misc: preliminary support for OCaml 5.2 * Misc: support for OCaml 5.1.1 ## Bug fixes * Runtime: fix Dom_html.onIE (ocsigen/js_of_ocaml#1493) * Runtime: add conversion functions + strict equality for compatibility with Wasm_of_ocaml (ocsigen/js_of_ocaml#1492) * Runtime: Dynlink should be able to find symbols in jsoo_runtime ocsigen/js_of_ocaml#1517 * Runtime: fix Unix.lstat, Unix.LargeFile.lstat (ocsigen/js_of_ocaml#1519) * Compiler: fix global flow analysis (ocsigen/js_of_ocaml#1494) * Compiler: fix js parser/printer wrt async functions (ocsigen/js_of_ocaml#1515) * Compiler: fix free variables pass wrt parameters' default value (ocsigen/js_of_ocaml#1521) * Compiler: fix free variables for classes * Compiler: fix internal invariant (continuation) * Compiler: fix variable renaming for let, const and classes * Lib: Url.Current.set_fragment need not any urlencode (ocsigen/js_of_ocaml#1497)
CHANGES: ## Features/Changes * Compiler: global dead code elimination (Micah Cantor, ocsigen/js_of_ocaml#1503) * Compiler: change control-flow compilation strategy (ocsigen/js_of_ocaml#1496) * Compiler: loop no longer absorb the whole continuation * Compiler: Dead code elimination of unused references (ocsigen/js_of_ocaml#2076) * Compiler: reduce memory consumption (ocsigen/js_of_ocaml#1516) * Compiler: support for import and export construct in the js parser/printer * Lib: add download attribute to anchor element * Misc: switch CI to OCaml 5.1 * Misc: preliminary support for OCaml 5.2 * Misc: support for OCaml 5.1.1 ## Bug fixes * Runtime: fix Dom_html.onIE (ocsigen/js_of_ocaml#1493) * Runtime: add conversion functions + strict equality for compatibility with Wasm_of_ocaml (ocsigen/js_of_ocaml#1492) * Runtime: Dynlink should be able to find symbols in jsoo_runtime ocsigen/js_of_ocaml#1517 * Runtime: fix Unix.lstat, Unix.LargeFile.lstat (ocsigen/js_of_ocaml#1519) * Compiler: fix global flow analysis (ocsigen/js_of_ocaml#1494) * Compiler: fix js parser/printer wrt async functions (ocsigen/js_of_ocaml#1515) * Compiler: fix free variables pass wrt parameters' default value (ocsigen/js_of_ocaml#1521) * Compiler: fix free variables for classes * Compiler: fix internal invariant (continuation) * Compiler: fix variable renaming for let, const and classes * Lib: Url.Current.set_fragment need not any urlencode (ocsigen/js_of_ocaml#1497)
CHANGES: ## Features/Changes * Compiler: global dead code elimination (Micah Cantor, ocsigen/js_of_ocaml#1503) * Compiler: change control-flow compilation strategy (ocsigen/js_of_ocaml#1496) * Compiler: loop no longer absorb the whole continuation * Compiler: Dead code elimination of unused references (ocsigen/js_of_ocaml#2076) * Compiler: reduce memory consumption (ocsigen/js_of_ocaml#1516) * Compiler: support for import and export construct in the js parser/printer * Lib: add download attribute to anchor element * Misc: switch CI to OCaml 5.1 * Misc: preliminary support for OCaml 5.2 * Misc: support for OCaml 5.1.1 ## Bug fixes * Runtime: fix Dom_html.onIE (ocsigen/js_of_ocaml#1493) * Runtime: add conversion functions + strict equality for compatibility with Wasm_of_ocaml (ocsigen/js_of_ocaml#1492) * Runtime: Dynlink should be able to find symbols in jsoo_runtime ocsigen/js_of_ocaml#1517 * Runtime: fix Unix.lstat, Unix.LargeFile.lstat (ocsigen/js_of_ocaml#1519) * Compiler: fix global flow analysis (ocsigen/js_of_ocaml#1494) * Compiler: fix js parser/printer wrt async functions (ocsigen/js_of_ocaml#1515) * Compiler: fix free variables pass wrt parameters' default value (ocsigen/js_of_ocaml#1521) * Compiler: fix free variables for classes * Compiler: fix internal invariant (continuation) * Compiler: fix variable renaming for let, const and classes * Lib: Url.Current.set_fragment need not any urlencode (ocsigen/js_of_ocaml#1497)
Instead of using additional variables, use labelled and break statements.
Fix #1336
This PR includes a copy of wa_structture.ml from wasm_of_ocaml.
This PR just a proof of concept for now.cc @vouillon