[Scummvm-git-logs] scummvm master -> c64b3828538884ab45e36c0f8a38520bb70dc8db

sev- sev at scummvm.org
Wed May 20 09:59:24 UTC 2020


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0493fa932e DIRECTOR: LINGO: Fixed byte counter in lexer
c64b382853 DIRECTOR: LINGO: Improved warning on unbalanced parens


Commit: 0493fa932e91663a1fe7f27b58674bcde98ac980
    https://github.com/scummvm/scummvm/commit/0493fa932e91663a1fe7f27b58674bcde98ac980
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T11:59:10+02:00

Commit Message:
DIRECTOR: LINGO: Fixed byte counter in lexer

Changed paths:
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 59d552deac..9d34a1d83c 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -761,16 +761,12 @@ static void count() {
 	g_lingo->_lasttoken = yytext;
 	g_lingo->_lastbytenumber = g_lingo->_bytenumber;
 
-	while (*p && *p != '\n' && *p != '\r' && *p != '\xC2') {
-		p++;
-		g_lingo->_colnumber++;
-		g_lingo->_bytenumber++;
-	}
-
-	while (*p == '\n' || *p == '\r' || *p == '\xC2') {
+	while (*p) {
 		if (*p == '\n' || *p == '\xC2') {
 			g_lingo->_linenumber++;
 			g_lingo->_colnumber = 0;
+		} else {
+			g_lingo->_colnumber++;
 		}
 		p++;
 		g_lingo->_bytenumber++;
@@ -814,7 +810,7 @@ static int varCheck(int token, const char *name) {
 	return token;
 }
 
-#line 818 "engines/director/lingo/lingo-lex.cpp"
+#line 814 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -999,10 +995,10 @@ YY_DECL
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
     
-#line 119 "engines/director/lingo/lingo-lex.l"
+#line 115 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1006 "engines/director/lingo/lingo-lex.cpp"
+#line 1002 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1084,62 +1080,62 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 121 "engines/director/lingo/lingo-lex.l"
+#line 117 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 123 "engines/director/lingo/lingo-lex.l"
+#line 119 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 125 "engines/director/lingo/lingo-lex.l"
+#line 121 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tAFTER, "after"); }		// D3
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 126 "engines/director/lingo/lingo-lex.l"
+#line 122 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tAND, "and"); }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 127 "engines/director/lingo/lingo-lex.l"
+#line 123 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tBEFORE, "before"); }	// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 128 "engines/director/lingo/lingo-lex.l"
+#line 124 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tCHAR, "char"); }		// D3
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 129 "engines/director/lingo/lingo-lex.l"
+#line 125 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tCONTAINS, "contains"); }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 130 "engines/director/lingo/lingo-lex.l"
+#line 126 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tDOWN, "down"); }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 131 "engines/director/lingo/lingo-lex.l"
+#line 127 "engines/director/lingo/lingo-lex.l"
 { count(); return tIF; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 132 "engines/director/lingo/lingo-lex.l"
+#line 128 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSIF; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 133 "engines/director/lingo/lingo-lex.l"
+#line 129 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 134 "engines/director/lingo/lingo-lex.l"
+#line 130 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1166,72 +1162,72 @@ YY_RULE_SETUP
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 157 "engines/director/lingo/lingo-lex.l"
+#line 153 "engines/director/lingo/lingo-lex.l"
 { count(); return tFACTORY; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 158 "engines/director/lingo/lingo-lex.l"
+#line 154 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tEXIT, "exit"); }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 159 "engines/director/lingo/lingo-lex.l"
+#line 155 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tGLOBAL, "global"); }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 160 "engines/director/lingo/lingo-lex.l"
+#line 156 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 161 "engines/director/lingo/lingo-lex.l"
+#line 157 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 162 "engines/director/lingo/lingo-lex.l"
+#line 158 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tINSTANCE, "instance"); }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 163 "engines/director/lingo/lingo-lex.l"
+#line 159 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tINTERSECTS, "intersects"); }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 164 "engines/director/lingo/lingo-lex.l"
+#line 160 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tINTO, "into"); }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
+#line 161 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tIN, "in"); }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 166 "engines/director/lingo/lingo-lex.l"
+#line 162 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tITEM, "item"); }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 167 "engines/director/lingo/lingo-lex.l"
+#line 163 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tLINE, "line"); }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 168 "engines/director/lingo/lingo-lex.l"
+#line 164 "engines/director/lingo/lingo-lex.l"
 { count(); return checkImmediate(tLOOP); }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 169 "engines/director/lingo/lingo-lex.l"
+#line 165 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tMACRO, "macro"); }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
+#line 166 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1246,97 +1242,97 @@ YY_RULE_SETUP
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 181 "engines/director/lingo/lingo-lex.l"
+#line 177 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tMOD, "mod"); }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 182 "engines/director/lingo/lingo-lex.l"
+#line 178 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tMOVIE, "movie"); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 183 "engines/director/lingo/lingo-lex.l"
+#line 179 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tNEXT, "next"); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 184 "engines/director/lingo/lingo-lex.l"
+#line 180 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tNOT, "not"); }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 185 "engines/director/lingo/lingo-lex.l"
+#line 181 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tOF, "of"); }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 186 "engines/director/lingo/lingo-lex.l"
+#line 182 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tON, "on"); }		// D3
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 187 "engines/director/lingo/lingo-lex.l"
+#line 183 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tOPEN, "open"); }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 188 "engines/director/lingo/lingo-lex.l"
+#line 184 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tOR, "or"); }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 189 "engines/director/lingo/lingo-lex.l"
+#line 185 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 190 "engines/director/lingo/lingo-lex.l"
+#line 186 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tPLAY, "play"); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 191 "engines/director/lingo/lingo-lex.l"
+#line 187 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 192 "engines/director/lingo/lingo-lex.l"
+#line 188 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tPREVIOUS, "previous"); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 193 "engines/director/lingo/lingo-lex.l"
+#line 189 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tPROPERTY, "property"); }	// D4
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 194 "engines/director/lingo/lingo-lex.l"
+#line 190 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tPUT, "put"); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 195 "engines/director/lingo/lingo-lex.l"
+#line 191 "engines/director/lingo/lingo-lex.l"
 { count(); return checkImmediate(tREPEAT); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 196 "engines/director/lingo/lingo-lex.l"
+#line 192 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tSET, "set"); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 197 "engines/director/lingo/lingo-lex.l"
+#line 193 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tSTARTS, "starts"); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 198 "engines/director/lingo/lingo-lex.l"
+#line 194 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tTELL, "tell"); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 199 "engines/director/lingo/lingo-lex.l"
+#line 195 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1375,7 +1371,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 234 "engines/director/lingo/lingo-lex.l"
+#line 230 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1401,7 +1397,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 256 "engines/director/lingo/lingo-lex.l"
+#line 252 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1468,7 +1464,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 319 "engines/director/lingo/lingo-lex.l"
+#line 315 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1506,7 +1502,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 353 "engines/director/lingo/lingo-lex.l"
+#line 349 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1537,72 +1533,72 @@ YY_RULE_SETUP
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 380 "engines/director/lingo/lingo-lex.l"
+#line 376 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 381 "engines/director/lingo/lingo-lex.l"
+#line 377 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tTO, "to"); }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 382 "engines/director/lingo/lingo-lex.l"
+#line 378 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tSPRITE, "sprite"); }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 383 "engines/director/lingo/lingo-lex.l"
+#line 379 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tWITH, "with"); }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 384 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tWITHIN, "within"); }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 385 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tWHEN, "when"); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 386 "engines/director/lingo/lingo-lex.l"
+#line 382 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tWHILE, "while"); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 387 "engines/director/lingo/lingo-lex.l"
+#line 383 "engines/director/lingo/lingo-lex.l"
 { count(); return varCheck(tWORD, "word"); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 389 "engines/director/lingo/lingo-lex.l"
+#line 385 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
+#line 386 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 387 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 392 "engines/director/lingo/lingo-lex.l"
+#line 388 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 393 "engines/director/lingo/lingo-lex.l"
+#line 389 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 395 "engines/director/lingo/lingo-lex.l"
+#line 391 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1645,41 +1641,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 434 "engines/director/lingo/lingo-lex.l"
+#line 430 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 435 "engines/director/lingo/lingo-lex.l"
+#line 431 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 436 "engines/director/lingo/lingo-lex.l"
+#line 432 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 67:
 /* rule 67 can match eol */
 YY_RULE_SETUP
-#line 437 "engines/director/lingo/lingo-lex.l"
+#line 433 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 438 "engines/director/lingo/lingo-lex.l"
+#line 434 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 439 "engines/director/lingo/lingo-lex.l"
+#line 435 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 441 "engines/director/lingo/lingo-lex.l"
+#line 437 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1683 "engines/director/lingo/lingo-lex.cpp"
+#line 1679 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2676,7 +2672,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 441 "engines/director/lingo/lingo-lex.l"
+#line 437 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index ec5345db73..7e1832311e 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -53,16 +53,12 @@ static void count() {
 	g_lingo->_lasttoken = yytext;
 	g_lingo->_lastbytenumber = g_lingo->_bytenumber;
 
-	while (*p && *p != '\n' && *p != '\r' && *p != '\xC2') {
-		p++;
-		g_lingo->_colnumber++;
-		g_lingo->_bytenumber++;
-	}
-
-	while (*p == '\n' || *p == '\r' || *p == '\xC2') {
+	while (*p) {
 		if (*p == '\n' || *p == '\xC2') {
 			g_lingo->_linenumber++;
 			g_lingo->_colnumber = 0;
+		} else {
+			g_lingo->_colnumber++;
 		}
 		p++;
 		g_lingo->_bytenumber++;


Commit: c64b3828538884ab45e36c0f8a38520bb70dc8db
    https://github.com/scummvm/scummvm/commit/c64b3828538884ab45e36c0f8a38520bb70dc8db
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T11:59:10+02:00

Commit Message:
DIRECTOR: LINGO: Improved warning on unbalanced parens

Changed paths:
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index fcf388420d..0fbea2e73f 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -2675,7 +2675,7 @@ yyreduce:
                                 {
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
-			warning("# LINGO: Ignoring trailing paren");
+			warning("# LINGO: Ignoring trailing paren before %d:%d", g_lingo->_linenumber, g_lingo->_colnumber);
 			g_lingo->_ignoreError = false;
 			lex_unput('\n');	// We ate '\n', so put it back, otherwise lines will be joined
 		} else {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 5829f35fde..891b753439 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -453,7 +453,7 @@ simpleexpr: INT		{
 	| error	'\n'		{
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
-			warning("# LINGO: Ignoring trailing paren");
+			warning("# LINGO: Ignoring trailing paren before %d:%d", g_lingo->_linenumber, g_lingo->_colnumber);
 			g_lingo->_ignoreError = false;
 			lex_unput('\n');	// We ate '\n', so put it back, otherwise lines will be joined
 		} else {




More information about the Scummvm-git-logs mailing list