summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2016-06-04 15:08:50 +0800
committerJohn Hodge <tpg@ucc.asn.au>2016-06-04 15:08:50 +0800
commitf36518ed2fb6444884f991bcd6c8e0c3acd47beb (patch)
tree9ac3092f488192aba16e2ce1f4f160b98cd16ec0 /src
parentf92a45d8054cc18a037449ec136bf874ce20fc5a (diff)
downloadmrust-f36518ed2fb6444884f991bcd6c8e0c3acd47beb.tar.gz
Compilation fixes (clang and different gcc version)
Diffstat (limited to 'src')
-rw-r--r--src/ast/expr.cpp2
-rw-r--r--src/ast/path.cpp10
-rw-r--r--src/ast/path.hpp24
-rw-r--r--src/ast/types.hpp4
-rw-r--r--src/hir/expr_ptr.hpp2
-rw-r--r--src/hir/from_ast.cpp4
-rw-r--r--src/hir/hir.hpp18
-rw-r--r--src/hir/type.hpp5
-rw-r--r--src/hir_conv/bind.cpp2
-rw-r--r--src/hir_conv/constant_evaluation.cpp2
-rw-r--r--src/hir_conv/expand_type.cpp2
-rw-r--r--src/hir_conv/resolve_ufcs.cpp2
-rw-r--r--src/hir_typeck/expr.cpp6
-rw-r--r--src/hir_typeck/outer.cpp6
-rw-r--r--src/include/synext.hpp8
-rw-r--r--src/parse/lex.cpp3
-rw-r--r--src/parse/parseerror.cpp3
-rw-r--r--src/parse/parseerror.hpp2
-rw-r--r--src/parse/root.cpp14
-rw-r--r--src/parse/tokentree.hpp1
20 files changed, 57 insertions, 63 deletions
diff --git a/src/ast/expr.cpp b/src/ast/expr.cpp
index 24e6ab3b..ddb72beb 100644
--- a/src/ast/expr.cpp
+++ b/src/ast/expr.cpp
@@ -41,7 +41,7 @@ SERIALISE_TYPE(Expr::, "Expr", {
::std::ostream& operator<<(::std::ostream& os, const ExprNode& node)
{
- if( &node != nullptr ) {
+ if( static_cast<const void*>(&node) != nullptr ) {
node.print(os);
}
else {
diff --git a/src/ast/path.cpp b/src/ast/path.cpp
index bd5ffe1a..01eed8c7 100644
--- a/src/ast/path.cpp
+++ b/src/ast/path.cpp
@@ -151,19 +151,19 @@ AST::Path::Path(const Path& x):
TU_MATCH(Class, (x.m_class), (ent),
(Invalid, m_class = Class::make_Invalid({});),
(Local,
- m_class = Class::make_Local({name: ent.name});
+ m_class = Class::make_Local({ent.name});
),
(Relative,
- m_class = Class::make_Relative({nodes: ent.nodes});
+ m_class = Class::make_Relative({ent.nodes});
),
(Self,
- m_class = Class::make_Self({nodes: ent.nodes});
+ m_class = Class::make_Self({ent.nodes});
),
(Super,
- m_class = Class::make_Super({count: ent.count, nodes: ent.nodes});
+ m_class = Class::make_Super({ent.count, ent.nodes});
),
(Absolute,
- m_class = Class::make_Absolute({crate: ent.crate, nodes: ent.nodes});
+ m_class = Class::make_Absolute({ent.crate, ent.nodes});
),
(UFCS,
if( ent.trait )
diff --git a/src/ast/path.hpp b/src/ast/path.hpp
index 4b9cffa4..c31f4bc0 100644
--- a/src/ast/path.hpp
+++ b/src/ast/path.hpp
@@ -217,30 +217,6 @@ public:
return m_class.tag();
}
- /// Add the all nodes except the first from 'b' to 'a' and return
- static Path add_tailing(const Path& a, const Path& b) {
- Path ret(a);
- ret.add_tailing(b);
- return ret;
- }
- /// Grab the args from the first node of b, and add the rest to the end of the path
- // TODO: Args should probably be moved to the path, not the nodes
- void add_tailing(const Path& b) {
- assert( !this->m_class.is_Invalid() );
- assert( b.m_class.is_Relative() );
- const auto& b_r = b.m_class.as_Relative();
- if( b_r.nodes.size() == 0 )
- ;
- else if( nodes().size() > 0 )
- nodes().back().args() = b[0].args();
- else if( ! b[0].args().is_empty() )
- throw ::std::runtime_error("add_tail to empty path, but generics in source");
- else {
- }
- for(unsigned int i = 1; i < b_r.nodes.size(); i ++)
- nodes().push_back(b_r.nodes[i]);
- m_binding = PathBinding();
- }
Path operator+(PathNode&& pn) const {
Path tmp = Path(*this);
tmp.nodes().push_back( pn );
diff --git a/src/ast/types.hpp b/src/ast/types.hpp
index b3208f8c..2e9608a5 100644
--- a/src/ast/types.hpp
+++ b/src/ast/types.hpp
@@ -243,6 +243,10 @@ public:
bool is_pointer() const { return m_data.is_Pointer(); }
bool is_tuple() const { return m_data.is_Tuple(); }
+ TypeRef clone() const {
+ return TypeRef(*this);
+ }
+
//::option<const TypeData::Tuple&> as_tuple() const {
// switch(m_data.tag())
// {
diff --git a/src/hir/expr_ptr.hpp b/src/hir/expr_ptr.hpp
index 6378b052..80400d55 100644
--- a/src/hir/expr_ptr.hpp
+++ b/src/hir/expr_ptr.hpp
@@ -29,6 +29,8 @@ public:
~ExprPtr();
::std::unique_ptr< ::HIR::ExprNode> into_unique();
+ operator bool () const { return node != nullptr; }
+ ::HIR::ExprNode* get() const { return node; }
::HIR::ExprNode& operator*() { return *node; }
const ::HIR::ExprNode& operator*() const { return *node; }
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp
index 626b3348..d2aba4a9 100644
--- a/src/hir/from_ast.cpp
+++ b/src/hir/from_ast.cpp
@@ -670,9 +670,7 @@
::HIR::Trait rv {
LowerHIR_GenericParams(f.params()),
mv$(lifetime),
- mv$(supertraits),
- {},
- {}
+ mv$(supertraits)
};
for(const auto& item : f.items())
diff --git a/src/hir/hir.hpp b/src/hir/hir.hpp
index ef565c4e..9b76c166 100644
--- a/src/hir/hir.hpp
+++ b/src/hir/hir.hpp
@@ -54,8 +54,9 @@ extern ::std::ostream& operator<<(::std::ostream& os, const Literal& v);
// --------------------------------------------------------------------
// Type structures
// --------------------------------------------------------------------
-struct Static
+class Static
{
+public:
bool m_is_mut;
TypeRef m_type;
@@ -71,8 +72,9 @@ struct Constant
ExprPtr m_value;
Literal m_value_res;
};
-struct Function
+class Function
{
+public:
::std::string m_abi;
bool m_unsafe;
bool m_const;
@@ -93,8 +95,9 @@ struct TypeAlias
GenericParams m_params;
::HIR::TypeRef m_type;
};
-struct Enum
+class Enum
{
+public:
TAGGED_UNION(Variant, Unit,
(Unit, struct{}),
(Value, ::HIR::ExprPtr),
@@ -112,8 +115,9 @@ struct Enum
Repr m_repr;
::std::vector< ::std::pair< ::std::string, Variant > > m_variants;
};
-struct Struct
+class Struct
{
+public:
enum class Repr
{
Rust,
@@ -153,6 +157,12 @@ struct Trait
::std::unordered_map< ::std::string, AssociatedType > m_types;
::std::unordered_map< ::std::string, TraitValueItem > m_values;
+
+ Trait( GenericParams gps, ::std::string lifetime, ::std::vector< ::HIR::GenericPath> parents):
+ m_params( mv$(gps) ),
+ m_lifetime( mv$(lifetime) ),
+ m_parent_traits( mv$(parents) )
+ {}
};
class Module
diff --git a/src/hir/type.hpp b/src/hir/type.hpp
index 9fe13872..49c0107f 100644
--- a/src/hir/type.hpp
+++ b/src/hir/type.hpp
@@ -12,7 +12,7 @@ namespace HIR {
class Struct;
class Enum;
-struct TypeRef;
+class TypeRef;
enum class CoreType
{
@@ -49,8 +49,9 @@ struct FunctionType
::std::vector<TypeRef> m_arg_types;
};
-struct TypeRef
+class TypeRef
{
+public:
// Options:
// - Primitive
// - Parameter
diff --git a/src/hir_conv/bind.cpp b/src/hir_conv/bind.cpp
index e06708fc..c96fc348 100644
--- a/src/hir_conv/bind.cpp
+++ b/src/hir_conv/bind.cpp
@@ -280,7 +280,7 @@ namespace {
}
};
- if( &*expr != nullptr )
+ if( expr.get() != nullptr )
{
ExprVisitor v { *this };
(*expr).visit(v);
diff --git a/src/hir_conv/constant_evaluation.cpp b/src/hir_conv/constant_evaluation.cpp
index 9ccd2033..c9f25f60 100644
--- a/src/hir_conv/constant_evaluation.cpp
+++ b/src/hir_conv/constant_evaluation.cpp
@@ -572,7 +572,7 @@ namespace {
}
};
- if( &*expr != nullptr )
+ if( expr.get() != nullptr )
{
Visitor v { this->m_crate };
(*expr).visit(v);
diff --git a/src/hir_conv/expand_type.cpp b/src/hir_conv/expand_type.cpp
index 2b2ba4c6..c29b7d71 100644
--- a/src/hir_conv/expand_type.cpp
+++ b/src/hir_conv/expand_type.cpp
@@ -125,7 +125,7 @@ public:
}
};
- if( &*expr != nullptr )
+ if( expr.get() != nullptr )
{
Visitor v { *this };
(*expr).visit(v);
diff --git a/src/hir_conv/resolve_ufcs.cpp b/src/hir_conv/resolve_ufcs.cpp
index fbc4bc6f..be23be21 100644
--- a/src/hir_conv/resolve_ufcs.cpp
+++ b/src/hir_conv/resolve_ufcs.cpp
@@ -84,7 +84,7 @@ namespace {
}
};
- if( &*expr != nullptr )
+ if( expr.get() != nullptr )
{
ExprVisitor v { *this };
(*expr).visit(v);
diff --git a/src/hir_typeck/expr.cpp b/src/hir_typeck/expr.cpp
index 9b35c1c7..d9dd3198 100644
--- a/src/hir_typeck/expr.cpp
+++ b/src/hir_typeck/expr.cpp
@@ -1210,7 +1210,7 @@ namespace {
// ------
void visit_function(::HIR::Function& item) override {
auto _ = this->set_item_generics(item.m_params);
- if( &*item.m_code )
+ if( item.m_code )
{
TypecheckContext typeck_context { };
for( auto& arg : item.m_args ) {
@@ -1222,7 +1222,7 @@ namespace {
}
void visit_static(::HIR::Static& item) override {
//auto _ = this->set_item_generics(item.m_params);
- if( &*item.m_value )
+ if( item.m_value )
{
TypecheckContext typeck_context { };
DEBUG("Static value");
@@ -1231,7 +1231,7 @@ namespace {
}
void visit_constant(::HIR::Constant& item) override {
auto _ = this->set_item_generics(item.m_params);
- if( &*item.m_value )
+ if( item.m_value )
{
TypecheckContext typeck_context { };
DEBUG("Const value");
diff --git a/src/hir_typeck/outer.cpp b/src/hir_typeck/outer.cpp
index 156dd6e8..ff2b0477 100644
--- a/src/hir_typeck/outer.cpp
+++ b/src/hir_typeck/outer.cpp
@@ -99,13 +99,13 @@ namespace {
::HIR::Crate& crate;
::HIR::GenericParams* m_impl_generics;
- ::HIR::GenericParams* m_item_generics;
+ //::HIR::GenericParams* m_item_generics;
::std::vector< ::HIR::TypeRef* > m_self_types;
public:
Visitor(::HIR::Crate& crate):
crate(crate),
- m_impl_generics(nullptr),
- m_item_generics(nullptr)
+ m_impl_generics(nullptr)/*,
+ m_item_generics(nullptr)*/
{
}
diff --git a/src/include/synext.hpp b/src/include/synext.hpp
index 3ac3fb37..ae1c14f6 100644
--- a/src/include/synext.hpp
+++ b/src/include/synext.hpp
@@ -13,16 +13,16 @@ namespace AST {
class MetaItem;
class Path;
- class StructItem;
- class TupleItem;
- class EnumVariant;
+ struct StructItem;
+ struct TupleItem;
+ struct EnumVariant;
class Module;
class Item;
class Expr;
class ExprNode;
- class ExprNode_Match_Arm;
+ struct ExprNode_Match_Arm;
class MacroInvocation;
diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp
index 5530f0b5..2b84d0e4 100644
--- a/src/parse/lex.cpp
+++ b/src/parse/lex.cpp
@@ -930,8 +930,7 @@ void Lexer::ungetc()
m_last_char_valid = true;
}
-TTStream::TTStream(const TokenTree& input_tt):
- m_input_tt(input_tt)
+TTStream::TTStream(const TokenTree& input_tt)
{
DEBUG("input_tt = [" << input_tt << "]");
m_stack.push_back( ::std::make_pair(0, &input_tt) );
diff --git a/src/parse/parseerror.cpp b/src/parse/parseerror.cpp
index 7c6f6a21..116776a5 100644
--- a/src/parse/parseerror.cpp
+++ b/src/parse/parseerror.cpp
@@ -47,8 +47,7 @@ CompileError::Todo::~Todo() throw()
{
}
-ParseError::BadChar::BadChar(const TokenStream& lex, char character):
- m_char(character)
+ParseError::BadChar::BadChar(const TokenStream& lex, char character)
{
::std::cout << lex.getPosition() << ": BadChar(" << character << ")" << ::std::endl;
}
diff --git a/src/parse/parseerror.hpp b/src/parse/parseerror.hpp
index 42a89785..b847ccc4 100644
--- a/src/parse/parseerror.hpp
+++ b/src/parse/parseerror.hpp
@@ -14,7 +14,7 @@ using CompileError::Todo;
class BadChar:
public CompileError::Base
{
- char m_char;
+ //char m_char;
public:
BadChar(const TokenStream& lex, char character);
virtual ~BadChar() throw ();
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index 58708ec7..15b792d0 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -65,10 +65,14 @@ void Parse_TypeBound(TokenStream& lex, AST::GenericParams& ret, TypeRef checked_
do
{
if(GET_TOK(tok, lex) == TOK_LIFETIME) {
- ret.add_bound(AST::GenericBound::make_TypeLifetime( {type: checked_type, bound: tok.str()} ));
+ ret.add_bound(AST::GenericBound::make_TypeLifetime( {
+ checked_type.clone(), tok.str()
+ } ));
}
else if( tok.type() == TOK_QMARK ) {
- ret.add_bound(AST::GenericBound::make_MaybeTrait( {type: checked_type, trait: Parse_Path(lex, PATH_GENERIC_TYPE)} ));
+ ret.add_bound(AST::GenericBound::make_MaybeTrait( {
+ checked_type.clone(), Parse_Path(lex, PATH_GENERIC_TYPE)
+ } ));
}
else {
if( tok.type() == TOK_RWORD_FOR )
@@ -90,7 +94,9 @@ void Parse_TypeBound(TokenStream& lex, AST::GenericParams& ret, TypeRef checked_
PUTBACK(tok, lex);
}
- ret.add_bound( AST::GenericBound::make_IsTrait( {type: checked_type, hrls: lifetimes, trait: Parse_Path(lex, PATH_GENERIC_TYPE) }) );
+ ret.add_bound( AST::GenericBound::make_IsTrait({
+ checked_type.clone(), mv$(lifetimes), Parse_Path(lex, PATH_GENERIC_TYPE)
+ }) );
}
} while( GET_TOK(tok, lex) == TOK_PLUS );
PUTBACK(tok, lex);
@@ -131,7 +137,7 @@ AST::GenericParams Parse_GenericParams(TokenStream& lex)
{
do {
GET_CHECK_TOK(tok, lex, TOK_LIFETIME);
- ret.add_bound(AST::GenericBound::make_Lifetime( {test: param_name, bound: tok.str()} ));
+ ret.add_bound(AST::GenericBound::make_Lifetime( {param_name, tok.str()} ));
} while( GET_TOK(tok, lex) == TOK_PLUS );
}
else
diff --git a/src/parse/tokentree.hpp b/src/parse/tokentree.hpp
index 68080689..7f8810a7 100644
--- a/src/parse/tokentree.hpp
+++ b/src/parse/tokentree.hpp
@@ -61,7 +61,6 @@ public:
class TTStream:
public TokenStream
{
- const TokenTree& m_input_tt;
::std::vector< ::std::pair<unsigned int, const TokenTree*> > m_stack;
public:
TTStream(const TokenTree& input_tt);