Use type annotations when deciding how to process ambiguous ground input.
This commit is contained in:
parent
98bc465a8e
commit
afcc5f0100
1 changed files with 11 additions and 4 deletions
|
@ -119,12 +119,19 @@ impl ConjoiningClauses {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let constrained_types;
|
||||||
|
if let Some(required) = self.required_types.get(var) {
|
||||||
|
constrained_types = known_types.intersection(required);
|
||||||
|
} else {
|
||||||
|
constrained_types = known_types;
|
||||||
|
}
|
||||||
|
|
||||||
match arg {
|
match arg {
|
||||||
// Longs are potentially ambiguous: they might be longs or entids.
|
// Longs are potentially ambiguous: they might be longs or entids.
|
||||||
FnArg::EntidOrInteger(x) => {
|
FnArg::EntidOrInteger(x) => {
|
||||||
match (ValueType::Ref.accommodates_integer(x),
|
match (ValueType::Ref.accommodates_integer(x),
|
||||||
known_types.contains(ValueType::Ref),
|
constrained_types.contains(ValueType::Ref),
|
||||||
known_types.contains(ValueType::Long)) {
|
constrained_types.contains(ValueType::Long)) {
|
||||||
(true, true, true) => {
|
(true, true, true) => {
|
||||||
// Ambiguous: this arg could be an entid or a long.
|
// Ambiguous: this arg could be an entid or a long.
|
||||||
// We default to long.
|
// We default to long.
|
||||||
|
@ -159,8 +166,8 @@ impl ConjoiningClauses {
|
||||||
|
|
||||||
// If you definitely want to look up an ident, do it before running the query.
|
// If you definitely want to look up an ident, do it before running the query.
|
||||||
FnArg::IdentOrKeyword(x) => {
|
FnArg::IdentOrKeyword(x) => {
|
||||||
match (known_types.contains(ValueType::Ref),
|
match (constrained_types.contains(ValueType::Ref),
|
||||||
known_types.contains(ValueType::Keyword)) {
|
constrained_types.contains(ValueType::Keyword)) {
|
||||||
(true, true) => {
|
(true, true) => {
|
||||||
// Ambiguous: this could be a keyword or an ident.
|
// Ambiguous: this could be a keyword or an ident.
|
||||||
// Default to keyword.
|
// Default to keyword.
|
||||||
|
|
Loading…
Reference in a new issue