Bläddra i källkod

Disallow initializers in anonymous delegate type references

Brian Fiete 3 år sedan
förälder
incheckning
15fd1b5f3f
1 ändrade filer med 7 tillägg och 1 borttagningar
  1. 7 1
      IDEHelper/Compiler/BfReducer.cpp

+ 7 - 1
IDEHelper/Compiler/BfReducer.cpp

@@ -4829,7 +4829,7 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF
 			auto tokenNode = BfNodeDynCast<BfTokenNode>(firstNode);
 			if (tokenNode != NULL)
 			{
-				int token = tokenNode->GetToken();
+				BfToken token = tokenNode->GetToken();
 				if (token == BfToken_Dot)
 				{
 					auto dotTypeRef = mAlloc->Alloc<BfDotTypeReference>();
@@ -4998,6 +4998,12 @@ BfTypeReference* BfReducer::DoCreateTypeRef(BfAstNode* firstNode, CreateTypeRefF
 					MEMBER_SET_CHECKED(delegateTypeRef, mCloseParen, closeNode);
 					mVisitorPos.MoveNext();
 
+					for (auto paramDecl : params)
+					{
+						if ((paramDecl != NULL) && (paramDecl->mEqualsNode != NULL))
+							Fail(StrFormat("Initializers cannot be used in anonymous %s type references. Consider creating a named %s type.", BfTokenToString(token), BfTokenToString(token)), paramDecl->mEqualsNode);
+					}
+
 					isHandled = true;
 					firstNode = delegateTypeRef;