-
Notifications
You must be signed in to change notification settings - Fork 63
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
Avoid concatenating Text values in termToPat
.
#1272
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.
Seems OK to me, although maybe we are better off precomputing and caching the identText
when building an Ident
. Using VarIndex
to match with also seems like a better idea, but I don't think this will be a problem.
This is going to interact somewhat with #1298. I'm not sure what is the best order for them to land. |
I was holding off on merging this because I wasn't sure that this was the best solution to the problem, so I was thinking about making further changes. Go ahead and merge #1298 first. |
Fixes #1263. We now use `identBaseName` instead of `identText` in the `termToPat` definition. While `identText` concatenates the module name and base name, `identBaseName` just returns the base name directly. Using only the base name means that there is a chance of name collisions between constants that differ only by module name. However, term nets are only used as an approximate filter prior to term matching; it is not a problem if a few extra hits are returned from time to time. Ultimately it might be better to replace the use of `Text` in the term net `Atom` constructor with a more specialized key type; for example with `ExtCns` names we could use the `VarIndex` for matching. However, this would require modifying the term net library.
481c618
to
1c74cf4
Compare
later it says
|
I guess that was a transient failure, since it worked after a restart without any changes. |
Fixes #1263.
We now use
identBaseName
instead ofidentText
in thetermToPat
definition. While
identText
concatenates the module name and basename,
identBaseName
just returns the base name directly.Using only the base name means that there is a chance of name collisions
between constants that differ only by module name. However, term nets
are only used as an approximate filter prior to term matching; it is
not a problem if a few extra hits are returned from time to time.
Ultimately it might be better to replace the use of
Text
in the termnet
Atom
constructor with a more specialized key type; for examplewith
ExtCns
names we could use theVarIndex
for matching. However,this would require modifying the term net library.