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 {
|
||||
self.types.get(r).unwrap_or_else(|| panic!("{:?} not found", r))
|
||||
pub fn type_for_name(&self, r: &Ref) -> Option<&types::TDefinition> {
|
||||
self.types.get(r)
|
||||
}
|
||||
|
||||
pub fn define_literal(&mut self, v: &IOValue) -> String {
|
||||
|
@ -153,7 +153,7 @@ impl<'m, 'b> ModuleContext<'m, 'b> {
|
|||
Some(s) =>
|
||||
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"]])
|
||||
} else {
|
||||
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))
|
||||
}
|
||||
|
||||
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 {
|
||||
item(anglebrackets!["_Any: preserves::value::NestedValue"])
|
||||
}
|
||||
|
|
|
@ -214,7 +214,7 @@ impl TField {
|
|||
false
|
||||
} else {
|
||||
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,
|
||||
|
|
Loading…
Reference in New Issue