diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ast/ast.cpp | 9 | ||||
-rw-r--r-- | src/ast/ast.hpp | 6 | ||||
-rw-r--r-- | src/expand/mod.cpp | 1 | ||||
-rw-r--r-- | src/hir/from_ast.cpp | 3 | ||||
-rw-r--r-- | src/parse/root.cpp | 10 | ||||
-rw-r--r-- | src/resolve/use.cpp | 3 |
6 files changed, 20 insertions, 12 deletions
diff --git a/src/ast/ast.cpp b/src/ast/ast.cpp index df5f4d5a..a4825a89 100644 --- a/src/ast/ast.cpp +++ b/src/ast/ast.cpp @@ -109,15 +109,18 @@ Function Function::clone() const return rv; } -void Trait::add_type(::std::string name, TypeRef type) { +void Trait::add_type(::std::string name, MetaItems attrs, TypeRef type) { m_items.push_back( Named<Item>(mv$(name), Item::make_Type({TypeAlias(GenericParams(), mv$(type))}), true) ); + m_items.back().data.attrs = mv$(attrs); } -void Trait::add_function(::std::string name, Function fcn) { +void Trait::add_function(::std::string name, MetaItems attrs, Function fcn) { DEBUG("trait fn " << name); m_items.push_back( Named<Item>(mv$(name), Item::make_Function({mv$(fcn)}), true) ); + m_items.back().data.attrs = mv$(attrs); } -void Trait::add_static(::std::string name, Static v) { +void Trait::add_static(::std::string name, MetaItems attrs, Static v) { m_items.push_back( Named<Item>(mv$(name), Item::make_Static({mv$(v)}), true) ); + m_items.back().data.attrs = mv$(attrs); } void Trait::set_is_marker() { m_is_marker = true; diff --git a/src/ast/ast.hpp b/src/ast/ast.hpp index c067001a..09eca0df 100644 --- a/src/ast/ast.hpp +++ b/src/ast/ast.hpp @@ -219,9 +219,9 @@ public: const NamedList<Item>& items() const { return m_items; } NamedList<Item>& items() { return m_items; } - void add_type(::std::string name, TypeRef type); - void add_function(::std::string name, Function fcn); - void add_static(::std::string name, Static v); + void add_type(::std::string name, MetaItems attrs, TypeRef type); + void add_function(::std::string name, MetaItems attrs, Function fcn); + void add_static(::std::string name, MetaItems attrs, Static v); void set_is_marker(); bool is_marker() const; diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index 771e92ac..2ca45d99 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -1136,6 +1136,7 @@ void Expand_Mod(::AST::Crate& crate, LList<const AST::Module*> modstack, ::AST:: Expand_GenericParams(crate, modstack, mod, e.params()); for(auto& ti : e.items()) { + DEBUG(" - " << ti.name << " " << ti.data.tag_str()); auto attrs = mv$(ti.data.attrs); Expand_Attrs(attrs, AttrStage::Pre, crate, AST::Path(), mod, ti.data); diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 3e366d8f..48aa7af4 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -976,6 +976,9 @@ namespace { ( BUG(item.data.span, "Encountered unexpected item type in trait"); ), + (None, + // Ignore. + ), (Type, bool is_sized = true; ::std::vector< ::HIR::TraitPath> trait_bounds; diff --git a/src/parse/root.cpp b/src/parse/root.cpp index 406217f2..e89f7025 100644 --- a/src/parse/root.cpp +++ b/src/parse/root.cpp @@ -724,8 +724,7 @@ AST::Trait Parse_TraitDef(TokenStream& lex, const AST::MetaItems& meta_items) } CHECK_TOK(tok, TOK_SEMICOLON); - // TODO: Attributes on associated statics - trait.add_static( mv$(name), ::AST::Static(AST::Static::STATIC, mv$(ty), val)/*, mv$(item_attrs)*/ ); + trait.add_static( mv$(name), mv$(item_attrs), ::AST::Static(AST::Static::STATIC, mv$(ty), val) ); break; } case TOK_RWORD_CONST: { GET_CHECK_TOK(tok, lex, TOK_IDENT); @@ -740,8 +739,7 @@ AST::Trait Parse_TraitDef(TokenStream& lex, const AST::MetaItems& meta_items) } CHECK_TOK(tok, TOK_SEMICOLON); - // TODO: Attributes on associated constants - trait.add_static( mv$(name), ::AST::Static(AST::Static::CONST, mv$(ty), val)/*, mv$(item_attrs)*/ ); + trait.add_static( mv$(name), mv$(item_attrs), ::AST::Static(AST::Static::CONST, mv$(ty), val) ); break; } // Associated type case TOK_RWORD_TYPE: { @@ -765,7 +763,7 @@ AST::Trait Parse_TraitDef(TokenStream& lex, const AST::MetaItems& meta_items) } CHECK_TOK(tok, TOK_SEMICOLON); - trait.add_type( ::std::move(name), ::std::move(default_type) ); + trait.add_type( ::std::move(name), mv$(item_attrs), ::std::move(default_type) ); trait.items().back().data.as_Type().params() = mv$(atype_params); break; } @@ -808,7 +806,7 @@ AST::Trait Parse_TraitDef(TokenStream& lex, const AST::MetaItems& meta_items) throw ParseError::Unexpected(lex, tok); } // TODO: Store `item_attrs` - trait.add_function( ::std::move(name), /*mv$(item_attrs),*/ ::std::move(fcn) ); + trait.add_function( ::std::move(name), mv$(item_attrs), ::std::move(fcn) ); break; } default: throw ParseError::Unexpected(lex, tok); diff --git a/src/resolve/use.cpp b/src/resolve/use.cpp index ca067304..2b02fc0d 100644 --- a/src/resolve/use.cpp +++ b/src/resolve/use.cpp @@ -231,6 +231,9 @@ void Resolve_Use_Mod(const ::AST::Crate& crate, ::AST::Module& mod, ::AST::Path ( BUG(Span(), "Unexpected item in trait - " << ti.data.tag_str()); ), + (None, + // Deleted, ignore + ), (Type, ), (Function, |