[#9] Print intermediate stack types when verbose typechecking is enabled
Description
Enabling stack type comments
I did that by extending CommentType
data, which in turn is used by external instructions (not present in the Michelson specification). It does not enforce type correctness of the given stack, but it doesn't seem to be very useful anyway. To specify whether or not verbose typechecking is required, I've added another ReaderT
on top of the TypeCheck
stack with typechecking options.
Enabling printing singatures in ill-typed contracts
What that basically means, is that if we find an error at some point in the contract parsing tree, we should preserve all the existing typed information, as well as remaining, untyped part of the tree. Thus, I made a tree which can have well-typed (Typed.Instr
), semi-typed(TypeCheckedInstr
, can contain both well-typed and ill-typed children) and ill-typed(ExpandedOp
) nodes. It can be found in Michelson.TypeCheck.TypeCheckedOp
and Michelson.TypeCheck.TypeCheckedSeq
modules. The latter is for type-safe typechecking of a list of ExpandedOp
.
Integrating a partially typed result of typechecking into the current error system
When verbose typechecking is enabled, at the top of typechecking layers (in the typeCheckContractImpl
function) we simply throw the result wrapped in a Contract'
constructor.
That requried adding another constructor to TCError
.
Related issue(s)
Resolves #9 (closed)
✅ Checklist for your Merge Request
Related changes (conditional)
-
Tests (see short guidelines)
-
If I added new functionality, I added tests covering it. -
If I fixed a bug, I added a regression test to prevent the bug from silently reappearing again.
-
-
Documentation
Stylistic guide (mandatory)
-
My commits comply with the following policy. -
My code complies with the style guide.