Commit Graph

13989 Commits

Author SHA1 Message Date
Paul Chiusano
95dd8747ff Merge remote-tracking branch 'origin/trunk' into fix/sig-cleanup
# Conflicts:
#	unison-src/transcripts-round-trip/main.output.md
#	unison-src/transcripts-round-trip/reparses.u
2023-08-17 16:59:32 -05:00
Paul Chiusano
46e28766d6 working 2023-08-17 16:55:28 -05:00
Chris Penner
e5c7ff7e9e
Merge pull request #4260 from kylegoetz/4239/cases-infix
fixes #4239, pretty printing for single arg infix op terms no longer displays "error"
2023-08-17 09:59:24 -07:00
Chris Penner
4cefceedc7 Ormolu 2023-08-16 21:14:16 -07:00
Paul Chiusano
f7d67069ad fix to record printing 2023-08-16 22:25:23 -05:00
Paul Chiusano
13f3aad25f Everything reparses with an identical hash now 2023-08-16 22:17:27 -05:00
Paul Chiusano
c42fd86edc wip 2023-08-16 16:21:58 -05:00
Paul Chiusano
355ee4f846 wip 2023-08-16 16:21:30 -05:00
Arya Irani
6c9b4eb008
Merge pull request #4250 from unisonweb/cp/project-branch-list 2023-08-15 12:15:49 -04:00
Arya Irani
f228f0d9b0
Merge pull request #4261 from unisonweb/cp/generalize-branch-format 2023-08-15 12:07:56 -04:00
Arya Irani
c1abbe102b
Merge pull request #4246 from unisonweb/cp/project-ui-command 2023-08-15 11:53:11 -04:00
Chris Penner
26944f55fc
Bump LSP lib versions (#4262)
* Upgrading to lsp-2.* support

* Upgrade imports to lsp 2

* Starting port to 2.0

* More porting to v2

* Lock down version hashes
2023-08-14 17:28:11 -07:00
mergify[bot]
9303895b03
Merge pull request #4264 from unisonweb/topic/racket-cache
Add -y when calling into racket
2023-08-14 21:08:29 +00:00
Dan Doel
490e23856f Add -y when calling into racket
This makes the racket compiler check for new versions of modules it
already compiled. Should avoid some confusing errors when developing the
racket libs.
2023-08-14 16:42:41 -04:00
Paul Chiusano
8a88523f63
Merge pull request #4255 from unisonweb/topic/rehashing
Change runtime term link representation to allow code validation
2023-08-14 13:06:12 -04:00
Chris Penner
72f09d4c96 Merge branch 'cp/project-ui-command' into cp/project-branch-list 2023-08-14 09:51:09 -07:00
Dan Doel
eb686993eb Add all permutations of mutual verification
Not sure if these actually generate different test cases, but it can't
hurt.
2023-08-14 12:34:08 -04:00
Chris Penner
979a948405 Merge remote-tracking branch 'origin/trunk' into cp/project-branch-list 2023-08-14 09:32:15 -07:00
Dan Doel
7a70bd7c98 Add more code rehashing tests 2023-08-14 12:30:05 -04:00
Dan Doel
a8ce3ec559 Make rehash less crashy on bad SCCs
If a user arbitrarily permutes the links associated with code, it's
possible to end up with a load request that appears to have mutually
recursive definitions without common hashes. So, this has been made into
a catchable exception instead of throwing a Haskell error.

The initial hashing in the runtime just calls error when this happens,
since it means some internal code generation generated bad SCCs, not
that some kind of user error happened.
2023-08-14 12:21:38 -04:00
Paul Chiusano
2528ef2008
Update parser-typechecker/src/Unison/Syntax/TermPrinter.hs 2023-08-14 10:05:38 -05:00
ChrisPenner
6303156564 automatically run ormolu 2023-08-12 19:13:36 +00:00
Kyle Goetz
c287cf4108 fixes #4239, pretty printing for single arg infix op terms no longer displays "error" 2023-08-12 00:00:41 -05:00
Chris Penner
370793c58e Update transcripts for non-project-code 2023-08-11 17:52:21 -07:00
Dan Doel
53919fe4bb Be more thorough about applying forward reference mappings
Solves one observed problem and potentially some others.

The observed problem was the process of unhashing and rehashing does not
replace any term links in the original terms. This is because term link
literals can't be turned into variables and subsequently replaced with
new hashes. So, instead we use our available variable mappings to
replace the literals manually.

A superior methodology might be to replicate the SCC behavior already in
hashTermComponents, and incrementally remap individual components.
However, that is a considerable amount of additional work, and the
post-floating references are just used as a translation layer between
the codebase and verifiable hashes, so making them completely consistent
doesn't seem necessary.

I've also added some codebase->verifiable replacements from the context
in some places. It's possible not doing this would have caused problems
during UCM sessions where some terms are loaded incrementally due to
multiple calls into the runtime. I didn't observe any failing tests due
to this, though.
2023-08-11 20:27:05 -04:00
Chris Penner
3e88ddab37 Add hashBranchFormatFull to Hash Handle 2023-08-11 17:22:26 -07:00
Chris Penner
d6b5308a52 Add hashBranchFormatToH2Branch 2023-08-11 16:53:02 -07:00
Chris Penner
9980fce492 Add Bytes Wrapper for local branch bytes 2023-08-11 14:16:46 -07:00
Chris Penner
ead368d2b5 Add export list to Serialization 2023-08-11 12:34:54 -07:00
Chris Penner
9796636aa9 Rebuild original branch format combinators 2023-08-11 12:28:35 -07:00
Chris Penner
fa548ec74d Generalize more deserialization combinators 2023-08-11 12:24:34 -07:00
Chris Penner
b353fd0c01 Generalize Branch Format type 2023-08-11 11:34:57 -07:00
Dan Doel
2000803b3c Fix some type errors from lamLift in tests 2023-08-11 12:59:44 -04:00
Dan Doel
196552c8ba Ormolu 2023-08-11 12:48:29 -04:00
Dan Doel
b29c8985a3 Remove some commented, dead code 2023-08-11 12:46:35 -04:00
Dan Doel
c356dbb75a Remember remappings from file loads
When the interpreter is called for things in a scratch file, the code
path is slightly different, because all the definitions are pre-combined
into a letrec. If the definitions are subsequently added to the
codebase, we will have already loaded and compiled their code. However,
previously the remapping from base to floated references would not
exist, because that was only being generated for loaded dependencies in
the other path.

So, this code adds a similar remapping for a top-level letrec in this
code path. This fixes a problem with compiling a definition that had
just been added from a scratch file. The remap was expected to be there,
but it wasn't, so the compiler could find the code to emit.
2023-08-11 12:41:44 -04:00
dolio
af4dc89f1a automatically run ormolu 2023-08-10 21:14:34 +00:00
Dan Doel
cad8cb2db9 Add validation to random deserial tests, and fix some bugs
The pair marshaling code was mistakenly using only a single layer of
data nesting, but unison pairs are like 2-element cons lists.

The rehashing code was not sorting the SCCs into a canonical order, so
the exact input order for components with more than one binding could
influence the hash. Sorting by input reference order fixes this, as all
references in an SCC are required to have the same hash, and differ only
by index.
2023-08-10 17:10:31 -04:00
Dan Doel
c8e09f0a96 Ormolu and transcripts 2023-08-10 16:34:55 -04:00
Arya Irani
5966a2a591
Merge pull request #4244 from unisonweb/travis/github-action-populate-nix-cache 2023-08-10 16:30:22 -04:00
Dan Doel
9402fef658 Hadn't revised validateLinks type based on actual implementation 2023-08-10 16:13:46 -04:00
Dan Doel
8306ff82a3 Add a builtin for validating code hashes before loading. 2023-08-10 15:48:28 -04:00
Arya Irani
7a3bdd3be7
Merge pull request #4251 from unisonweb/no-cache-iog-io 2023-08-10 15:41:42 -04:00
Dan Doel
db4619afc2 Update transcript outputs
I've checked the transcripts, and I believe these are outputs that
_should_ have changed, because the output depends on the specific values
of term links. fix2027 is just a different hash in a stack trace, which
is not surprising because it's the hash of a floated function.
2023-08-10 10:46:49 -04:00
Dan Doel
190b6d2888 Backmap references in stack traces 2023-08-10 00:25:21 -04:00
Dan Doel
865301752c Fix decompile info
I had mistakenly been putting floated terms in the decompile info, and
that was causing some mismatches with previous decompiling outputs.
Switching back to remembering the unfloated definitions seems to have
cleared up the discrepancies.
2023-08-09 20:31:52 -04:00
Dan Doel
661df84b65 Add version byte to intermediate hash. 2023-08-09 18:39:53 -04:00
Dan Doel
ca5505ab32 Rework intermediate code generation to support rehashing
Previously, we were taking already hashed terms as input to the various
intermediate compiler stages. We would then do things like lambda
lifting, and hash the resulting definitions afterwards. However, this
leads to problems like mutually recursive definitions that do not share
a common hash.

To rectify this, we instead do the intermediate operations on an
_unhashed_ version of code looked up from the codebase. Essentially, we
turn relevant definitions back into a letrec, do the floating, then hash
the results of that processing. This gives proper hashes to the
processed terms so that the compiled terms can be rehashed with relative
ease.

The system for this is unfortunately quite intricate. To get good
decompiled output, we need to keep track of associations between
original and floated terms _and_ floated and rehashed terms, then
mediate between them in various places.
2023-08-09 18:33:27 -04:00
Chris Penner
a3bf32ca52 Remove debugging 2023-08-09 14:48:28 -07:00
Chris Penner
59795277e7 Fix scoping of names in loose code to the names root. 2023-08-09 13:27:48 -07:00