forked from syndicate-lang/preserves
Handle external types wrt has_embedded
This commit is contained in:
parent
352d8ba1b3
commit
985a0b6795
|
@ -73,8 +73,8 @@ impl<'b> BundleContext<'b> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn type_for_name(&self, r: &Ref) -> &types::TDefinition {
|
pub fn type_for_name(&self, r: &Ref) -> Option<&types::TDefinition> {
|
||||||
self.types.get(r).unwrap_or_else(|| panic!("{:?} not found", r))
|
self.types.get(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn define_literal(&mut self, v: &IOValue) -> String {
|
pub fn define_literal(&mut self, v: &IOValue) -> String {
|
||||||
|
@ -153,7 +153,7 @@ impl<'m, 'b> ModuleContext<'m, 'b> {
|
||||||
Some(s) =>
|
Some(s) =>
|
||||||
item(name![s.to_owned(), r.name.to_owned()])
|
item(name![s.to_owned(), r.name.to_owned()])
|
||||||
};
|
};
|
||||||
if with_generic_args && self.type_for_name(r).has_embedded(self) {
|
if with_generic_args && self.ref_has_embedded(r) {
|
||||||
item(seq![base, anglebrackets!["_Any"]])
|
item(seq![base, anglebrackets!["_Any"]])
|
||||||
} else {
|
} else {
|
||||||
base
|
base
|
||||||
|
@ -172,10 +172,17 @@ impl<'m, 'b> ModuleContext<'m, 'b> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn type_for_name(&self, r: &Ref) -> &types::TDefinition {
|
pub fn type_for_name(&self, r: &Ref) -> Option<&types::TDefinition> {
|
||||||
self.bundle.type_for_name(&self.qualify(r))
|
self.bundle.type_for_name(&self.qualify(r))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn ref_has_embedded(&self, r: &Ref) -> bool {
|
||||||
|
match self.type_for_name(r) {
|
||||||
|
Some(ty) => ty.has_embedded(self),
|
||||||
|
None => false, // TODO: should this be configurable?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn literals_generic_decls(&self) -> Item {
|
pub fn literals_generic_decls(&self) -> Item {
|
||||||
item(anglebrackets!["_Any: preserves::value::NestedValue"])
|
item(anglebrackets!["_Any: preserves::value::NestedValue"])
|
||||||
}
|
}
|
||||||
|
|
|
@ -214,7 +214,7 @@ impl TField {
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
seen.insert(r.clone());
|
seen.insert(r.clone());
|
||||||
ctxt.type_for_name(&r)._has_embedded(ctxt, seen)
|
ctxt.type_for_name(&r).map(|ty| ty._has_embedded(ctxt, seen)).unwrap_or(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TField::Base(_) => false,
|
TField::Base(_) => false,
|
||||||
|
|
Loading…
Reference in New Issue