Skip to content

Commit 564decc

Browse files
committed
Fix the newtype attribute for VmType derive
1 parent 061803f commit 564decc

File tree

7 files changed

+31
-7
lines changed

7 files changed

+31
-7
lines changed

base/src/ast.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,7 @@ pub fn walk_ast_type<'a, 'ast, V: ?Sized + $trait_name<'a, 'ast>>(
988988
ref $($mut)* rest,
989989
} => {
990990
for field in & $($mut)* **fields {
991+
v.visit_spanned_ident(& $($mut)* field.name);
991992
v.visit_ast_type(&$($mut)* field.typ);
992993
}
993994
v.visit_ast_type(rest);
@@ -997,6 +998,7 @@ pub fn walk_ast_type<'a, 'ast, V: ?Sized + $trait_name<'a, 'ast>>(
997998
ref $($mut)* rest,
998999
} => {
9991000
for field in & $($mut)* **types {
1001+
v.visit_spanned_ident(& $($mut)* field.name);
10001002
if let Some(alias) = field.typ.$try_get_alias() {
10011003
v.visit_ast_type(alias.$unresolved_type());
10021004
}

check/src/metadata.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,15 +304,15 @@ pub fn metadata(
304304
let maybe_metadata =
305305
MaybeMetadata::merge_base(&field.metadata, &maybe_metadata);
306306
if let MaybeMetadata::Data(metadata) = maybe_metadata {
307-
let field_name = String::from(field.name.value.as_ref() as &str);
307+
let field_name = String::from(field.name.value.as_pretty_str());
308308
module.insert(field_name, metadata);
309309
}
310310
}
311311

312312
for field in &**types {
313313
let maybe_metadata = self.metadata(&field.name.value);
314314
if let MaybeMetadata::Data(metadata) = maybe_metadata.into() {
315-
let name = Name::new(field.name.value.as_ref() as &str).name().as_str();
315+
let name = Name::new(field.name.value.as_pretty_str()).name().as_str();
316316
module.insert(String::from(name), metadata);
317317
}
318318
}
@@ -399,7 +399,8 @@ pub fn metadata(
399399
}
400400
None => field_metadata,
401401
};
402-
field_metadata.map(|m| (field.name.to_string(), Arc::new(m)))
402+
field_metadata
403+
.map(|m| (String::from(field.name.value.as_pretty_str()), Arc::new(m)))
403404
})
404405
.collect();
405406

codegen/src/vm_type.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ fn gen_impl(container: &Container, ident: Ident, generics: Generics, data: &Data
183183
});
184184

185185
quote! {
186-
let ty = if let Ok(ty) = vm.find_type_info(stringify!(#ident)) {
187-
ty.into_type()
186+
let ty = if let Some(ty) = vm.get_cache_alias(stringify!(#ident)) {
187+
ty
188188
} else {
189189
let ty = _gluon_base::types::Alias::new(
190190
_gluon_base::symbol::Symbol::from(stringify!(#ident)),

src/std_lib/regex.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ pub fn load(vm: &Thread) -> vm::Result<ExternModule> {
8787
new => primitive!(1, std::regex::prim::new),
8888
is_match => primitive!(2, std::regex::prim::is_match),
8989
find => primitive!(2, std::regex::prim::find),
90-
captures => primitive!(2, std::regex::prim::captures),
90+
// Workaround MIR bug in rustc
91+
captures => primitive!(2, "std.regex.prim.captures", |x, y| std::regex::prim::captures(x, y)),
9192
error_to_string => primitive!(1, std::regex::prim::error_to_string)
9293
},
9394
)

vm/src/api/record.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,12 @@ where
8484
let field_name = Symbol::from(alias_name.declared_name());
8585

8686
let mut rhs_is_equivalent = None;
87-
if let Type::App(f, a) = &*typ {
87+
{
88+
let (f, a) = if let Type::App(f, a) = &*typ {
89+
(f, &a[..])
90+
} else {
91+
(&typ, &[][..])
92+
};
8893
if let Type::Alias(f) = &**f {
8994
if f.name.declared_name() == field_name.declared_name()
9095
&& args.len() == a.len()

vm/src/thread.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,10 @@ impl Thread {
890890
self.global_env().register_type_as(name, alias, id)
891891
}
892892

893+
pub fn get_cache_alias(&self, name: &str) -> Option<ArcType> {
894+
self.global_env().get_cache_alias(name)
895+
}
896+
893897
pub fn cache_alias(&self, alias: Alias<Symbol, ArcType>) -> ArcType {
894898
self.global_env().cache_alias(alias)
895899
}

vm/src/vm.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,17 @@ impl GlobalVmState {
661661
Ok(t)
662662
}
663663

664+
#[doc(hidden)]
665+
pub fn get_cache_alias(&self, name: &str) -> Option<ArcType> {
666+
let env = self.env.read();
667+
env
668+
.type_infos
669+
.id_to_type
670+
.get(name)
671+
.map(|alias| alias.clone().into_type())
672+
}
673+
674+
#[doc(hidden)]
664675
pub fn cache_alias(&self, alias: Alias<Symbol, ArcType>) -> ArcType {
665676
let mut env = self.env.write();
666677
let type_infos = &mut env.type_infos;

0 commit comments

Comments
 (0)