summaryrefslogtreecommitdiffstats
path: root/source/slang/preprocessor.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoley@nvidia.com>2017-07-10 15:40:42 -0700
committerTim Foley <tfoley@nvidia.com>2017-07-11 12:07:09 -0700
commitbd7105ff8683a680d1270eca8cd74f9002144dbd (patch)
tree2e4911b6da6573d334117a08130be5c945c31b15 /source/slang/preprocessor.cpp
parent672332936ad7a4610ce0595493152c117476e823 (diff)
Initial work on handling resources in structs during cross-compilation
- The basic idea is that during the "lowering" pass, some types (notably: aggregate types that contain resource variables) will get turned into "tuple" types, which are pseduo-types that aren't meant to survive lowering. - An attempt to declare a variable with a tuple type expands into a tuple of declarations - An attempt to reference such a tuple-ified variable leads to a tuple of expressions - An attempt to extract a member from such a tuple expression will pick the appropriate sub-element - Dereference a tuple by dereferencing the primary expression - Expand a tuple in the argument list to a call into N arguments (by recursively flattening the tuple) - Don't create tuple types when not generating GLSL - Make sure to preserve the specialized type of a call expression through lowering, since emission of unchecked calls relies on that info. - TODO: maybe the infix/prefix/postifx/select information should come in as a side-band? Should we have modifiers on expressions? - Make sure to offset the layout for a nested field based on teh base offset of its parent variable, when generating declarations for nested fields
Diffstat (limited to 'source/slang/preprocessor.cpp')
-rw-r--r--source/slang/preprocessor.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/source/slang/preprocessor.cpp b/source/slang/preprocessor.cpp
index a186ce201..a4cccf4f4 100644
--- a/source/slang/preprocessor.cpp
+++ b/source/slang/preprocessor.cpp
@@ -1921,6 +1921,9 @@ static Token ReadToken(Preprocessor* preprocessor)
{
// Look at the next raw token in the input.
Token const& token = PeekRawToken(preprocessor);
+ if (token.Type == TokenType::EndOfFile)
+ return token;
+
// If we have a directive (`#` at start of line) then handle it
if ((token.Type == TokenType::Pound) && (token.flags & TokenFlag::AtStartOfLine))
@@ -1980,7 +1983,7 @@ static void FinalizePreprocessor(
while (input)
{
PreprocessorInputStream* parent = input->parent;
- DestroyInputStream(preprocessor, input);
+ EndInputStream(preprocessor, input);
input = parent;
}