-
Notifications
You must be signed in to change notification settings - Fork 86
Syntactic function arity parsing #1548
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
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Instead of accumulating lots and lots of comments in a complete review, I've decided it's best just to send comments every day they accumulate. More to come. (Note to self: stopped in Parser.all_params_as_newtypes
.)
6019992
to
0da42d5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few comments to handle, but looks pretty good. Sorry for how long this has taken to get reviewed!
ocaml/testsuite/tests/parsetree/locations_test.compilers.reference
Outdated
Show resolved
Hide resolved
621ce65
to
a54afd6
Compare
Just now, I unintentionally pushed to the wrong remote, so my latest force-push backs that out. I haven't responded to the new comments yet. |
b33f202
to
ef43e30
Compare
I just pushed a change to use a less attribute-heavy encoding. Now, a function has at most 3 Jane Syntax attributes, but usually only 1:
The less-attribute-heavy encoding was a secondary goal. The primary goal was to avoid putting any attributes on the function body itself and instead keep them on the |
11f8475
to
142e7fb
Compare
0e99021
to
1d607b0
Compare
TL;DR: The rebase was messy, and the commit history is much less useful as a result. I recommend just reviewing the overall diff. The rebase is messy because #1417 introduced the need to support things like: let f x y (type a : immediate) z = ... We need to embed this information in the n-ary functions encoding, as the In other words, most of the early commits no longer even compile, let alone work. Here is a brief summary of the changes I made in order to support
|
b6ffdf3
to
9b69428
Compare
The most recent pair of commits transplants a commit from upstream that embeds the parameter location in the parsetree. This isn't strictly needed for this PR, but it will simplify the next PR. |
I ran a test against the stdlib and observed that the produced typedtree is unchanged, with one exception: the location of a function is now marked as ghost in the typedtree for constructions like |
13c79a8
to
3d593ce
Compare
OK. It sounds like this is ready for re-review from me, given the rebase on top of #1417. Is that correct? |
Yes, this is now ready for re-review from you. |
3d593ce
to
6d7012f
Compare
ocaml/testsuite/tests/formatting/test_locations.dlocations.ocamlc.reference
Show resolved
Hide resolved
b39ede9
to
bfd2776
Compare
My latest rebase is on top of the Uniqueness PR, which does affect n-ary lambdas because of constructs like |
This is all good from my point of view. Thanks! |
bfd2776
to
f36dc92
Compare
The last rebase resolves some trivial conflicts with #1761. I'll go ahead and merge this after some internal testing finishes. |
* Parsing with dummy typechecking * Add ast invariants * Add a [@param] attribute on every intervening function * This is so that a node without any Jane Syntax attribute can be seen as concluding an n-ary function. * minimize diff * N_ary_functions should be plural for consistency * support ocamlprof * Respond to review comments * Improve some comments according to review * Adjust comments/names and give BNF * Add comment suggested in review * refactor `all_params_as_newtypes` * `make promote-menhir` and fix typo * Return unconsumed attributes rather than using expr as a stand-in for attributes plus location * Rework approach to use less attribute-heavy encoding * alert to nudge people to use Jane Syntax * Hack to be more lenient toward ppxes * Add comments from review * Fix issues from rebase
* Clarify a comment * Minimize diff * Remove ast-invariants check, for now * Add pparam_loc and pparam_desc for merlin's sake, consistent with upstream * minimize diff in parsetree with main * Make code more backward-compatible with existing ppxes * Move module in response to review comment * Two small backward-compatibility fixes - Don't use loc_stack for tracking location of parameters; this breaks some tests. Instead, do a hacky, best-effort thing that doesn't work all the time but is good enough for merlin. - Omit an unneeded extra space.
f36dc92
to
f3038b2
Compare
* Add some locals tests * Make Jane Syntax treat attributes as inner-to-outer * Implementation * Parsing with dummy typechecking * Add ast invariants * Add a [@param] attribute on every intervening function * This is so that a node without any Jane Syntax attribute can be seen as concluding an n-ary function. * minimize diff * N_ary_functions should be plural for consistency * support ocamlprof * Respond to review comments * Improve some comments according to review * Adjust comments/names and give BNF * Add comment suggested in review * refactor `all_params_as_newtypes` * `make promote-menhir` and fix typo * Return unconsumed attributes rather than using expr as a stand-in for attributes plus location * Rework approach to use less attribute-heavy encoding * alert to nudge people to use Jane Syntax * Hack to be more lenient toward ppxes * Add comments from review * Fix issues from rebase * Respond to review * Clarify a comment * Minimize diff * Remove ast-invariants check, for now * Add pparam_loc and pparam_desc for merlin's sake, consistent with upstream * minimize diff in parsetree with main * Make code more backward-compatible with existing ppxes * Move module in response to review comment * Two small backward-compatibility fixes - Don't use loc_stack for tracking location of parameters; this breaks some tests. Instead, do a hacky, best-effort thing that doesn't work all the time but is good enough for merlin. - Omit an unneeded extra space.
df70400 flambda-backend: Fix interface differences in Printtyp (#1918) e7b5ebf flambda-backend: Fix breaking of tail recursion in classic mode (#1915) cbb72d8 flambda-backend: Improve debuginfo for for-loops (and conditionals) (#1870) 19133b6 flambda-backend: Replace thread save/restore API with switch (#1869) 882b067 flambda-backend: Add test showing how `max_arity` affects function splitting (#1904) f1f7da4 flambda-backend: Abbreviate module types when printing error messages (#1895) e4566dd flambda-backend: Add four missing attributes to the `builtin_attrs` table. (#1898) 4bb4c70 flambda-backend: Undo sort changes during snapshot backtrack (#1885) 87c857a flambda-backend: Add a missing check for jane syntax (#1891) 070d57f flambda-backend: Remove mode from Texp_send (#1893) 7d9ef46 flambda-backend: Remove Jkind.of_sort (#1890) 5ad9591 flambda-backend: ocamlformat in Jane-Street only files in typing (#1881) 5e50edf flambda-backend: Remove var_constraint (#1880) b1962fa flambda-backend: Rename "layout" to "jkind" (#1875) f74b090 flambda-backend: Rename layouts.ml to jkind.ml (#1886) cf32778 flambda-backend: Enable ocamlformat for Jane Syntax / language extensions code (#1876) 20b32a0 flambda-backend: Better error when using a float64 library without extension (#1859) 64e883d flambda-backend: Add hint for `#float` (#1864) ab42aac flambda-backend: Port upstream #12368 about abstract environments (#1759) bbc5173 flambda-backend: Support for unboxed products in the middle-end and backend (#1433) 6149a5f flambda-backend: Simplify integer comparisons that use "compare" (#1851) a05adce flambda-backend: Ask user to add `exclave_` instead of `local_` (#1853) cdd7f6a flambda-backend: Bump magic numbers for 4.14.1-19 96ec26a flambda-backend: Manually applied changes from PR #11782 (#1732) ea484d0 flambda-backend: Zero alloc annotation: assume a function never returns normally (#1831) 387893c flambda-backend: All-`float#` records (#1769) c3f9983 flambda-backend: Expose `Pprintast.tyvar` (#1848) 3782152 flambda-backend: Don't allocate a closure unnecessarily (#1836) a8f6aae flambda-backend: Fix bug in `Clambda_primitives.result_layout`. (#1833) 4b2a6f6 flambda-backend: Add dune target for `dumpobj` (#1773) 2089ec0 flambda-backend: tmc: Remove close-on-apply flag when producing a call in non-tail position (#1827) 9f304d8 flambda-backend: Adjust the location on `as` pattern vars for better errors/warnings (#1835) b9cf106 flambda-backend: Zero alloc: assume that works with inlining - propagate via Scoped_location (#1762) 263fa26 flambda-backend: Make -extension immutable_arrays on by default (#1829) 9cca7d2 flambda-backend: Support mode crossing at identifiers (#1811) 7942fed flambda-backend: Finish moving `any` to `layouts_beta` (#1821) 44cd2fc flambda-backend: Fix uncaught Unify exception in filter_arrow (#1820) 3552db6 flambda-backend: Factor out duplicated code in `cmm_helpers` (#1822) caf938f flambda-backend: Fix AFL test in flambda2 (#1824) ddd765a flambda-backend: Move `float64` to `layouts_beta` (#1812) 3b579d7 flambda-backend: Fixed ISO C99 warning introduced in #1705 (#1787) df927f0 flambda-backend: Add a test for an interaction between omitted mli and overeager heap allocation of argument (#1816) 92ddf14 flambda-backend: Fix incorrect sort assumption in lambda for `bop_exp`s in letops (#1793) 1a91f16 flambda-backend: Merging of Debuginfo.t across CSEd occurrences (#1767) f7cd48f flambda-backend: Backport #10364 (#1788) 5740ebd flambda-backend: Enable warnings-as-errors (#1796) 374a2fb flambda-backend: Build Jane Syntax with upstream OCaml in CI (#1780) 1d6471f flambda-backend: A more consistent first-to-last order for `-w53` (unused attributes) (#1658) 6210ee4 flambda-backend: Make sure the Jane syntax extensions don't depend on our compiler changes (#1777) 963bfbc flambda-backend: Add [Obj.uniquely_reachable_words] (#1705) 4cd24bd flambda-backend: mode crossing of LHS of arrow types by coercing (#1701) 910914d flambda-backend: `Pprintast` prints Jane syntax unconditionally (#1770) 46dad5b flambda-backend: Regulate access to [Language_extension] from within Jane Syntax (#1768) a0f8d0c flambda-backend: Lazy strengthening (#1337) 85b5c54 flambda-backend: Small improvement to layout inference for mutually recursive type decl parameters (#1766) 0c57382 flambda-backend: Syntactic function arity parsing (#1548) e8edd13 flambda-backend: Fix modes annotation ghost location (#1761) a669c00 flambda-backend: Refactor Debuginfo.t (#1724) 91ab70a flambda-backend: Basic uniqueness extension (#1552) 5be3cb8 flambda-backend: add the `%get_header` primitive (#1539) 0006b3e flambda-backend: Fix arrow printing when closing over unknown mode (#1744) 226d6ac flambda-backend: Add some checks that the minor GC does not recurse (#1743) f3e7c0a flambda-backend: Bump magic numbers for 4.14.1-18 30cbf0a flambda-backend: Add `Jane_syntax` `Pprintast` tests (#1727) 1269571 flambda-backend: Expose a couple more functions from `Pprintast` (#1731) 159adbe flambda-backend: Propagate the label names of optional parameters (#1723) 4f70f0b flambda-backend: Further refine our debugging infrastructure (#1650) a440f6d flambda-backend: Add mode to `int_as_pointer` (#1648) 0cc5356 flambda-backend: Update `jane-street-merlin-setup.sh` for this repo (#1663) 71879dc flambda-backend: Add code path to read .cmi without adding to environment (#1674) 5394352 flambda-backend: Only substitute once in `Env.read_sign_of_cmi` (#1670) 2a7f015 flambda-backend: Pass `-f` when `rm`ing file during install (#1700) ddaf752 flambda-backend: Set location on topmost Jane Syntax attribute (#1696) 5205836 flambda-backend: Support layout annotations (#1417) 455887f flambda-backend: Simplifications following PR #1667 (#1668) 6c0a9e8 flambda-backend: Don't add a module to the environment when saving it (#1667) 562eb7b flambda-backend: Flambda 2 changes for DWARF variables (#1678) f1352ed flambda-backend: Add modes on parameters and a framework for attributes on them (#1257) 3d23db5 flambda-backend: 128-bit vector primitive types (#1568) 06a3bdc flambda-backend: Bump magic numbers for 4.14.1-16 (#1657) 37c5ea0 flambda-backend: Remove/comment new uses of `not_expecting` in the parser (#1517) 8bbe82d flambda-backend: Float_u stdlib module (#1572) f4075a4 flambda-backend: Add a `float64` layout and `float#` type. (#1528) 43f02af flambda-backend: Test fix in #1457 (#1458) c896a97 flambda-backend: Swap simd flag to language extension (#1569) e6c44d4 flambda-backend: mkuplus and mkuminus must preserve attributes (#1575) 906cfc5 flambda-backend: Make environment lazy in preparation for simd extension (#1570) a222bfc flambda-backend: pattern match local iarray gives local elements(#1574) d3c1413 flambda-backend: 128-bit SIMD vector primitive type (#1499) bcc0a09 flambda-backend: exclave_ implies strictly local (#1554) e3deedb flambda-backend: Factor out kernel of `Language_extension` used by Jane Syntax (#1509) eea5150 flambda-backend: Fix incorrect sort in transl (#1547) d2b44d8 flambda-backend: A + sign usually means Positive (#1536) d1644f9 flambda-backend: Restore #1455: Communicate layouts to middle end (#1511) 5e6524d flambda-backend: Tail-calling local-returning functions should make the current function local-returning as well (#1498) fa71f6b flambda-backend: Increase local stack limit (#1513) c1eecf6 flambda-backend: Generalize `deep_occur` to `deep_occur_list` (#1503) 1a17a8b flambda-backend: Bump magic numbers for 4.14.1-15 a3d1953 flambda-backend: Fix Translcore to look for allocations in exclaves (#1495) 0ea8b04 flambda-backend: Revert "Communicate frontend layouts to lambda" (#1507) 383e158 flambda-backend: Disable `sockets.ml` on macOS (#1505) 3b73a8d flambda-backend: Communicate frontend layouts to lambda (#1455) f94a067 flambda-backend: Allow `make debug` with dune-based build (#1480) 1880d42 flambda-backend: Disable `beat.ml` on macOS (#1496) 4b2e620 flambda-backend: Check that layout variables aren't unconstrained when writing `cmi`s (#1474) 284889c flambda-backend: Add flambda2 -O3 and -Oclassic CI jobs, third attempt (#1493) ef161b9 flambda-backend: Prepare translation of primitives in lambda_to_flambda for unboxed products (#1465) bc1d15a flambda-backend: Remove ast_desc and ast_info from jane-syntax (#1488) be57ed6 flambda-backend: Local immutable arrays (#1420) 3a5d06a flambda-backend: Unboxed literal jane syntax (#1487) cc61a3a flambda-backend: Ensure that all [val]s are [value]s. (#1481) aba14c2 flambda-backend: Check for value in polymorphic variant argument (#1482) 0a20dfb flambda-backend: Jane-syntax support for extension constructors (#1479) 697519a flambda-backend: Remove `nonlocal_` modality (#1452) 0bf6a17 flambda-backend: Use exported modules in Jane_syntax_parsing (#1477) aa6d00f flambda-backend: Flambda1: Simplify `Region (Exclave e)` to `e` (#1473) e472be0 flambda-backend: Remove the `type float# = float` hack (#1478) ebe702d flambda-backend: Fix a typo in language extension parsing/serializing (#1456) 40f0e8c flambda-backend: Lex unboxed float and int literals as single lexemes (#1469) 22f170a flambda-backend: Unboxed float type parsing in `layouts_alpha` (#1467) 740de2a flambda-backend: Revert "Add flambda2 -Oclassic and -O3 CI jobs" (#1462) 6ec73ed flambda-backend: Zero alloc remove annotation from stdlib (#1434) f416497 flambda-backend: Don't pass (unnecessary?) -L flags to `gcc -shared` from opttoplevel (#1363) 416a714 flambda-backend: sync dynlink/dune compiler flags (#1461) d3e555f flambda-backend: Add flambda2 -Oclassic and -O3 CI jobs (#1459) e5eca61 flambda-backend: Add documentation for testing targets to HACKING docs (#1436) f1835c4 flambda-backend: New extensions API, supporting maturity levels (#1454) 1deb5af flambda-backend: Add Make/Dune target for debug printers (#1289) 324f32e flambda-backend: Bugfix for application mode crossing (#1451) 7ac42ab flambda-backend: Don't substitute into exclaves in `simplif.ml` (#1448) a03de20 flambda-backend: Parse unboxed literals, treating them as boxed (#1437) 5283047 flambda-backend: support native `exclave_` syntax (#1338) a1fe4cf flambda-backend: Default layout variables in gadt constructors (#1424) f4c96ff flambda-backend: Fix programmatically enabling and disabling the same layouts extension (#1446) cc58003 flambda-backend: Erasability namespace for Jane Syntax attributes/extensions (#1421) ae9099a flambda-backend: Use layout histories to produce better errors (#1340) 385ada9 flambda-backend: Fix swapgil test C warnings (#1430) ff9a0d1 flambda-backend: Bugfix for caml_switch_runtime_locking_scheme (#1429) df41dae flambda-backend: Remove layout variables from [val]s (#1423) 2e1a05a flambda-backend: Bugfix for GC backlog tracking (#1387) 8bc3fd7 flambda-backend: Allow more function argument / returns to be non-value (#1422) f2a5b93 flambda-backend: Convert Jane Syntax to use attributes for many syntactic categories (#1412) 1e2d5c5 flambda-backend: zero alloc: warning 198 about assume (#1409) 9270fee flambda-backend: Allow non-value function args and returns (#1405) 5319dfe flambda-backend: Bump magic numbers for 4.14.1-13 31fb926 flambda-backend: Fix issue with layout any and Tstr_eval in the native toplevel (#1402) dff4346 flambda-backend: Extend caml_locking_scheme with callbacks for thread start/stop (#1411) 674a335 flambda-backend: Introduce an API to swap the runtime lock for a different lock. (#1365) 1ce68db flambda-backend: Modular syntax for types (#1401) 9f55ade flambda-backend: Missing changes around the renaming to "Jane syntax" (#1400) cf8eaa8 flambda-backend: Move `include functor` over to the modular extensions machinery (#1377) da4e02d flambda-backend: Statically enabled probes (#1388) 093e638 flambda-backend: Bump magic numbers for 4.14.1-12 e7e0bf1 flambda-backend: Move layout from Type_abstract to type_declaration (#1384) 9c53ca7 flambda-backend: Rename `tests/jst-modular-extensions` to `tests/jane-modular-syntax` (#1397) 6881566 flambda-backend: Rename "modular extensions" to "Jane syntax"/"modular syntax" (#1395) bfec906 flambda-backend: Add autocompletion for test-one/promote-one (#1393) 9fc4aac flambda-backend: Fix a bug that -no-rebuild introduced in test-one (#1394) 301b683 flambda-backend: Add -no-rebuild options for test-one and promote-one (#1391) 1e090ac flambda-backend: zero alloc check: ignore functors and entry functions (#1370) 9d3b5a1 flambda-backend: Provide an AST-like view of modular extension extension node names (#1362) 7a92219 flambda-backend: Ltail for lambda and use in dissect_letrec (#1313) 7a7e639 flambda-backend: Add emacs hacking commands (#1372) 8dd6eae flambda-backend: Remove closure from Array.for_all (#1354) a4c4d03 flambda-backend: Fix ghost locations for modular extensions (#1348) ca5a008 flambda-backend: Bump magic numbers for 4.14.1-10 (#1360) a24d2ec flambda-backend: Inline a variable to save 2%+ in allocations (#1353) 96f8f00 flambda-backend: Probe name too long: warning instead of error (#1352) cd34685 flambda-backend: Typedtree module unpacks: Incorporate upstream feedback (#1288) c0482d3 flambda-backend: Add dedicated printline-debugging support (#1308) 7b295b0 flambda-backend: Fix try region closure for "match with exception" under Flambda 2 (#1339) db6552a flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 132f8ba flambda-backend: Revert ocaml/driver/ changes that are duplicative 3d7f37f flambda-backend: Merge ocaml-jst 4646c2e flambda-backend: Merge ocaml-jst e62f2b1 flambda-backend: Bump magic numbers for 4.14.1-8 f617a06 flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 79f91e9 flambda-backend: Revert ocaml/driver/ changes that are duplicative git-subtree-dir: ocaml git-subtree-split: df70400
7da89ee flambda-backend: Error message: add hint for unboxed types (#1960) 559870d flambda-backend: More precise layout for array patterns (#1968) 097204a flambda-backend: Fix boolean functions tail call position bug (#1957) 8bd0b80 flambda-backend: Fix result layout of combined applications (#1963) 91d3de7 flambda-backend: Change error message for non-value class lets (#1953) 27e58ec flambda-backend: Handle empty cases (fixes bug from #1899) (#1955) aafeeda flambda-backend: Zero alloc: add payload "opt" and "-zero-alloc-check {default|all|none|opt}" flag (#1936) e65faae flambda-backend: Make `assert false` behave as local_ or not, depending on what's better (+ 2 bugfixes) (#1899) 0706cec flambda-backend: Install simd.h with other runtime headers (#1935) 82364c9 flambda-backend: Allow parameter modes to be relaxed in type_argument (#1756) cb9fa49 flambda-backend: Add missing iarrayLabels module from stdlib dune file (#1930) 40ddf54 flambda-backend: Runtime helpers for 128-bit vectors (#1897) a336b70 flambda-backend: Update magic numbers for 4.14.1-22 (and add tools/bump_magic_numbers.sh) a1239f0 flambda-backend: 128-bit Array Load/Store (#1682) c3297fc flambda-backend: Fix uncaught exception for non-representable type statements (#1928) 65af444 flambda-backend: Add `Is_stack` for C-stub (#1914) df70400 flambda-backend: Fix interface differences in Printtyp (#1918) e7b5ebf flambda-backend: Fix breaking of tail recursion in classic mode (#1915) cbb72d8 flambda-backend: Improve debuginfo for for-loops (and conditionals) (#1870) 19133b6 flambda-backend: Replace thread save/restore API with switch (#1869) 882b067 flambda-backend: Add test showing how `max_arity` affects function splitting (#1904) f1f7da4 flambda-backend: Abbreviate module types when printing error messages (#1895) e4566dd flambda-backend: Add four missing attributes to the `builtin_attrs` table. (#1898) 4bb4c70 flambda-backend: Undo sort changes during snapshot backtrack (#1885) 87c857a flambda-backend: Add a missing check for jane syntax (#1891) 070d57f flambda-backend: Remove mode from Texp_send (#1893) 7d9ef46 flambda-backend: Remove Jkind.of_sort (#1890) 5ad9591 flambda-backend: ocamlformat in Jane-Street only files in typing (#1881) 5e50edf flambda-backend: Remove var_constraint (#1880) b1962fa flambda-backend: Rename "layout" to "jkind" (#1875) f74b090 flambda-backend: Rename layouts.ml to jkind.ml (#1886) cf32778 flambda-backend: Enable ocamlformat for Jane Syntax / language extensions code (#1876) 20b32a0 flambda-backend: Better error when using a float64 library without extension (#1859) 64e883d flambda-backend: Add hint for `#float` (#1864) ab42aac flambda-backend: Port upstream #12368 about abstract environments (#1759) bbc5173 flambda-backend: Support for unboxed products in the middle-end and backend (#1433) 6149a5f flambda-backend: Simplify integer comparisons that use "compare" (#1851) a05adce flambda-backend: Ask user to add `exclave_` instead of `local_` (#1853) cdd7f6a flambda-backend: Bump magic numbers for 4.14.1-19 96ec26a flambda-backend: Manually applied changes from PR #11782 (#1732) ea484d0 flambda-backend: Zero alloc annotation: assume a function never returns normally (#1831) 387893c flambda-backend: All-`float#` records (#1769) c3f9983 flambda-backend: Expose `Pprintast.tyvar` (#1848) 3782152 flambda-backend: Don't allocate a closure unnecessarily (#1836) a8f6aae flambda-backend: Fix bug in `Clambda_primitives.result_layout`. (#1833) 4b2a6f6 flambda-backend: Add dune target for `dumpobj` (#1773) 2089ec0 flambda-backend: tmc: Remove close-on-apply flag when producing a call in non-tail position (#1827) 9f304d8 flambda-backend: Adjust the location on `as` pattern vars for better errors/warnings (#1835) b9cf106 flambda-backend: Zero alloc: assume that works with inlining - propagate via Scoped_location (#1762) 263fa26 flambda-backend: Make -extension immutable_arrays on by default (#1829) 9cca7d2 flambda-backend: Support mode crossing at identifiers (#1811) 7942fed flambda-backend: Finish moving `any` to `layouts_beta` (#1821) 44cd2fc flambda-backend: Fix uncaught Unify exception in filter_arrow (#1820) 3552db6 flambda-backend: Factor out duplicated code in `cmm_helpers` (#1822) caf938f flambda-backend: Fix AFL test in flambda2 (#1824) ddd765a flambda-backend: Move `float64` to `layouts_beta` (#1812) 3b579d7 flambda-backend: Fixed ISO C99 warning introduced in #1705 (#1787) df927f0 flambda-backend: Add a test for an interaction between omitted mli and overeager heap allocation of argument (#1816) 92ddf14 flambda-backend: Fix incorrect sort assumption in lambda for `bop_exp`s in letops (#1793) 1a91f16 flambda-backend: Merging of Debuginfo.t across CSEd occurrences (#1767) f7cd48f flambda-backend: Backport #10364 (#1788) 5740ebd flambda-backend: Enable warnings-as-errors (#1796) 374a2fb flambda-backend: Build Jane Syntax with upstream OCaml in CI (#1780) 1d6471f flambda-backend: A more consistent first-to-last order for `-w53` (unused attributes) (#1658) 6210ee4 flambda-backend: Make sure the Jane syntax extensions don't depend on our compiler changes (#1777) 963bfbc flambda-backend: Add [Obj.uniquely_reachable_words] (#1705) 4cd24bd flambda-backend: mode crossing of LHS of arrow types by coercing (#1701) 910914d flambda-backend: `Pprintast` prints Jane syntax unconditionally (#1770) 46dad5b flambda-backend: Regulate access to [Language_extension] from within Jane Syntax (#1768) a0f8d0c flambda-backend: Lazy strengthening (#1337) 85b5c54 flambda-backend: Small improvement to layout inference for mutually recursive type decl parameters (#1766) 0c57382 flambda-backend: Syntactic function arity parsing (#1548) e8edd13 flambda-backend: Fix modes annotation ghost location (#1761) a669c00 flambda-backend: Refactor Debuginfo.t (#1724) 91ab70a flambda-backend: Basic uniqueness extension (#1552) 5be3cb8 flambda-backend: add the `%get_header` primitive (#1539) 0006b3e flambda-backend: Fix arrow printing when closing over unknown mode (#1744) 226d6ac flambda-backend: Add some checks that the minor GC does not recurse (#1743) f3e7c0a flambda-backend: Bump magic numbers for 4.14.1-18 30cbf0a flambda-backend: Add `Jane_syntax` `Pprintast` tests (#1727) 1269571 flambda-backend: Expose a couple more functions from `Pprintast` (#1731) 159adbe flambda-backend: Propagate the label names of optional parameters (#1723) 4f70f0b flambda-backend: Further refine our debugging infrastructure (#1650) a440f6d flambda-backend: Add mode to `int_as_pointer` (#1648) 0cc5356 flambda-backend: Update `jane-street-merlin-setup.sh` for this repo (#1663) 71879dc flambda-backend: Add code path to read .cmi without adding to environment (#1674) 5394352 flambda-backend: Only substitute once in `Env.read_sign_of_cmi` (#1670) 2a7f015 flambda-backend: Pass `-f` when `rm`ing file during install (#1700) ddaf752 flambda-backend: Set location on topmost Jane Syntax attribute (#1696) 5205836 flambda-backend: Support layout annotations (#1417) 455887f flambda-backend: Simplifications following PR #1667 (#1668) 6c0a9e8 flambda-backend: Don't add a module to the environment when saving it (#1667) 562eb7b flambda-backend: Flambda 2 changes for DWARF variables (#1678) f1352ed flambda-backend: Add modes on parameters and a framework for attributes on them (#1257) 3d23db5 flambda-backend: 128-bit vector primitive types (#1568) 06a3bdc flambda-backend: Bump magic numbers for 4.14.1-16 (#1657) 37c5ea0 flambda-backend: Remove/comment new uses of `not_expecting` in the parser (#1517) 8bbe82d flambda-backend: Float_u stdlib module (#1572) f4075a4 flambda-backend: Add a `float64` layout and `float#` type. (#1528) 43f02af flambda-backend: Test fix in #1457 (#1458) c896a97 flambda-backend: Swap simd flag to language extension (#1569) e6c44d4 flambda-backend: mkuplus and mkuminus must preserve attributes (#1575) 906cfc5 flambda-backend: Make environment lazy in preparation for simd extension (#1570) a222bfc flambda-backend: pattern match local iarray gives local elements(#1574) d3c1413 flambda-backend: 128-bit SIMD vector primitive type (#1499) bcc0a09 flambda-backend: exclave_ implies strictly local (#1554) e3deedb flambda-backend: Factor out kernel of `Language_extension` used by Jane Syntax (#1509) eea5150 flambda-backend: Fix incorrect sort in transl (#1547) d2b44d8 flambda-backend: A + sign usually means Positive (#1536) d1644f9 flambda-backend: Restore #1455: Communicate layouts to middle end (#1511) 5e6524d flambda-backend: Tail-calling local-returning functions should make the current function local-returning as well (#1498) fa71f6b flambda-backend: Increase local stack limit (#1513) c1eecf6 flambda-backend: Generalize `deep_occur` to `deep_occur_list` (#1503) 1a17a8b flambda-backend: Bump magic numbers for 4.14.1-15 a3d1953 flambda-backend: Fix Translcore to look for allocations in exclaves (#1495) 0ea8b04 flambda-backend: Revert "Communicate frontend layouts to lambda" (#1507) 383e158 flambda-backend: Disable `sockets.ml` on macOS (#1505) 3b73a8d flambda-backend: Communicate frontend layouts to lambda (#1455) f94a067 flambda-backend: Allow `make debug` with dune-based build (#1480) 1880d42 flambda-backend: Disable `beat.ml` on macOS (#1496) 4b2e620 flambda-backend: Check that layout variables aren't unconstrained when writing `cmi`s (#1474) 284889c flambda-backend: Add flambda2 -O3 and -Oclassic CI jobs, third attempt (#1493) ef161b9 flambda-backend: Prepare translation of primitives in lambda_to_flambda for unboxed products (#1465) bc1d15a flambda-backend: Remove ast_desc and ast_info from jane-syntax (#1488) be57ed6 flambda-backend: Local immutable arrays (#1420) 3a5d06a flambda-backend: Unboxed literal jane syntax (#1487) cc61a3a flambda-backend: Ensure that all [val]s are [value]s. (#1481) aba14c2 flambda-backend: Check for value in polymorphic variant argument (#1482) 0a20dfb flambda-backend: Jane-syntax support for extension constructors (#1479) 697519a flambda-backend: Remove `nonlocal_` modality (#1452) 0bf6a17 flambda-backend: Use exported modules in Jane_syntax_parsing (#1477) aa6d00f flambda-backend: Flambda1: Simplify `Region (Exclave e)` to `e` (#1473) e472be0 flambda-backend: Remove the `type float# = float` hack (#1478) ebe702d flambda-backend: Fix a typo in language extension parsing/serializing (#1456) 40f0e8c flambda-backend: Lex unboxed float and int literals as single lexemes (#1469) 22f170a flambda-backend: Unboxed float type parsing in `layouts_alpha` (#1467) 740de2a flambda-backend: Revert "Add flambda2 -Oclassic and -O3 CI jobs" (#1462) 6ec73ed flambda-backend: Zero alloc remove annotation from stdlib (#1434) f416497 flambda-backend: Don't pass (unnecessary?) -L flags to `gcc -shared` from opttoplevel (#1363) 416a714 flambda-backend: sync dynlink/dune compiler flags (#1461) d3e555f flambda-backend: Add flambda2 -Oclassic and -O3 CI jobs (#1459) e5eca61 flambda-backend: Add documentation for testing targets to HACKING docs (#1436) f1835c4 flambda-backend: New extensions API, supporting maturity levels (#1454) 1deb5af flambda-backend: Add Make/Dune target for debug printers (#1289) 324f32e flambda-backend: Bugfix for application mode crossing (#1451) 7ac42ab flambda-backend: Don't substitute into exclaves in `simplif.ml` (#1448) a03de20 flambda-backend: Parse unboxed literals, treating them as boxed (#1437) 5283047 flambda-backend: support native `exclave_` syntax (#1338) a1fe4cf flambda-backend: Default layout variables in gadt constructors (#1424) f4c96ff flambda-backend: Fix programmatically enabling and disabling the same layouts extension (#1446) cc58003 flambda-backend: Erasability namespace for Jane Syntax attributes/extensions (#1421) ae9099a flambda-backend: Use layout histories to produce better errors (#1340) 385ada9 flambda-backend: Fix swapgil test C warnings (#1430) ff9a0d1 flambda-backend: Bugfix for caml_switch_runtime_locking_scheme (#1429) df41dae flambda-backend: Remove layout variables from [val]s (#1423) 2e1a05a flambda-backend: Bugfix for GC backlog tracking (#1387) 8bc3fd7 flambda-backend: Allow more function argument / returns to be non-value (#1422) f2a5b93 flambda-backend: Convert Jane Syntax to use attributes for many syntactic categories (#1412) 1e2d5c5 flambda-backend: zero alloc: warning 198 about assume (#1409) 9270fee flambda-backend: Allow non-value function args and returns (#1405) 5319dfe flambda-backend: Bump magic numbers for 4.14.1-13 31fb926 flambda-backend: Fix issue with layout any and Tstr_eval in the native toplevel (#1402) dff4346 flambda-backend: Extend caml_locking_scheme with callbacks for thread start/stop (#1411) 674a335 flambda-backend: Introduce an API to swap the runtime lock for a different lock. (#1365) 1ce68db flambda-backend: Modular syntax for types (#1401) 9f55ade flambda-backend: Missing changes around the renaming to "Jane syntax" (#1400) cf8eaa8 flambda-backend: Move `include functor` over to the modular extensions machinery (#1377) da4e02d flambda-backend: Statically enabled probes (#1388) 093e638 flambda-backend: Bump magic numbers for 4.14.1-12 e7e0bf1 flambda-backend: Move layout from Type_abstract to type_declaration (#1384) 9c53ca7 flambda-backend: Rename `tests/jst-modular-extensions` to `tests/jane-modular-syntax` (#1397) 6881566 flambda-backend: Rename "modular extensions" to "Jane syntax"/"modular syntax" (#1395) bfec906 flambda-backend: Add autocompletion for test-one/promote-one (#1393) 9fc4aac flambda-backend: Fix a bug that -no-rebuild introduced in test-one (#1394) 301b683 flambda-backend: Add -no-rebuild options for test-one and promote-one (#1391) 1e090ac flambda-backend: zero alloc check: ignore functors and entry functions (#1370) 9d3b5a1 flambda-backend: Provide an AST-like view of modular extension extension node names (#1362) 7a92219 flambda-backend: Ltail for lambda and use in dissect_letrec (#1313) 7a7e639 flambda-backend: Add emacs hacking commands (#1372) 8dd6eae flambda-backend: Remove closure from Array.for_all (#1354) a4c4d03 flambda-backend: Fix ghost locations for modular extensions (#1348) ca5a008 flambda-backend: Bump magic numbers for 4.14.1-10 (#1360) a24d2ec flambda-backend: Inline a variable to save 2%+ in allocations (#1353) 96f8f00 flambda-backend: Probe name too long: warning instead of error (#1352) cd34685 flambda-backend: Typedtree module unpacks: Incorporate upstream feedback (#1288) c0482d3 flambda-backend: Add dedicated printline-debugging support (#1308) 7b295b0 flambda-backend: Fix try region closure for "match with exception" under Flambda 2 (#1339) db6552a flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 132f8ba flambda-backend: Revert ocaml/driver/ changes that are duplicative 3d7f37f flambda-backend: Merge ocaml-jst 4646c2e flambda-backend: Merge ocaml-jst e62f2b1 flambda-backend: Bump magic numbers for 4.14.1-8 f617a06 flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 79f91e9 flambda-backend: Revert ocaml/driver/ changes that are duplicative git-subtree-dir: ocaml git-subtree-split: 7da89ee
This is the parsing half of syntactic function arity. Unlike the upcoming typechecking/translation PR, this PR does not change the semantics of any existing OCaml program. But it does place new requirements on ppxes, so we should wait to merge it until some internal PRs for ppxes land.
@goldfirere for review please.
This PR transplants bits of the upstream PR (ocaml/ocaml#12236) to flambda-backend.
At a high level:
How to review
Add some locals tests
andMake Jane Syntax treat attributes as inner-to-outer
) in isolation. See "Things of note".This PR does not share much code with the upstream PR, except for some pieces of the parser.
Things of note
Making Jane Syntax treat attributes as inner-to-outer
One of the early commits ensures the following things hold:
pexp_attributes
list.)[: :] [@attr]
, the[@attr]
attribute should be placed later in the list than any Jane Syntax attribute.(1.) did not hold previously, but (2.) did. This PR makes both properties hold. It's important for (1.) to hold because, without it, this PR would be incompatible with the way that ppxlib merges attributes. For example, suppose a ppx replaces
[%ppx_extension]
withfun y z -> y + z
, which is encoded in Jane Syntax as(fun[@jane.erasable._builtin] y -> fun[@jane.erasable._builtin.param] z -> (y + z)[@jane.erasable._builtin.end])
. Then,So, for
fun[@jane.erasable._builtin][@jane.erasable._builtin.end] y -> ...
, Jane Syntax likewise needs to interpret@jane.erasable._builtin.end
before@jane.erasable._builtin
, because otherwise it will think the AST is invalid.alloc_mode
on function type constraintsThe parsetree encoded in Jane Syntax is different: there's an
alloc_mode
field of the type constraint. This is because the Jane Street OCaml parser treats this construct specially:We want this type to be treated by the type-checker as
local_ (int -> int -> int)
. The old parser accomplished this by putting an attribute on thePexp_constraint
node, but given that we're no longer constructing aPexp_constraint
node directly, I instead add a new field to thetype_constraint
. I add some tests in this PR because we weren't testing this behavior before.Merge this as-is or wait for typechecking?
TODO @ncik-roberts : I need to check that typedtree is unchanged if we want to merge this.
The main reason I can think to not merge this is that it constructs, and then throws away, a dummy parsetree just for purposes of typechecking. You'd expect this to impact minor heap allocations, and it looks like it does. (For a relevant benchmark, this is 1.9% worse: 15.9 TB vs. 15.6 TB.) But minor heap allocations are cheap, so maybe we want to merge this anyway in the interest of merging smaller, simpler PRs.