diff options
| author | Tim Foley <tfoley@nvidia.com> | 2017-06-16 09:09:09 -0700 |
|---|---|---|
| committer | Tim Foley <tfoley@nvidia.com> | 2017-06-16 09:09:09 -0700 |
| commit | 9ba8ce30f8314a79169e6d9cfa12e5db7239693f (patch) | |
| tree | 587db9fd5b9920f39104ea6467de59d265188370 /source/slang/check.cpp | |
| parent | 0bf3d6d4db7409fcd288ff69e75e8e8b4f082969 (diff) | |
Bug fix: handle unchecked operator application in emit logic
When in rewriter mode, the emit logic will never see function applications inside function bodies, but it *will* see function application expressions at global scope, and some of these expressions might be unchecked.
The challenge here is that even simple math operations now show up as function calls, so we need a bit of special-case logic to detect unchecked calls and then emit them using the syntax they were written with (e.g., use infix syntax if they were written as an infix expression).
Diffstat (limited to 'source/slang/check.cpp')
| -rw-r--r-- | source/slang/check.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/source/slang/check.cpp b/source/slang/check.cpp index 7d101d070..0827641d1 100644 --- a/source/slang/check.cpp +++ b/source/slang/check.cpp @@ -119,7 +119,7 @@ namespace Slang auto expr = new MemberExpressionSyntaxNode(); expr->Position = originalExpr->Position; expr->BaseExpression = baseExpr; - expr->MemberName = declRef.GetName(); + expr->name = declRef.GetName(); expr->Type = GetTypeForDeclRef(declRef); expr->declRef = declRef; return expr; @@ -128,7 +128,7 @@ namespace Slang { auto expr = new VarExpressionSyntaxNode(); expr->Position = originalExpr->Position; - expr->Variable = declRef.GetName(); + expr->name = declRef.GetName(); expr->Type = GetTypeForDeclRef(declRef); expr->declRef = declRef; return expr; @@ -4207,9 +4207,9 @@ namespace Slang String funcName; if (auto baseVar = funcExpr.As<VarExpressionSyntaxNode>()) - funcName = baseVar->Variable; + funcName = baseVar->name; else if(auto baseMemberRef = funcExpr.As<MemberExpressionSyntaxNode>()) - funcName = baseMemberRef->MemberName; + funcName = baseMemberRef->name; String argsList = GetCallSignatureString(expr); @@ -4547,7 +4547,7 @@ namespace Slang expr->Type = ExpressionType::Error; - auto lookupResult = LookUp(expr->Variable, expr->scope); + auto lookupResult = LookUp(expr->name, expr->scope); if (lookupResult.isValid()) { return createLookupResultExpr( @@ -4556,7 +4556,7 @@ namespace Slang expr); } - getSink()->diagnose(expr, Diagnostics::undefinedIdentifier2, expr->Variable); + getSink()->diagnose(expr, Diagnostics::undefinedIdentifier2, expr->name); return expr; } @@ -4674,9 +4674,9 @@ namespace Slang bool anyDuplicates = false; bool anyError = false; - for (int i = 0; i < memberRefExpr->MemberName.Length(); i++) + for (int i = 0; i < memberRefExpr->name.Length(); i++) { - auto ch = memberRefExpr->MemberName[i]; + auto ch = memberRefExpr->name[i]; int elementIndex = -1; switch (ch) { @@ -4798,7 +4798,7 @@ namespace Slang EnsureDecl(aggTypeDeclRef.getDecl(), DeclCheckState::Checked); - LookupResult lookupResult = LookUpLocal(expr->MemberName, aggTypeDeclRef); + LookupResult lookupResult = LookUpLocal(expr->name, aggTypeDeclRef); if (!lookupResult.isValid()) { goto fail; @@ -4894,7 +4894,7 @@ namespace Slang // catch-all fail: - getSink()->diagnose(expr, Diagnostics::noMemberOfNameInType, expr->MemberName, baseType); + getSink()->diagnose(expr, Diagnostics::noMemberOfNameInType, expr->name, baseType); expr->Type = ExpressionType::Error; return expr; } @@ -4906,7 +4906,7 @@ namespace Slang if (!baseType->Equals(ExpressionType::Error.Ptr()) && expr->Type->Equals(ExpressionType::Error.Ptr())) { - getSink()->diagnose(expr, Diagnostics::typeHasNoPublicMemberOfName, baseType, expr->MemberName); + getSink()->diagnose(expr, Diagnostics::typeHasNoPublicMemberOfName, baseType, expr->name); } return expr; } |
