summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge (bugs) <tpg@mutabah.net>2017-02-25 22:24:40 +0800
committerJohn Hodge (bugs) <tpg@mutabah.net>2017-02-25 22:24:40 +0800
commit03addc877bab648ccde022edec29f5b051ce7cb9 (patch)
tree51089cf2abbda1d48a7105da1cb18ec84f2f4590
parent12c012c69235fd90c855881f2c07c91dbb052635 (diff)
downloadmrust-03addc877bab648ccde022edec29f5b051ce7cb9.tar.gz
Add visual studio project files, little tweaks to codebase to allow compiling on visual studio (not complete)
-rw-r--r--.gitignore19
-rw-r--r--src/ast/path.cpp20
-rw-r--r--src/ast/types.cpp2
-rw-r--r--src/common.hpp6
-rw-r--r--src/expand/format_args.cpp3
-rw-r--r--src/hir/from_ast.cpp3
-rw-r--r--src/hir/hir.hpp6
-rw-r--r--src/hir/path.hpp2
-rw-r--r--src/hir/pattern.hpp4
-rw-r--r--src/hir/type.cpp8
-rw-r--r--src/hir_typeck/common.hpp2
-rw-r--r--src/include/cpp_unpack.h2
-rw-r--r--src/include/debug.hpp9
-rw-r--r--src/include/serialise.hpp2
-rw-r--r--src/include/tagged_union.hpp135
-rw-r--r--src/main.cpp56
-rw-r--r--src/parse/interpolated_fragment.hpp2
-rw-r--r--src/parse/token.hpp3
-rw-r--r--vsproject/mrustc.sln38
-rw-r--r--vsproject/mrustc.vcxproj264
-rw-r--r--vsproject/mrustc.vcxproj.filters402
-rw-r--r--vsproject/tu_test/main.cpp46
-rw-r--r--vsproject/tu_test/tu_test.vcxproj133
-rw-r--r--vsproject/tu_test/tu_test.vcxproj.filters22
24 files changed, 1047 insertions, 142 deletions
diff --git a/.gitignore b/.gitignore
index e9927073..a05f936f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,10 @@
+
+.*
+*.gch
+*.gch.dep
+*.sw[po]
+*~
+
/obj
/bin
/mrustc.depend
@@ -7,12 +14,14 @@
/crates.io
/test_deps_run-pass.mk
-/.obj
-*.gch
-*.gch.dep
-*.sw[po]
-*~
/output
+/vsproject/Win32
+/vsproject/x64
+/vsproject/tu_test/Win32
+/vsproject/tu_test/x64
+/vsproject/*.sdf
+/vsproject/*.depend
+/vsproject/*.opendb
/gitstats
diff --git a/src/ast/path.cpp b/src/ast/path.cpp
index da86b066..ebec5d5a 100644
--- a/src/ast/path.cpp
+++ b/src/ast/path.cpp
@@ -190,18 +190,18 @@ void Path::bind_variable(unsigned int slot)
}
void Path::bind_enum_var(const Enum& ent, const ::std::string& name, const ::std::vector<TypeRef>& /*args*/)
{
- unsigned int idx = 0;
- for( idx = 0; idx < ent.variants().size(); idx ++ )
- {
- if( ent.variants()[idx].m_name == name ) {
- break;
- }
- }
- if( idx == ent.variants().size() )
- throw ParseError::Generic("Enum variant not found");
+ auto it = ::std::find_if(ent.variants().begin(), ent.variants().end(), [&](const auto& x) { return x.m_name == name; });
+ if( it == ent.variants().end() )
+ {
+ throw ParseError::Generic("Enum variant not found");
+ }
+ unsigned int idx = it - ent.variants().begin();
DEBUG("Bound to enum variant '" << name << "' (#" << idx << ")");
- m_binding = PathBinding::make_EnumVar({ &ent, idx });
+ ::AST::PathBinding::Data_EnumVar tmp;
+ tmp.enum_ = &ent;
+ tmp.idx = idx;
+ m_binding = PathBinding::make_EnumVar(tmp);
}
Path& Path::operator+=(const Path& other)
diff --git a/src/ast/types.cpp b/src/ast/types.cpp
index ccd169d7..d49feccd 100644
--- a/src/ast/types.cpp
+++ b/src/ast/types.cpp
@@ -118,7 +118,7 @@ TypeRef TypeRef::clone() const
{
case TypeData::TAGDEAD: assert(!"Copying a destructed type");
#define _COPY(VAR) case TypeData::TAG_##VAR: return TypeRef(m_span, TypeData::make_##VAR(m_data.as_##VAR()) ); break;
- #define _CLONE(VAR, code...) case TypeData::TAG_##VAR: { auto& old = m_data.as_##VAR(); return TypeRef(m_span, TypeData::make_##VAR(code) ); } break;
+ #define _CLONE(VAR, ...) case TypeData::TAG_##VAR: { auto& old = m_data.as_##VAR(); return TypeRef(m_span, TypeData::make_##VAR(__VA_ARGS__) ); } break;
_COPY(None)
_COPY(Any)
_COPY(Bang)
diff --git a/src/common.hpp b/src/common.hpp
index 0b0fad14..a0130371 100644
--- a/src/common.hpp
+++ b/src/common.hpp
@@ -14,8 +14,8 @@
#define FMT(ss) (dynamic_cast< ::std::stringstream&>(::std::stringstream() << ss).str())
// XXX: Evil hack - Define 'mv$' to be ::std::move
#define mv$(x) ::std::move(x)
-#define box$(x...) ::make_unique_ptr(::std::move(x))
-#define rc_new$(x...) ::make_shared_ptr(::std::move(x))
+#define box$(...) ::make_unique_ptr(::std::move(__VA_ARGS__))
+#define rc_new$(...) ::make_shared_ptr(::std::move(__VA_ARGS__))
#include "include/debug.hpp"
#include "include/rustic.hpp" // slice and option
@@ -77,6 +77,7 @@ static inline Ordering ord(unsigned l, unsigned r)
else
return OrdLess;
}
+#if UINTPTR_MAX != UINT_MAX
static inline Ordering ord(::std::uintptr_t l, ::std::uintptr_t r)
{
if(l == r)
@@ -86,6 +87,7 @@ static inline Ordering ord(::std::uintptr_t l, ::std::uintptr_t r)
else
return OrdLess;
}
+#endif
static inline Ordering ord(const ::std::string& l, const ::std::string& r)
{
if(l == r)
diff --git a/src/expand/format_args.cpp b/src/expand/format_args.cpp
index 60c92952..deda6968 100644
--- a/src/expand/format_args.cpp
+++ b/src/expand/format_args.cpp
@@ -14,6 +14,7 @@
#include "../parse/interpolated_fragment.hpp"
#include <ast/crate.hpp> // for m_load_std
#include <ast/expr.hpp> // for ExprNode_*
+#include <cctype>
namespace {
@@ -527,7 +528,7 @@ class CFormatArgsExpander:
toks.push_back( Token(TOK_LIFETIME, "static") );
toks.push_back( Token(TOK_IDENT, "str") );
toks.push_back( Token(TOK_SEMICOLON) );
- toks.push_back( Token(fragments.size() + 1, CORETYPE_UINT) );
+ toks.push_back( Token(static_cast<uint64_t>(fragments.size() + 1), CORETYPE_UINT) );
toks.push_back( TokenTree(TOK_SQUARE_CLOSE) );
toks.push_back( Token(TOK_EQUAL) );
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp
index 1f1bc4e3..255546e7 100644
--- a/src/hir/from_ast.cpp
+++ b/src/hir/from_ast.cpp
@@ -702,7 +702,8 @@
{
if( ptr->m_datatype == CORETYPE_UINT || ptr->m_datatype == CORETYPE_ANY )
{
- unsigned int size_val = ptr->m_value;
+ // TODO: Limit check.
+ auto size_val = static_cast<unsigned int>( ptr->m_value );
return ::HIR::TypeRef::new_array( mv$(inner), size_val );
}
}
diff --git a/src/hir/hir.hpp b/src/hir/hir.hpp
index b87385a0..2f6b37df 100644
--- a/src/hir/hir.hpp
+++ b/src/hir/hir.hpp
@@ -97,8 +97,9 @@ public:
Literal m_value_res;
};
-struct Constant
+class Constant
{
+public:
// NOTE: The generics can't influence the value of this `const`
GenericParams m_params;
@@ -269,8 +270,9 @@ TAGGED_UNION(TraitValueItem, Constant,
(Static, Static),
(Function, Function)
);
-struct Trait
+class Trait
{
+public:
GenericParams m_params;
::std::string m_lifetime;
::std::vector< ::HIR::TraitPath > m_parent_traits;
diff --git a/src/hir/path.hpp b/src/hir/path.hpp
index eb9aca27..12e32dd1 100644
--- a/src/hir/path.hpp
+++ b/src/hir/path.hpp
@@ -16,7 +16,7 @@
namespace HIR {
-struct Trait;
+class Trait;
enum Compare {
Equal,
diff --git a/src/hir/pattern.hpp b/src/hir/pattern.hpp
index 51e20c5c..4c38b150 100644
--- a/src/hir/pattern.hpp
+++ b/src/hir/pattern.hpp
@@ -52,11 +52,11 @@ struct Pattern
{
TAGGED_UNION(Value, String,
(Integer, struct {
- enum ::HIR::CoreType type; // Str == _
+ ::HIR::CoreType type; // Str == _
uint64_t value; // Signed numbers are encoded as 2's complement
}),
(Float, struct {
- enum ::HIR::CoreType type; // Str == _
+ ::HIR::CoreType type; // Str == _
double value;
}),
(String, ::std::string),
diff --git a/src/hir/type.cpp b/src/hir/type.cpp
index 9b0bf766..07e9f477 100644
--- a/src/hir/type.cpp
+++ b/src/hir/type.cpp
@@ -173,12 +173,12 @@ void ::HIR::TypeRef::fmt(::std::ostream& os) const
),
(Closure,
os << "closure["<<e.node<<"]";
- #if 0
+ /*
os << "(";
for(const auto& t : e.m_arg_types)
os << t << ", ";
os << ") -> " << *e.m_rettype;
- #endif
+ */
)
)
}
@@ -370,7 +370,7 @@ Ordering HIR::TypeRef::ord(const ::HIR::TypeRef& x) const
return ::ord(*te.m_rettype, *xe.m_rettype);
),
(Closure,
- ORD( (::std::uintptr_t)te.node, xe.node);
+ ORD( reinterpret_cast<::std::uintptr_t>(te.node), reinterpret_cast<::std::uintptr_t>(xe.node) );
//assert( te.m_rettype == xe.m_rettype );
return OrdEqual;
)
@@ -813,7 +813,7 @@ bool ::HIR::TypeRef::match_test_generics(const Span& sp, const ::HIR::TypeRef& x
// TODO: Need to invoke const eval here? Or support cloning expressions? Or run consteval earlier.
if( const auto* ptr = dynamic_cast<const ::HIR::ExprNode_Literal*>(&**e.size) )
{
- size_val = ptr->m_data.as_Integer().m_value;
+ size_val = static_cast<unsigned int>( ptr->m_data.as_Integer().m_value );
}
else
{
diff --git a/src/hir_typeck/common.hpp b/src/hir_typeck/common.hpp
index 54d9b038..09a5d9b2 100644
--- a/src/hir_typeck/common.hpp
+++ b/src/hir_typeck/common.hpp
@@ -88,7 +88,7 @@ extern ::std::ostream& operator<<(::std::ostream& os, const MonomorphState& ms);
static inline t_cb_generic monomorphise_type_get_cb(const Span& sp, const ::HIR::TypeRef* self_ty, const ::HIR::PathParams* params_i, const ::HIR::PathParams* params_m, const ::HIR::PathParams* params_p=nullptr)
{
- return [=](const auto& gt)->const auto& {
+ return [=](const ::HIR::TypeRef& gt)->const ::HIR::TypeRef& {
const auto& ge = gt.m_data.as_Generic();
if( ge.binding == 0xFFFF ) {
ASSERT_BUG(sp, self_ty, "Self wasn't expected here");
diff --git a/src/include/cpp_unpack.h b/src/include/cpp_unpack.h
index d5087668..69417589 100644
--- a/src/include/cpp_unpack.h
+++ b/src/include/cpp_unpack.h
@@ -25,7 +25,7 @@
// Macro to obtain a numbered macro for argument counts
// - Raw variant
#define CC_GM_I(SUF,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,COUNT,...) SUF##COUNT
-#define CC_GM(SUF,...) CC_GM_I(SUF,__VA_ARGS__,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1)
+#define CC_GM(SUF,...) CC_EXP( CC_GM_I(SUF,__VA_ARGS__,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1) )
#define CC_ITERATE(fcn, args, ...) CC_EXP( CC_GM(CC_CALL_A, __VA_ARGS__)(fcn, args, __VA_ARGS__) )
diff --git a/src/include/debug.hpp b/src/include/debug.hpp
index ce2f89da..756d6ef2 100644
--- a/src/include/debug.hpp
+++ b/src/include/debug.hpp
@@ -38,11 +38,14 @@ struct RepeatLitStr
}
};
-class NullSink:
- public ::std::ostream
+class NullSink
{
public:
- NullSink() {}
+ NullSink()
+ {}
+
+ template<typename T>
+ const NullSink& operator<<(const T&) const { return *this; }
};
class TraceLog
diff --git a/src/include/serialise.hpp b/src/include/serialise.hpp
index 6a9abf95..8b1cea98 100644
--- a/src/include/serialise.hpp
+++ b/src/include/serialise.hpp
@@ -141,7 +141,7 @@ protected:
public:
virtual void item(bool& b) = 0;
virtual void item(uint64_t& v) = 0;
- void item(unsigned int& v) { uint64_t v1; this->item(v1); v = v1; }
+ void item(unsigned int& v) { uint64_t v1; this->item(v1); v = static_cast<unsigned int>(v1); }
virtual void item(int64_t& val) = 0;
virtual void item(double& v) = 0;
virtual void item(::std::string& s) = 0;
diff --git a/src/include/tagged_union.hpp b/src/include/tagged_union.hpp
index 9bd060d6..fbd42a77 100644
--- a/src/include/tagged_union.hpp
+++ b/src/include/tagged_union.hpp
@@ -10,59 +10,59 @@
//#include "cpp_unpack.h"
#include <cassert>
+#include <string>
+
+#define TU_FIRST(a, ...) a
+#define TU_EXP1(x) x
+#define TU_EXP(...) __VA_ARGS__
#define TU_CASE_ITEM(src, mod, var, name) mod auto& name = src.as_##var(); (void)&name;
#define TU_CASE_BODY(class,var, ...) case class::var: { __VA_ARGS__ } break;
#define TU_CASE(mod, class, var, name,src, ...) TU_CASE_BODY(mod,class,var, TU_CASE_ITEM(src,mod,var,name) __VA_ARGS__)
#define TU_CASE2(mod, class, var, n1,s1, n2,s2, ...) TU_CASE_BODY(mod,class,var, TU_CASE_ITEM(s1,mod,var,n1) TU_CASE_ITEM(s2,mod,var,n2) __VA_ARGS__)
-#define TU_FIRST(a, ...) a
// Argument iteration
-#define _DISP0(n)
-#define _DISP1(n, _1) n _1
-#define _DISP2(n, _1, _2) n _1 n _2
-#define _DISP3(n, v, v2, v3) n v n v2 n v3
-#define _DISP4(n, v, v2, v3, v4) n v n v2 n v3 n v4
-#define _DISP5(n, v, ...) n v _DISP4(n, __VA_ARGS__)
-#define _DISP6(n, v, ...) n v _DISP5(n, __VA_ARGS__)
-#define _DISP7(n, v, ...) n v _DISP6(n, __VA_ARGS__)
-#define _DISP8(n, v, ...) n v _DISP7(n, __VA_ARGS__)
-#define _DISP9(n, a1,a2,a3,a4, b1,b2,b3,b4, c1) _DISP4(n, a1,a2,a3,a4) _DISP3(n, b1,b2,b3) _DISP2(n, b4,c1)
-#define _DISP10(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2) _DISP4(n, a1,a2,a3,a4) _DISP4(n, b1,b2,b3,b4) _DISP2(n, c1,c2)
-#define _DISP11(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3) _DISP4(n, a1,a2,a3,a4) _DISP4(n, b1,b2,b3,b4) _DISP3(n, c1,c2,c3)
-#define _DISP12(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3,c4) _DISP4(n, a1,a2,a3,a4) _DISP4(n, b1,b2,b3,b4) _DISP4(n, c1,c2,c3,c4)
-#define _DISP13(n, a1,a2,a3,a4,a5, b1,b2,b3,b4, c1,c2,c3,c4) _DISP5(n, a1,a2,a3,a4,a5) _DISP4(n, b1,b2,b3,b4) _DISP4(n, c1,c2,c3,c4)
-#define _DISP14(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4) _DISP5(n, a1,a2,a3,a4,a5) _DISP5(n, b1,b2,b3,b4,b5) _DISP4(n, c1,c2,c3,c4)
-#define _DISP15(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5) _DISP5(n, a1,a2,a3,a4,a5) _DISP5(n, b1,b2,b3,b4,b5) _DISP5(n, c1,c2,c3,c4,c5)
-#define _DISP16(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5, d1) _DISP5(n, a1,a2,a3,a4,a5) _DISP5(n, b1,b2,b3,b4,b5) _DISP5(n, c1,c2,c3,c4,c5) _DISP1(n, d1)
-
-#define _DISPO0(n)
-#define _DISPO1(n, _1) n(_1)
-#define _DISPO2(n, _1, _2) n(_1) n(_2)
-#define _DISPO3(n, v, v2, v3) n(v) n(v2) n(v3)
-#define _DISPO4(n, v, v2, v3, v4) n(v) n(v2) n(v3) n(v4)
-#define _DISPO5(n, v, ...) n v _DISPO4(n, __VA_ARGS__)
-#define _DISPO6(n, v, ...) n v _DISPO5(n, __VA_ARGS__)
-#define _DISPO7(n, v, ...) n v _DISPO6(n, __VA_ARGS__)
-#define _DISPO8(n, v, ...) n v _DISPO7(n, __VA_ARGS__)
-#define _DISPO9(n, a1,a2,a3,a4, b1,b2,b3,b4, c1) _DISPO4(n, a1,a2,a3,a4) _DISPO3(n, b1,b2,b3) _DISPO2(n, b4,c1)
-#define _DISPO10(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2) _DISPO4(n, a1,a2,a3,a4) _DISPO4(n, b1,b2,b3,b4) _DISPO2(n, c1,c2)
-#define _DISPO11(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3) _DISPO4(n, a1,a2,a3,a4) _DISPO4(n, b1,b2,b3,b4) _DISPO3(n, c1,c2,c3)
-#define _DISPO12(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3,c4) _DISPO4(n, a1,a2,a3,a4) _DISPO4(n, b1,b2,b3,b4) _DISPO4(n, c1,c2,c3,c4)
-#define _DISPO13(n, a1,a2,a3,a4,a5, b1,b2,b3,b4, c1,c2,c3,c4) _DISPO5(n, a1,a2,a3,a4,a5) _DISPO4(n, b1,b2,b3,b4) _DISPO4(n, c1,c2,c3,c4)
-#define _DISPO14(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4) _DISPO5(n, a1,a2,a3,a4,a5) _DISPO5(n, b1,b2,b3,b4,b5) _DISPO4(n, c1,c2,c3,c4)
-#define _DISPO15(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5) _DISPO5(n, a1,a2,a3,a4,a5) _DISPO5(n, b1,b2,b3,b4,b5) _DISPO5(n, c1,c2,c3,c4,c5)
-#define _DISPO16(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5, d1) _DISPO5(n, a1,a2,a3,a4,a5) _DISPO5(n, b1,b2,b3,b4,b5) _DISPO5(n, c1,c2,c3,c4,c5) _DISPO1(n, d1)
+#define TU_DISP0(n)
+#define TU_DISP1(n, _1) n _1
+#define TU_DISP2(n, _1, _2) n _1 n _2
+#define TU_DISP3(n, v, v2, v3) n v n v2 n v3
+#define TU_DISP4(n, v, v2, v3, v4) n v n v2 n v3 n v4
+#define TU_DISP5(n, a1,a2,a3, b1,b2 ) TU_DISP3(n, a1,a2,a3) TU_DISP2(n, b1,b2)
+#define TU_DISP6(n, a1,a2,a3, b1,b2,b3) TU_DISP3(n, a1,a2,a3) TU_DISP3(n, b1,b2,b3)
+#define TU_DISP7(n, a1,a2,a3,a4, b1,b2,b3 ) TU_DISP4(n, a1,a2,a3,a4) TU_DISP3(n, b1,b2,b3)
+#define TU_DISP8(n, a1,a2,a3,a4, b1,b2,b3,b4) TU_DISP4(n, a1,a2,a3,a4) TU_DISP4(n, b1,b2,b3,b4)
+#define TU_DISP9(n, a1,a2,a3,a4, b1,b2,b3,b4, c1 ) TU_DISP4(n, a1,a2,a3,a4) TU_DISP3(n, b1,b2,b3 ) TU_DISP2(n, b4,c1)
+#define TU_DISP10(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2 ) TU_DISP4(n, a1,a2,a3,a4) TU_DISP4(n, b1,b2,b3,b4) TU_DISP2(n, c1,c2)
+#define TU_DISP11(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3 ) TU_DISP4(n, a1,a2,a3,a4) TU_DISP4(n, b1,b2,b3,b4) TU_DISP3(n, c1,c2,c3)
+#define TU_DISP12(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3,c4) TU_DISP4(n, a1,a2,a3,a4) TU_DISP4(n, b1,b2,b3,b4) TU_DISP4(n, c1,c2,c3,c4)
+#define TU_DISP13(n, a1,a2,a3,a4,a5, b1,b2,b3,b4, c1,c2,c3,c4) TU_DISP5(n, a1,a2,a3,a4,a5) TU_DISP4(n, b1,b2,b3,b4) TU_DISP4(n, c1,c2,c3,c4)
+#define TU_DISP14(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4 ) TU_DISP5(n, a1,a2,a3,a4,a5) TU_DISP5(n, b1,b2,b3,b4,b5) TU_DISP4(n, c1,c2,c3,c4)
+#define TU_DISP15(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5 ) TU_DISP5(n, a1,a2,a3,a4,a5) TU_DISP5(n, b1,b2,b3,b4,b5) TU_DISP5(n, c1,c2,c3,c4,c5)
+#define TU_DISP16(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5, d1) TU_DISP5(n, a1,a2,a3,a4,a5) TU_DISP5(n, b1,b2,b3,b4,b5) TU_DISP5(n, c1,c2,c3,c4,c5) TU_DISP1(n, d1)
+
+#define TU_DISPO0(n)
+#define TU_DISPO1(n, _1) n(_1)
+#define TU_DISPO2(n, _1, _2) n(_1) n(_2)
+#define TU_DISPO3(n, v, v2, v3) n(v) n(v2) n(v3)
+#define TU_DISPO4(n, v, v2, v3, v4) n(v) n(v2) n(v3) n(v4)
+#define TU_DISPO5(n, a1,a2,a3, b1,b2 ) TU_DISPO3(n, a1,a2,a3) TU_DISPO2(n, b1,b2)
+#define TU_DISPO6(n, a1,a2,a3, b1,b2,b3) TU_DISPO3(n, a1,a2,a3) TU_DISPO3(n, b1,b2,b3)
+#define TU_DISPO7(n, a1,a2,a3,a4, b1,b2,b3 ) TU_DISPO4(n, a1,a2,a3,a4) TU_DISPO3(n, b1,b2,b3)
+#define TU_DISPO8(n, a1,a2,a3,a4, b1,b2,b3,b4) TU_DISPO4(n, a1,a2,a3,a4) TU_DISPO4(n, b1,b2,b3,b4)
+#define TU_DISPO9(n, a1,a2,a3,a4, b1,b2,b3,b4, c1) TU_DISPO4(n, a1,a2,a3,a4) TU_DISPO3(n, b1,b2,b3) TU_DISPO2(n, b4,c1)
+#define TU_DISPO10(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2) TU_DISPO4(n, a1,a2,a3,a4) TU_DISPO4(n, b1,b2,b3,b4) TU_DISPO2(n, c1,c2)
+#define TU_DISPO11(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3) TU_DISPO4(n, a1,a2,a3,a4) TU_DISPO4(n, b1,b2,b3,b4) TU_DISPO3(n, c1,c2,c3)
+#define TU_DISPO12(n, a1,a2,a3,a4, b1,b2,b3,b4, c1,c2,c3,c4) TU_DISPO4(n, a1,a2,a3,a4) TU_DISPO4(n, b1,b2,b3,b4) TU_DISPO4(n, c1,c2,c3,c4)
+#define TU_DISPO13(n, a1,a2,a3,a4,a5, b1,b2,b3,b4, c1,c2,c3,c4) TU_DISPO5(n, a1,a2,a3,a4,a5) TU_DISPO4(n, b1,b2,b3,b4) TU_DISPO4(n, c1,c2,c3,c4)
+#define TU_DISPO14(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4) TU_DISPO5(n, a1,a2,a3,a4,a5) TU_DISPO5(n, b1,b2,b3,b4,b5) TU_DISPO4(n, c1,c2,c3,c4)
+#define TU_DISPO15(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5) TU_DISPO5(n, a1,a2,a3,a4,a5) TU_DISPO5(n, b1,b2,b3,b4,b5) TU_DISPO5(n, c1,c2,c3,c4,c5)
+#define TU_DISPO16(n, a1,a2,a3,a4,a5, b1,b2,b3,b4,b5, c1,c2,c3,c4,c5, d1) TU_DISPO5(n, a1,a2,a3,a4,a5) TU_DISPO5(n, b1,b2,b3,b4,b5) TU_DISPO5(n, c1,c2,c3,c4,c5) TU_DISPO1(n, d1)
#define TU_DISPA(n, a) n a
#define TU_DISPA1(n, a, _1) TU_DISPA(n, (TU_EXP a, TU_EXP _1))
-#define TU_DISPA2(n, a, _1, _2) TU_DISPA(n, (TU_EXP a, TU_EXP _1))/*
-*/ TU_DISPA(n, (TU_EXP a, TU_EXP _2))
-#define TU_DISPA3(n, a, _1, _2, _3) \
- TU_DISPA(n, (TU_EXP a, TU_EXP _1))/*
-*/ TU_DISPA(n, (TU_EXP a, TU_EXP _2))/*
-*/ TU_DISPA(n, (TU_EXP a, TU_EXP _3))
+#define TU_DISPA2(n, a, _1, _2) TU_DISPA(n, (TU_EXP a, TU_EXP _1)) TU_DISPA(n, (TU_EXP a, TU_EXP _2))
+#define TU_DISPA3(n, a, _1, _2, _3) TU_DISPA(n, (TU_EXP a, TU_EXP _1)) TU_DISPA(n, (TU_EXP a, TU_EXP _2)) TU_DISPA(n, (TU_EXP a, TU_EXP _3))
#define TU_DISPA4(n, a, a1,a2, b1,b2) TU_DISPA2(n,a, a1,a2) TU_DISPA2(n,a, b1,b2)
#define TU_DISPA5(n, a, a1,a2,a3, b1,b2) TU_DISPA3(n,a, a1,a2,a3) TU_DISPA2(n,a, b1,b2)
#define TU_DISPA6(n, a, a1,a2,a3, b1,b2,b3) TU_DISPA3(n,a, a1,a2,a3) TU_DISPA3(n,a, b1,b2,b3)
@@ -80,29 +80,10 @@
// Macro to obtain a numbered macro for argument counts
// - Raw variant
#define TU_GM_I(SUF,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,COUNT,...) SUF##COUNT
-#define TU_GM(SUF,...) TU_GM_I(SUF, __VA_ARGS__,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
+#define TU_GM(SUF,...) TU_EXP1( TU_GM_I(SUF, __VA_ARGS__,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0) )
// - _DISP based variant (for iteration)
-#define TU_GMX(...) TU_GM(_DISP, __VA_ARGS__)
-#define TU_GMA(...) TU_GM(TU_DISPA, __VA_ARGS__)
-
-// Sizes of structures
-#define TU_SO(name, ...) sizeof(TU_DATANAME(name))
-#define MAX2(a, b) (a < b ? b : a)
-#define MAXS2(a, b) (TU_SO a < TU_SO b ? TU_SO b : TU_SO a)
-#define MAXS3(a, b, c) MAX2(MAXS2(a, b), TU_SO c)
-#define MAXS4(a, b, c, d) MAX2(MAXS2(a, b), MAXS2(c, d))
-#define MAXS5(a, b, c, d, e) MAX2(MAXS3(a, b, c), MAXS2(d, e))
-#define MAXS6(a, b, c, d, e, f) MAX2(MAXS3(a, b, c), MAXS3(d, e, f))
-#define MAXS7(a, b, c, d, e, f, g) MAX2(MAXS3(a, b, c), MAXS4(d, e, f, g))
-#define MAXS8(a, b, c, d, e, f, g, h) MAX2(MAXS4(a, b, c, d), MAXS4(e, f, g, h))
-#define MAXS9(a, b, c, d, e, f, g, h, i) MAX2(MAXS4(a, b, c, d), MAXS5(e, f, g, h, i))
-#define MAXS10(a, b, c, d, e, f, g, h, i, j) MAX2(MAXS5(a, b, c, d, e), MAXS5(f, g, h, i, j))
-#define MAXS11(a, b, c, d, e, f, g, h, i, j, k) MAX2(MAXS6(a, b, c, d, e, f), MAXS5(g, h, i, j, k))
-#define MAXS12(a, b, c, d, e, f, g, h, i, j, k, l) MAX2(MAXS6(a, b, c, d, e, f), MAXS6(g, h, i, j, k, l))
-#define MAXS13(a1,a2,a3,a4,a5,a6,a7, b1,b2,b3,b4,b5,b6) MAX2(MAXS7(a1,a2,a3,a4,a5,a6,a7), MAXS6(b1,b2,b3,b4,b5,b6))
-#define MAXS14(a1,a2,a3,a4,a5,a6,a7, b1,b2,b3,b4,b5,b6,b7) MAX2(MAXS7(a1,a2,a3,a4,a5,a6,a7), MAXS7(b1,b2,b3,b4,b5,b6,b7))
-#define MAXS15(a1,a2,a3,a4,a5,a6,a7,a8, b1,b2,b3,b4,b5,b6,b7) MAX2(MAXS8(a1,a2,a3,a4,a5,a6,a7,a8), MAXS7(b1,b2,b3,b4,b5,b6,b7))
-#define MAXS16(a1,a2,a3,a4,a5,a6,a7,a8, b1,b2,b3,b4,b5,b6,b7,b8) MAX2(MAXS8(a1,a2,a3,a4,a5,a6,a7,a8), MAXS8(b1,b2,b3,b4,b5,b6,b7,b8))
+#define TU_GMX(...) TU_EXP1( TU_GM(TU_DISP, __VA_ARGS__) )
+#define TU_GMA(...) TU_EXP1( TU_GM(TU_DISPA, __VA_ARGS__) )
// TODO: use `decltype` in place of the `class` argument to TU_MATCH/TU_IFLET
// "match"-like statement
@@ -119,12 +100,12 @@
*/}
#define TU_MATCH_BIND1(TAG, VAR, NAME) /*MATCH_BIND*/ auto& NAME = (VAR).as_##TAG(); (void)&NAME;
#define TU_MATCH_BIND2_(TAG, v1,v2, n1,n2) TU_MATCH_BIND1(TAG, v1, n1) TU_MATCH_BIND1(TAG, v2, n2)
-#define TU_MATCH_BIND2(...) TU_MATCH_BIND2_(__VA_ARGS__) // << Exists to cause expansion of the vars
+#define TU_MATCH_BIND2(...) TU_EXP1( TU_MATCH_BIND2_(__VA_ARGS__) ) // << Exists to cause expansion of the vars
#define TU_MATCH_ARM(CLASS, VAR, NAME, TAG, ...) case CLASS::TAG_##TAG: {/*
*/ TU_GM(TU_MATCH_BIND, TU_EXP VAR)(TAG, TU_EXP VAR , TU_EXP NAME)/*
*/ __VA_ARGS__/*
*/} break;
-#define TU_MATCH_ARMS(CLASS, VAR, NAME, ...) TU_GMA(__VA_ARGS__)(TU_MATCH_ARM, (CLASS, VAR, NAME), __VA_ARGS__)
+#define TU_MATCH_ARMS(CLASS, VAR, NAME, ...) TU_EXP1( TU_GMA(__VA_ARGS__)(TU_MATCH_ARM, (CLASS, VAR, NAME), __VA_ARGS__) )
#define TU_IFLET(CLASS, VAR, TAG, NAME, ...) if(VAR.tag() == CLASS::TAG_##TAG) { auto& NAME = VAR.as_##TAG(); (void)&NAME; __VA_ARGS__ }
@@ -143,8 +124,7 @@
// Define a tagged union constructor
#define TU_CONS(__name, name, ...) TU_CONS_I(__name, name, TU_DATANAME(name))
-// Type definitions
-#define TU_EXP(...) __VA_ARGS__
+// Type definitions_
#define TU_TYPEDEF(name, ...) typedef __VA_ARGS__ TU_DATANAME(name);/*
*/
@@ -164,19 +144,18 @@
// "tag_from_str" internals
#define TU_FROMSTR_CASE(tag,...) else if(str == #tag) return TAG_##tag;/*
*/
-#define TU_FROMSTR_CASES(...) TU_GMX(__VA_ARGS__)(TU_FROMSTR_CASE,__VA_ARGS__)
+#define TU_FROMSTR_CASES(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_FROMSTR_CASE,__VA_ARGS__) )
#define TU_UNION_FIELD(tag, ...) TU_DATANAME(tag) tag;/*
*/
-#define TU_UNION_FIELDS(...) TU_GMX(__VA_ARGS__)(TU_UNION_FIELD,__VA_ARGS__)
+#define TU_UNION_FIELDS(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_UNION_FIELD,__VA_ARGS__) )
-#define MAXS(...) TU_GM(MAXS,__VA_ARGS__)(__VA_ARGS__)
-#define TU_CONSS(_name, ...) TU_GMA(__VA_ARGS__)(TU_CONS, (_name), __VA_ARGS__)
-#define TU_TYPEDEFS(...) TU_GMX(__VA_ARGS__)(TU_TYPEDEF ,__VA_ARGS__)
-#define TU_TAGS(...) TU_GMX(__VA_ARGS__)(TU_TAG ,__VA_ARGS__)
-#define TU_DEST_CASES(...) TU_GMX(__VA_ARGS__)(TU_DEST_CASE,__VA_ARGS__)
-#define TU_MOVE_CASES(...) TU_GMX(__VA_ARGS__)(TU_MOVE_CASE,__VA_ARGS__)
-#define TU_TOSTR_CASES(...) TU_GMX(__VA_ARGS__)(TU_TOSTR_CASE ,__VA_ARGS__)
+#define TU_CONSS(_name, ...) TU_EXP1( TU_GMA(__VA_ARGS__)(TU_CONS, (_name), __VA_ARGS__) )
+#define TU_TYPEDEFS(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_TYPEDEF ,__VA_ARGS__) )
+#define TU_TAGS(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_TAG ,__VA_ARGS__) )
+#define TU_DEST_CASES(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_DEST_CASE ,__VA_ARGS__) )
+#define TU_MOVE_CASES(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_MOVE_CASE ,__VA_ARGS__) )
+#define TU_TOSTR_CASES(...) TU_EXP1( TU_GMX(__VA_ARGS__)(TU_TOSTR_CASE,__VA_ARGS__) )
/**
* Define a new tagged union
@@ -191,7 +170,7 @@
* );
* ```
*/
-#define TAGGED_UNION(_name, _def, ...) TAGGED_UNION_EX(_name, (), _def, (__VA_ARGS__), (), (), ())
+#define TAGGED_UNION(_name, _def, ...) TU_EXP1( TAGGED_UNION_EX(_name, (), _def, (TU_EXP(__VA_ARGS__)), (), (), ()) )
#define TAGGED_UNION_EX(_name, _inherit, _def, _variants, _extra_move, _extra_assign, _extra) \
class _name TU_EXP _inherit { \
typedef _name self_t;/*
diff --git a/src/main.cpp b/src/main.cpp
index 3eb385f7..4c8d3104 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -239,19 +239,18 @@ int main(int argc, char *argv[])
crate_name = ::std::string(params.infile.begin() + s, params.infile.begin() + e);
for(auto& b : crate_name)
{
- switch(b)
- {
- case '0' ... '9':
- case 'A' ... 'Z':
- case 'a' ... 'z':
- case '_':
- break;
- case '-':
- b = '_';
- break;
- default:
- break;
- }
+ if ('0' <= b && b <= '9') {
+ }
+ else if ('A' <= b && b <= 'Z') {
+ }
+ else if (b == '_') {
+ }
+ else if (b == '-') {
+ b = '_';
+ }
+ else {
+ // TODO: Error?
+ }
}
}
crate.m_crate_name = crate_name;
@@ -525,12 +524,14 @@ ProgramParams::ProgramParams(int argc, char *argv[])
if( arg[0] != '-' )
{
- if( this->infile != "" )
- ;
- this->infile = arg;
-
- if( this->infile == "" )
- ;
+ if (this->infile == "")
+ {
+ this->infile = arg;
+ }
+ else
+ {
+ // TODO: Error
+ }
}
else if( arg[1] != '-' )
{
@@ -593,14 +594,15 @@ ProgramParams::ProgramParams(int argc, char *argv[])
}
this->crate_path = argv[++i];
}
- else if( strcmp(arg, "--out-dir") == 0 ) {
- if( i == argc - 1 ) {
- ::std::cerr << "Flag " << arg << " requires an argument" << ::std::endl;
- exit(1);
- }
- this->output_dir = argv[++i];
- if( this->output_dir == "" )
- ;
+ else if (strcmp(arg, "--out-dir") == 0) {
+ if (i == argc - 1) {
+ ::std::cerr << "Flag " << arg << " requires an argument" << ::std::endl;
+ exit(1);
+ }
+ this->output_dir = argv[++i];
+ if (this->output_dir == "") {
+ // TODO: Error?
+ }
if( this->output_dir.back() != '/' )
this->output_dir += '/';
}
diff --git a/src/parse/interpolated_fragment.hpp b/src/parse/interpolated_fragment.hpp
index a3e72816..1b18845a 100644
--- a/src/parse/interpolated_fragment.hpp
+++ b/src/parse/interpolated_fragment.hpp
@@ -11,7 +11,7 @@ namespace AST {
class Path;
class ExprNode;
class MetaItem;
- template<typename T> class Named;
+ template<typename T> struct Named;
class Item;
};
diff --git a/src/parse/token.hpp b/src/parse/token.hpp
index 0fcf0ed7..03117981 100644
--- a/src/parse/token.hpp
+++ b/src/parse/token.hpp
@@ -49,8 +49,9 @@ namespace AST {
class ExprNode;
class MetaItem;
class Item;
+
template<typename T>
- class Named;
+ struct Named;
};
class InterpolatedFragment;
diff --git a/vsproject/mrustc.sln b/vsproject/mrustc.sln
new file mode 100644
index 00000000..a74f29e3
--- /dev/null
+++ b/vsproject/mrustc.sln
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.24720.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mrustc", "mrustc.vcxproj", "{12AA9964-C1BD-406A-9545-43EE63230EBE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tu_test", "tu_test\tu_test.vcxproj", "{F0A80ABB-A11A-492C-B5FC-E26C29A988D8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Debug|x64.ActiveCfg = Debug|x64
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Debug|x64.Build.0 = Debug|x64
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Debug|x86.ActiveCfg = Debug|Win32
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Debug|x86.Build.0 = Debug|Win32
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Release|x64.ActiveCfg = Release|x64
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Release|x64.Build.0 = Release|x64
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Release|x86.ActiveCfg = Release|Win32
+ {12AA9964-C1BD-406A-9545-43EE63230EBE}.Release|x86.Build.0 = Release|Win32
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Debug|x64.ActiveCfg = Debug|x64
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Debug|x64.Build.0 = Debug|x64
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Debug|x86.ActiveCfg = Debug|Win32
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Debug|x86.Build.0 = Debug|Win32
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Release|x64.ActiveCfg = Release|x64
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Release|x64.Build.0 = Release|x64
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Release|x86.ActiveCfg = Release|Win32
+ {F0A80ABB-A11A-492C-B5FC-E26C29A988D8}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/vsproject/mrustc.vcxproj b/vsproject/mrustc.vcxproj
new file mode 100644
index 00000000..1f277488
--- /dev/null
+++ b/vsproject/mrustc.vcxproj
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{12AA9964-C1BD-406A-9545-43EE63230EBE}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../src/include;../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <Optimization>Disabled</Optimization>
+ <PreprocessToFile>false</PreprocessToFile>
+ <AssemblerListingLocation>$(IntDir)dummy\%(RelativeDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)dummy\%(RelativeDir)</ObjectFileName>
+ </ClCompile>
+ <Link>
+ <TargetMachine>MachineX86</TargetMachine>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../src/include;../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <PreprocessToFile>false</PreprocessToFile>
+ <AssemblerListingLocation>$(IntDir)dummy\%(RelativeDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)dummy\%(RelativeDir)</ObjectFileName>
+ </ClCompile>
+ <Link>
+ <TargetMachine>MachineX86</TargetMachine>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../src/include;../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessToFile>false</PreprocessToFile>
+ <AssemblerListingLocation>$(IntDir)dummy\%(RelativeDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)dummy\%(RelativeDir)</ObjectFileName>
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>../src/include;../src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessToFile>false</PreprocessToFile>
+ <AssemblerListingLocation>$(IntDir)dummy\%(RelativeDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)dummy\%(RelativeDir)</ObjectFileName>
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\src\ast\ast.cpp" />
+ <ClCompile Include="..\src\ast\crate.cpp" />
+ <ClCompile Include="..\src\ast\dump.cpp" />
+ <ClCompile Include="..\src\ast\expr.cpp" />
+ <ClCompile Include="..\src\ast\path.cpp" />
+ <ClCompile Include="..\src\ast\pattern.cpp" />
+ <ClCompile Include="..\src\ast\types.cpp" />
+ <ClCompile Include="..\src\debug.cpp" />
+ <ClCompile Include="..\src\expand\cfg.cpp" />
+ <ClCompile Include="..\src\expand\concat.cpp" />
+ <ClCompile Include="..\src\expand\derive.cpp" />
+ <ClCompile Include="..\src\expand\file_line.cpp" />
+ <ClCompile Include="..\src\expand\format_args.cpp" />
+ <ClCompile Include="..\src\expand\lang_item.cpp" />
+ <ClCompile Include="..\src\expand\macro_rules.cpp" />
+ <ClCompile Include="..\src\expand\mod.cpp" />
+ <ClCompile Include="..\src\expand\std_prelude.cpp" />
+ <ClCompile Include="..\src\expand\stringify.cpp" />
+ <ClCompile Include="..\src\hir\crate_ptr.cpp" />
+ <ClCompile Include="..\src\hir\expr.cpp" />
+ <ClCompile Include="..\src\hir\expr_ptr.cpp" />
+ <ClCompile Include="..\src\hir\from_ast.cpp" />
+ <ClCompile Include="..\src\hir\from_ast_expr.cpp" />
+ <ClCompile Include="..\src\hir\generic_params.cpp" />
+ <ClCompile Include="..\src\hir\hir.cpp" />
+ <ClCompile Include="..\src\hir\path.cpp" />
+ <ClCompile Include="..\src\hir\pattern.cpp" />
+ <ClCompile Include="..\src\hir\type.cpp" />
+ <ClCompile Include="..\src\hir\type_ptr.cpp" />
+ <ClCompile Include="..\src\hir\visitor.cpp" />
+ <ClCompile Include="..\src\hir_conv\bind.cpp" />
+ <ClCompile Include="..\src\hir_conv\constant_evaluation.cpp" />
+ <ClCompile Include="..\src\hir_conv\expand_type.cpp" />
+ <ClCompile Include="..\src\hir_conv\resolve_ufcs.cpp" />
+ <ClCompile Include="..\src\hir_expand\annotate_value_usage.cpp" />
+ <ClCompile Include="..\src\hir_expand\closures.cpp" />
+ <ClCompile Include="..\src\hir_expand\ufcs_everything.cpp" />
+ <ClCompile Include="..\src\hir_typeck\expr_check.cpp" />
+ <ClCompile Include="..\src\hir_typeck\expr_cs.cpp" />
+ <ClCompile Include="..\src\hir_typeck\expr_visit.cpp" />
+ <ClCompile Include="..\src\hir_typeck\helpers.cpp" />
+ <ClCompile Include="..\src\hir_typeck\impl_ref.cpp" />
+ <ClCompile Include="..\src\hir_typeck\outer.cpp" />
+ <ClCompile Include="..\src\hir_typeck\static.cpp" />
+ <ClCompile Include="..\src\macro_rules\eval.cpp" />
+ <ClCompile Include="..\src\macro_rules\mod.cpp" />
+ <ClCompile Include="..\src\macro_rules\parse.cpp" />
+ <ClCompile Include="..\src\main.cpp" />
+ <ClCompile Include="..\src\mir\from_hir.cpp" />
+ <ClCompile Include="..\src\mir\from_hir_match.cpp" />
+ <ClCompile Include="..\src\mir\mir.cpp" />
+ <ClCompile Include="..\src\mir\mir_ptr.cpp" />
+ <ClCompile Include="..\src\parse\expr.cpp" />
+ <ClCompile Include="..\src\parse\interpolated_fragment.cpp" />
+ <ClCompile Include="..\src\parse\lex.cpp" />
+ <ClCompile Include="..\src\parse\parseerror.cpp" />
+ <ClCompile Include="..\src\parse\paths.cpp" />
+ <ClCompile Include="..\src\parse\pattern.cpp" />
+ <ClCompile Include="..\src\parse\root.cpp" />
+ <ClCompile Include="..\src\parse\token.cpp" />
+ <ClCompile Include="..\src\parse\types.cpp" />
+ <ClCompile Include="..\src\rc_string.cpp" />
+ <ClCompile Include="..\src\resolve\absolute.cpp" />
+ <ClCompile Include="..\src\resolve\index.cpp" />
+ <ClCompile Include="..\src\resolve\use.cpp" />
+ <ClCompile Include="..\src\serialise.cpp" />
+ <ClCompile Include="..\src\span.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\ast\ast.hpp" />
+ <ClInclude Include="..\src\ast\attrs.hpp" />
+ <ClInclude Include="..\src\ast\crate.hpp" />
+ <ClInclude Include="..\src\ast\expr.hpp" />
+ <ClInclude Include="..\src\ast\generics.hpp" />
+ <ClInclude Include="..\src\ast\item.hpp" />
+ <ClInclude Include="..\src\ast\macro.hpp" />
+ <ClInclude Include="..\src\ast\path.hpp" />
+ <ClInclude Include="..\src\ast\pattern.hpp" />
+ <ClInclude Include="..\src\ast\types.hpp" />
+ <ClInclude Include="..\src\common.hpp" />
+ <ClInclude Include="..\src\coretypes.hpp" />
+ <ClInclude Include="..\src\expand\cfg.hpp" />
+ <ClInclude Include="..\src\expand\macro_rules.hpp" />
+ <ClInclude Include="..\src\hir\crate_ptr.hpp" />
+ <ClInclude Include="..\src\hir\expr.hpp" />
+ <ClInclude Include="..\src\hir\expr_ptr.hpp" />
+ <ClInclude Include="..\src\hir\from_ast.hpp" />
+ <ClInclude Include="..\src\hir\generic_params.hpp" />
+ <ClInclude Include="..\src\hir\hir.hpp" />
+ <ClInclude Include="..\src\hir\path.hpp" />
+ <ClInclude Include="..\src\hir\pattern.hpp" />
+ <ClInclude Include="..\src\hir\type.hpp" />
+ <ClInclude Include="..\src\hir\type_ptr.hpp" />
+ <ClInclude Include="..\src\hir\visitor.hpp" />
+ <ClInclude Include="..\src\hir_conv\main_bindings.hpp" />
+ <ClInclude Include="..\src\hir_expand\main_bindings.hpp" />
+ <ClInclude Include="..\src\hir_typeck\expr_visit.hpp" />
+ <ClInclude Include="..\src\hir_typeck\helpers.hpp" />
+ <ClInclude Include="..\src\hir_typeck\impl_ref.hpp" />
+ <ClInclude Include="..\src\hir_typeck\main_bindings.hpp" />
+ <ClInclude Include="..\src\hir_typeck\static.hpp" />
+ <ClInclude Include="..\src\include\compile_error.hpp" />
+ <ClInclude Include="..\src\include\cpp_unpack.h" />
+ <ClInclude Include="..\src\include\debug.hpp" />
+ <ClInclude Include="..\src\include\main_bindings.hpp" />
+ <ClInclude Include="..\src\include\rc_string.hpp" />
+ <ClInclude Include="..\src\include\rustic.hpp" />
+ <ClInclude Include="..\src\include\serialise.hpp" />
+ <ClInclude Include="..\src\include\serialiser_texttree.hpp" />
+ <ClInclude Include="..\src\include\span.hpp" />
+ <ClInclude Include="..\src\include\synext.hpp" />
+ <ClInclude Include="..\src\include\synext_decorator.hpp" />
+ <ClInclude Include="..\src\include\synext_macro.hpp" />
+ <ClInclude Include="..\src\include\tagged_union.hpp" />
+ <ClInclude Include="..\src\macro_rules\macro_rules.hpp" />
+ <ClInclude Include="..\src\macro_rules\macro_rules_ptr.hpp" />
+ <ClInclude Include="..\src\macro_rules\pattern_checks.hpp" />
+ <ClInclude Include="..\src\mir\from_hir.hpp" />
+ <ClInclude Include="..\src\mir\main_bindings.hpp" />
+ <ClInclude Include="..\src\mir\mir.hpp" />
+ <ClInclude Include="..\src\mir\mir_ptr.hpp" />
+ <ClInclude Include="..\src\parse\common.hpp" />
+ <ClInclude Include="..\src\parse\eTokenType.enum.h" />
+ <ClInclude Include="..\src\parse\interpolated_fragment.hpp" />
+ <ClInclude Include="..\src\parse\lex.hpp" />
+ <ClInclude Include="..\src\parse\parseerror.hpp" />
+ <ClInclude Include="..\src\parse\token.hpp" />
+ <ClInclude Include="..\src\parse\tokentree.hpp" />
+ <ClInclude Include="..\src\resolve\main_bindings.hpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/vsproject/mrustc.vcxproj.filters b/vsproject/mrustc.vcxproj.filters
new file mode 100644
index 00000000..a25022bf
--- /dev/null
+++ b/vsproject/mrustc.vcxproj.filters
@@ -0,0 +1,402 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\src\debug.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\rc_string.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\serialise.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\span.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\ast.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\crate.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\expr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\path.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\pattern.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\types.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\cfg.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\concat.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\derive.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\file_line.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\format_args.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\lang_item.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\macro_rules.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\mod.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\std_prelude.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\expand\stringify.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\crate_ptr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\expr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\expr_ptr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\from_ast.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\from_ast_expr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\generic_params.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\hir.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\path.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\pattern.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\type.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\type_ptr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir\visitor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_conv\bind.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_conv\constant_evaluation.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_conv\expand_type.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_conv\resolve_ufcs.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_expand\annotate_value_usage.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_expand\closures.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_expand\ufcs_everything.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\expr_check.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\expr_cs.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\expr_visit.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\impl_ref.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\outer.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\hir_typeck\static.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\macro_rules\eval.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\macro_rules\mod.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\macro_rules\parse.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\mir\from_hir.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\mir\from_hir_match.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\mir\mir.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\mir\mir_ptr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\expr.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\interpolated_fragment.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\lex.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\parseerror.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\paths.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\pattern.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\root.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\token.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\parse\types.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\resolve\absolute.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\resolve\index.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\resolve\use.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\ast\dump.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\common.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\coretypes.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\ast.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\attrs.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\crate.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\expr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\generics.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\item.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\macro.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\path.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\pattern.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\ast\types.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\expand\cfg.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\expand\macro_rules.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\crate_ptr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\expr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\expr_ptr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\from_ast.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\generic_params.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\hir.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\path.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\pattern.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\type.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\type_ptr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir\visitor.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_conv\main_bindings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_expand\main_bindings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_typeck\expr_visit.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_typeck\helpers.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_typeck\impl_ref.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_typeck\main_bindings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\hir_typeck\static.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\cpp_unpack.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\compile_error.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\debug.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\main_bindings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\rc_string.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\rustic.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\serialise.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\serialiser_texttree.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\span.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\synext.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\synext_decorator.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\synext_macro.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\include\tagged_union.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\macro_rules\macro_rules.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\macro_rules\macro_rules_ptr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\macro_rules\pattern_checks.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\mir\from_hir.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\mir\main_bindings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\mir\mir.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\mir\mir_ptr.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\eTokenType.enum.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\common.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\interpolated_fragment.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\lex.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\parseerror.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\token.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\parse\tokentree.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\resolve\main_bindings.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/vsproject/tu_test/main.cpp b/vsproject/tu_test/main.cpp
new file mode 100644
index 00000000..48f7a26c
--- /dev/null
+++ b/vsproject/tu_test/main.cpp
@@ -0,0 +1,46 @@
+
+#include "../../src/include/tagged_union.hpp"
+
+TAGGED_UNION_EX(TestTu, (), Foo, (
+ (Foo, struct {
+ }),
+ (Bar, struct {
+ }),
+ (Baz, unsigned int)
+ ),
+ (), (), ()
+ );
+TAGGED_UNION(TestTu2, Foo,
+ (Foo, struct {
+ }),
+ (Bar, struct {
+ }),
+ (Baz, unsigned int)
+ );
+
+int main()
+{
+ TestTu tmp;
+
+ tmp = TestTu(123);
+
+ TestTu tmp2 = TestTu::make_Bar({});
+
+ TU_MATCHA( (tmp), (e),
+ (Foo,
+ ),
+ (Bar,
+ ),
+ (Baz,
+ )
+ )
+
+ TU_MATCHA((tmp,tmp2), (e,e2),
+ (Foo,
+ ),
+ (Bar,
+ ),
+ (Baz,
+ )
+ )
+}
diff --git a/vsproject/tu_test/tu_test.vcxproj b/vsproject/tu_test/tu_test.vcxproj
new file mode 100644
index 00000000..4b43ecc8
--- /dev/null
+++ b/vsproject/tu_test/tu_test.vcxproj
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{F0A80ABB-A11A-492C-B5FC-E26C29A988D8}</ProjectGuid>
+ <RootNamespace>tu_test</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <IntDir>$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessToFile>false</PreprocessToFile>
+ <PreprocessKeepComments>false</PreprocessKeepComments>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessToFile>false</PreprocessToFile>
+ <PreprocessKeepComments>false</PreprocessKeepComments>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessToFile>false</PreprocessToFile>
+ <PreprocessKeepComments>false</PreprocessKeepComments>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <PreprocessToFile>false</PreprocessToFile>
+ <PreprocessKeepComments>false</PreprocessKeepComments>
+ </ClCompile>
+ <Link>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/vsproject/tu_test/tu_test.vcxproj.filters b/vsproject/tu_test/tu_test.vcxproj.filters
new file mode 100644
index 00000000..0d8d9e45
--- /dev/null
+++ b/vsproject/tu_test/tu_test.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="main.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file