Blob Blame History Raw
commit 14a0bcc74a121525917aefc8c9034e283e94884b
Author: Piotr Szydełko <wiertel@wiertel.info>
Date:   Sat May 20 08:14:27 2017 +0200

    Fix C# property initializer parsing
    
    int Property {get; set;} = 23;
    The parser was ending the property at the closing bracket,
    which resulted in the initializer being assigned to the following property.

diff --git a/src/scanner.l b/src/scanner.l
index 9ff082d4..632c8a51 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -6198,6 +6198,14 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 					  }
   					}
 <CSAccessorDecl>"{"			{ curlyCount++; }
+<CSAccessorDecl>"}"{B}*"="		{
+					  // fall back to next rule if it's not the right bracket
+					  if (curlyCount != 0) REJECT;
+					  current->initializer = "=";
+					  current->endBodyLine=yyLineNr;
+					  lastInitializerContext = FindMembers;
+					  BEGIN(ReadInitializer);
+					}
 <CSAccessorDecl>"}"			{ 
                                           if (curlyCount) 
                                           {
@@ -6207,6 +6215,8 @@ OPERATOR  "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
 					  {
   					    mtype = Method;
                                             virt = Normal;
+					    // not really important, but while we are at it
+					    current->endBodyLine=yyLineNr;
                                             unput(';');
 					    BEGIN(FindMembers);
 					  }