[m-rev.] for review: do occurs checks on the parse tree
Zoltan Somogyi
zoltan.somogyi at runbox.com
Thu Oct 3 10:58:12 AEST 2019
On Thu, 3 Oct 2019 10:54:06 +1000 (AEST), Julien Fischer <jfischer at opturion.com> wrote:
> > Ok. Attached is the updated diff, for postcommit review by Julien.
>
> The diff looks fine.
Thank you.
> > This diff does not yet try to filter out false warnings, because we first need
> > to decide how that should be done. There are four possibilities for f in X = f(...X...)
> > that we need to consider for that:
> >
> > 1. It is defined as a data constructor, and not defined as an executable function.
> > In this case, it is clear we should generate the warning.
> >
> > 2. It is not a data constructor, but it is an executable function.
> > In this case, it is clear we should NOT generate the warning.
> >
> > 3. It is defined neither as a data constructor or as an executable function.
> > This will definitely yield an error from the type checker, so whether we generate
> > a warning as well does not really matter.
>
> It does matter in the sense that the warning will just be noise in this
> case (i.e. we should not generate it).
That is exactly what the "really" qualifier in my mail above was meant
to convey.
> > 4 It is defined *both* as a data constructor and as an executable function.
> > In this case, a warning may be on point, or it may be misleading, depending
> > on what the typechecker eventually decides.
> >
> > The question is: should we generate a warning in case 4? If yes, we can do that
> > by passing down the set of data constructors to superhomogeneous.m,
>
> Specifically it only requires the set of non-zero arity data constructors.
> (Not having to deal with enums would be advantageous since enums are
> quite common and can get quite large.)
Good idea.
> > the X on the LHS to the ancestor var map when processing X = f(...). If not, we can
> > do that by passing down the set of executable functions to it, and *clearing* the initial
> > ancestor var map when processing the ... in X = f(...) if the f is an executable function.
> > I see no reason to pass both the set of data constructors and the set of executable
> > functions; depending on how we want to handle case 4, one or the other won't be
> > needed.
> >
> > I prefer "yes" on case 4. Any other opinions?
>
> I prefer "yes" on case 4 as well.
Ok, I will do that then. But not right now; I am working on changing
some of the type representation data structures, and I would rather
do this change just once.
Zoltan.
More information about the reviews
mailing list