More flatness info through annotations - Make functions be flat if their annotations are flat (as opposed to just any or blank). - Pass information about the flatness of annotations into the annotation constructors. This replaces all the information about cheapness and "hasRefinement" that was there before. Now annotations simply know if they are flat or if they are not, and it matches the static interpretation (by definition, since makeFlatPredAnn is the only source of non-flatness, and it is only called when statically the annotation is determined to be flat). - Harmonize the "fast" paths, which are actually semantically important. If the callee flatness optimization is applied, we need to ensure that nothing can result in a Continuation, so we cannot call safeCall in the annotation check. So these fast paths now exactly match the static flatness information they were instantiated with. - Note that we're keeping dynamic flatness information around in the annotations for now, because the representations themselves can benefit from this information, even if we statically don't know. That is, it's safe for an annotation to use its fast path, even if at a particular static use we cannot guarantee it (say because we didn't keep the information across modules) - As an additional optimization, make it so # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch ann-flatness # Changes to be committed: # modified: src/arr/compiler/anf-loop-compiler.arr # modified: src/arr/compiler/flatness.arr # modified: src/js/base/runtime.js # modified: src/scripts/show-compilation.arr # # Untracked files: # :w # adjacent-data.arr # alias-chain.arr # buildout.txt # data-def.arr # define-data.arr # define-data.steps # forward-refinement.arr # forward-refinement.steps # out.txt # out.xt # package-lock.json # test-output.txt # use-is-right.arr #