From d05f1ca86bff843baf26dc15b6ee9820c35d4b94 Mon Sep 17 00:00:00 2001 From: Markus Westerlind Date: Tue, 29 Dec 2020 15:10:47 +0100 Subject: [PATCH] fix: Don't use the empty span in derive macros --- vm/src/derive/deserialize.rs | 1 + vm/src/derive/eq.rs | 2 +- vm/src/derive/mod.rs | 11 +++++++++-- vm/src/derive/serialize.rs | 9 ++++++++- vm/src/derive/show.rs | 9 ++++++++- 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/vm/src/derive/deserialize.rs b/vm/src/derive/deserialize.rs index cad7ec9d14..9395a8e6f5 100644 --- a/vm/src/derive/deserialize.rs +++ b/vm/src/derive/deserialize.rs @@ -153,6 +153,7 @@ pub fn generate<'ast>( typ: Some(binding_type( arena, symbols, + span, "Deserialize", self_type(), bind, diff --git a/vm/src/derive/eq.rs b/vm/src/derive/eq.rs index 24bb598b77..499061d8e1 100644 --- a/vm/src/derive/eq.rs +++ b/vm/src/derive/eq.rs @@ -220,7 +220,7 @@ pub fn generate<'ast>( args: &mut [], expr: pos::spanned(span, eq_record_expr), metadata: Default::default(), - typ: Some(binding_type(arena, symbols, "Eq", self_type(), bind)), + typ: Some(binding_type(arena, symbols, span, "Eq", self_type(), bind)), resolved_type: Type::hole(), }) } diff --git a/vm/src/derive/mod.rs b/vm/src/derive/mod.rs index ef4fa12b6f..7283dcdcf3 100644 --- a/vm/src/derive/mod.rs +++ b/vm/src/derive/mod.rs @@ -286,13 +286,14 @@ fn is_self_type(self_: &Symbol, typ: &AstType) -> bool { fn binding_type<'ast>( arena: ast::ArenaRef<'_, 'ast, Symbol>, symbols: &mut Symbols, + span: Span, derive_type_name: &str, self_type: AstType<'ast, Symbol>, bind: &TypeBinding<'ast, Symbol>, ) -> AstType<'ast, Symbol> { let derive_symbol = symbols.simple_symbol(derive_type_name); let derive_type = move || arena.clone().ident(KindedIdent::new(derive_symbol.clone())); - arena.clone().function_implicit( + let mut typ = arena.clone().function_implicit( bind.alias.value.params().iter().cloned().map(|g| { TypeContext::app( &mut arena.clone(), @@ -305,5 +306,11 @@ fn binding_type<'ast>( derive_type(), arena.clone().alloc_extend(Some(self_type)), ), - ) + ); + + crate::base::types::walk_type_mut(&mut typ, &mut |typ: &mut AstType<_>| { + *typ.span_mut() = span; + }); + + typ } diff --git a/vm/src/derive/serialize.rs b/vm/src/derive/serialize.rs index 7cd8d7dae1..23c150e47f 100644 --- a/vm/src/derive/serialize.rs +++ b/vm/src/derive/serialize.rs @@ -222,7 +222,14 @@ pub fn generate<'ast>( args: &mut [], expr: serializer_record_expr, metadata: Default::default(), - typ: Some(binding_type(arena, symbols, "Serialize", self_type(), bind)), + typ: Some(binding_type( + arena, + symbols, + span, + "Serialize", + self_type(), + bind, + )), resolved_type: Type::hole(), }) } diff --git a/vm/src/derive/show.rs b/vm/src/derive/show.rs index 075adaf019..e3f83f41f0 100644 --- a/vm/src/derive/show.rs +++ b/vm/src/derive/show.rs @@ -204,7 +204,14 @@ pub fn generate<'ast>( args: &mut [], expr: pos::spanned(span, show_record_expr), metadata: Default::default(), - typ: Some(binding_type(arena, symbols, "Show", self_type(), bind)), + typ: Some(binding_type( + arena, + symbols, + span, + "Show", + self_type(), + bind, + )), resolved_type: Type::hole(), }) }