summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ast/ast.cpp9
-rw-r--r--src/ast/ast.hpp6
-rw-r--r--src/expand/mod.cpp1
-rw-r--r--src/hir/from_ast.cpp3
-rw-r--r--src/parse/root.cpp10
-rw-r--r--src/resolve/use.cpp3
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,