summaryrefslogtreecommitdiffstats
path: root/source/slang/lower.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/lower.cpp')
-rw-r--r--source/slang/lower.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/source/slang/lower.cpp b/source/slang/lower.cpp
index a1b6dcf17..7a487d29f 100644
--- a/source/slang/lower.cpp
+++ b/source/slang/lower.cpp
@@ -5,6 +5,19 @@
#include "type-layout.h"
#include "visitor.h"
+// DEBUGGING
+#if 0
+#ifdef _WIN32
+#define WIN32_LEAN_AND_MEAN
+#define NOMINMAX
+#include <Windows.h>
+#undef WIN32_LEAN_AND_MEAN
+#undef NOMINMAX
+#endif
+#endif
+
+
+
namespace Slang
{
@@ -2166,12 +2179,22 @@ struct LoweringVisitor
DeclVisitor::dispatch(stmt->decl);
}
+ Modifiers shallowCloneModifiers(Modifiers const& oldModifiers)
+ {
+ RefPtr<SharedModifiers> shared = new SharedModifiers();
+ shared->next = oldModifiers.first;
+
+ Modifiers newModifiers;
+ newModifiers.first = shared;
+ return newModifiers;
+ }
+
void lowerStmtFields(
Stmt* loweredStmt,
Stmt* originalStmt)
{
loweredStmt->loc = originalStmt->loc;
- loweredStmt->modifiers = originalStmt->modifiers;
+ loweredStmt->modifiers = shallowCloneModifiers(originalStmt->modifiers);
}
void lowerScopeStmtFields(
@@ -2367,7 +2390,7 @@ struct LoweringVisitor
void lowerStmtCommon(Stmt* loweredStmt, Stmt* stmt)
{
- loweredStmt->modifiers = stmt->modifiers;
+ loweredStmt->modifiers = shallowCloneModifiers(stmt->modifiers);
}
void assign(
@@ -2665,7 +2688,7 @@ struct LoweringVisitor
// HACK: just doing a shallow copy of modifiers, which will
// suffice for most of them, but we need to do something
// better soon.
- loweredDecl->modifiers = decl->modifiers;
+ loweredDecl->modifiers = shallowCloneModifiers(decl->modifiers);
// deal with layout stuff
@@ -2964,7 +2987,6 @@ struct LoweringVisitor
loweredDecl);
}
-
return LoweredDecl(loweredDecl);
}
@@ -3209,7 +3231,7 @@ struct LoweringVisitor
primaryVarDecl->nameAndLoc.name = getName(name);
primaryVarDecl->type.type = tupleType;
- primaryVarDecl->modifiers = originalVarDecl->modifiers;
+ primaryVarDecl->modifiers = shallowCloneModifiers(originalVarDecl->modifiers);
tupleDecl->primaryDecl = primaryVarDecl;