[Scummvm-git-logs] scummvm master -> 2f406baab960853b1ecbc9c229976941241b81a3

sev- sev at scummvm.org
Sat Apr 18 10:13:39 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:
d2b9051f80 DIRECTOR: LINGO: Fix execution of '<entity> of menuitems'
2f406baab9 DIRECTOR: LINGO: Fix code generation for menu entity getters


Commit: d2b9051f806f4a98b50409f01e568ae2c1ce09b6
    https://github.com/scummvm/scummvm/commit/d2b9051f806f4a98b50409f01e568ae2c1ce09b6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-18T12:12:56+02:00

Commit Message:
DIRECTOR: LINGO: Fix execution of '<entity> of menuitems'

Changed paths:
    engines/director/lingo/lingo-code.cpp


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index c948a400ce..51f6812994 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -50,6 +50,7 @@
 #include "director/lingo/lingo.h"
 #include "director/lingo/lingo-builtins.h"
 #include "director/lingo/lingo-code.h"
+#include "director/lingo/lingo-the.h"
 
 namespace Director {
 
@@ -436,12 +437,16 @@ void LC::c_theentityassign() {
 }
 
 void LC::c_themenuitementityassign() {
+	int entity = g_lingo->readInt();
+	int field  = g_lingo->readInt();
+
 	Datum d = g_lingo->pop();
 	Datum menuId = g_lingo->pop();
-	Datum menuItemId = g_lingo->pop();
+	Datum menuItemId;
 
-	int entity = g_lingo->readInt();
-	int field  = g_lingo->readInt();
+	if (entity != kTheMenuItems) { // "<entity> of menuitems" has 2 parameters
+		menuItemId = g_lingo->pop();
+	}
 
 	g_lingo->setTheMenuItemEntity(entity, menuId, field, menuItemId, d);
 }


Commit: 2f406baab960853b1ecbc9c229976941241b81a3
    https://github.com/scummvm/scummvm/commit/2f406baab960853b1ecbc9c229976941241b81a3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-04-18T12:12:56+02:00

Commit Message:
DIRECTOR: LINGO: Fix code generation for menu entity getters

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


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 51f6812994..e4ab35f9cf 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -130,6 +130,7 @@ static struct FuncDescr {
 	{ LC::c_telldone,		"c_telldone",		"" },
 	{ LC::c_theentityassign,"c_theentityassign","EF" },
 	{ LC::c_theentitypush,	"c_theentitypush",	"EF" }, // entity, field
+	{ LC::c_themenuentitypush,"c_themenuentitypush","EF" },
 	{ LC::c_themenuitementityassign,"c_themenuitementityassign","EF" },
 	{ LC::c_varpush,		"c_varpush",		"s" },
 	{ LC::c_voidpush,		"c_voidpush",		""  },
@@ -426,6 +427,21 @@ void LC::c_theentitypush() {
 	g_lingo->push(d);
 }
 
+void LC::c_themenuentitypush() {
+	int entity = g_lingo->readInt();
+	int field  = g_lingo->readInt();
+
+	Datum menuId = g_lingo->pop();
+	Datum menuItemId;
+
+	if (entity != kTheMenuItems) { // "<entity> of menuitems" has 1 parameter
+		menuItemId = g_lingo->pop();
+	}
+
+	Datum d = g_lingo->getTheMenuItemEntity(entity, menuId, field, menuItemId);
+	g_lingo->push(d);
+}
+
 void LC::c_theentityassign() {
 	Datum id = g_lingo->pop();
 
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 1120986563..02abd91164 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -85,6 +85,7 @@ namespace LC {
 	void c_swap();
 
 	void c_theentitypush();
+	void c_themenuentitypush();
 	void c_theentityassign();
 	void c_themenuitementityassign();
 	void c_objectfieldpush();
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 23102d9e3b..17b832a346 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -2089,10 +2089,10 @@ yyreduce:
 			YYERROR;
 		}
 
-		warning("STUB: menuItems entity");
-		g_lingo->code1(LC::c_themenuitementityassign);
+		g_lingo->code1(LC::c_themenuentitypush);
 		g_lingo->codeInt((yyvsp[-4].e)[0]);
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
+		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
 #line 2098 "engines/director/lingo/lingo-gr.cpp"
     break;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 30794aff0a..d7d0fbe28c 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -161,10 +161,10 @@ asgn: tPUT expr tINTO ID 		{
 			YYERROR;
 		}
 
-		warning("STUB: menuItems entity");
-		g_lingo->code1(LC::c_themenuitementityassign);
+		g_lingo->code1(LC::c_themenuentitypush);
 		g_lingo->codeInt($THEMENUITEMSENTITY[0]);
 		g_lingo->codeInt($THEMENUITEMSENTITY[1]);
+		g_lingo->code1(LC::c_assign);
 		$$ = $expr; }
 	| tPUT expr tAFTER expr 		{ $$ = g_lingo->code1(LC::c_after); }		// D3
 	| tPUT expr tBEFORE expr 		{ $$ = g_lingo->code1(LC::c_before); }		// D3
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index d070956d67..d5baf615c8 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -486,10 +486,17 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 }
 
 void Lingo::setTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId, Datum &d) {
-	warning("STUB: setTheMenuItemEntity(%s, \"%s\", %s, \"%s\", %s)", entity2str(entity), menuId.getPrintable().c_str(), field2str(field),
+	warning("STUB: setTheMenuItemEntity(%s, %s, %s, %s, %s)", entity2str(entity), menuId.getPrintable().c_str(), field2str(field),
 				menuItemId.getPrintable().c_str(), d.getPrintable().c_str());
 }
 
+Datum Lingo::getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId) {
+	warning("STUB: getTheMenuItemEntity(%s, %s, %s, %s)", entity2str(entity), menuId.getPrintable().c_str(), field2str(field),
+				menuItemId.getPrintable().c_str());
+
+	return Datum();
+}
+
 Datum Lingo::getTheSprite(Datum &id1, int field) {
 	Datum d;
 	int id = 0;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index f61cfe55ff..b5413fe0dd 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -287,6 +287,7 @@ public:
 	Datum getObjectField(Common::String &obj, int field);
 	void setObjectField(Common::String &obj, int field, Datum &d);
 	Datum getObjectRef(Common::String &obj, Common::String &field);
+	Datum getTheMenuItemEntity(int entity, Datum &menuId, int field, Datum &menuItemId);
 	const char *entity2str(int id);
 	const char *field2str(int id);
 




More information about the Scummvm-git-logs mailing list