[Scummvm-git-logs] scummvm master -> 8201244f4f56826153b986d80ffe19268d63262a

rvanlaar noreply at scummvm.org
Fri Oct 7 11:18:01 UTC 2022


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

Summary:
2d58f23c39 DIRECTOR: use variables instead of repeated gets
c128f4056c DIRECTOR: make use of Datum constructor
c3e74c928d DIRECTOR: Fix dereference null return value
ae201e7adf JANITORIAL: DIRECTOR: Fix whitepace
8201244f4f DIRECTOR: Fix dereference null return value


Commit: 2d58f23c393af4e50b9c9ead9d5044ee307f17d7
    https://github.com/scummvm/scummvm/commit/2d58f23c393af4e50b9c9ead9d5044ee307f17d7
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-10-07T13:17:41+02:00

Commit Message:
DIRECTOR: use variables instead of repeated gets

Refactor repeated getCurrentMovie en getScores calls to one per
function.

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-the.cpp
    engines/director/transitions.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 4a2f640e0da..0bf81d370a3 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1574,8 +1574,9 @@ void LB::b_printFrom(int nargs) {
 }
 
 void LB::b_quit(int nargs) {
-	if (g_director->getCurrentMovie())
-		g_director->getCurrentMovie()->getScore()->_playState = kPlayStopped;
+	Movie *movie = g_director->getCurrentMovie();
+	if (movie)
+		movie->getScore()->_playState = kPlayStopped;
 
 	g_lingo->pushVoid();
 }
@@ -1814,12 +1815,15 @@ void LB::b_duplicate(int nargs) {
 	Datum to = g_lingo->pop();
 	Datum from = g_lingo->pop();
 
-	Frame *currentFrame = g_director->getCurrentMovie()->getScore()->_frames[g_director->getCurrentMovie()->getScore()->getCurrentFrame()];
-	CastMember *castMember = g_director->getCurrentMovie()->getCastMember(from.asMemberID());
-	auto channels = g_director->getCurrentMovie()->getScore()->_channels;
+	Movie *movie = g_director->getCurrentMovie();
+	Score *score = movie->getScore();
+
+	Frame *currentFrame = score->_frames[score->getCurrentFrame()];
+	CastMember *castMember = movie->getCastMember(from.asMemberID());
+	auto channels = score->_channels;
 
 	castMember->setModified(true);
-	g_director->getCurrentMovie()->createOrReplaceCastMember(to.asMemberID(), castMember);
+	movie->createOrReplaceCastMember(to.asMemberID(), castMember);
 
 	for (uint16 i = 0; i < currentFrame->_sprites.size(); i++) {
 		if (currentFrame->_sprites[i]->_castId == to.asMemberID())
@@ -1868,11 +1872,12 @@ void LB::b_editableText(int nargs) {
 
 void LB::b_erase(int nargs) {
 	Datum d = g_lingo->pop();
-	CastMember *eraseCast = g_director->getCurrentMovie()->getCastMember(d.asMemberID());
+	Movie *movie = g_director->getCurrentMovie();
+	CastMember *eraseCast = movie->getCastMember(d.asMemberID());
 
 	if (eraseCast) {
 		eraseCast->_erase = true;
-		Common::Array<Channel *> channels = g_director->getCurrentMovie()->getScore()->_channels;
+		Common::Array<Channel *> channels = movie->getScore()->_channels;
 
 		for (uint i = 0; i < channels.size(); i++) {
 			if (channels[i]->_sprite->_castId == d.asMemberID()) {
@@ -1953,7 +1958,7 @@ void LB::b_importFileInto(int nargs) {
 	bitmapCast->setModified(true);
 	const Graphics::Surface *surf = img->getSurface();
 	bitmapCast->_size = surf->pitch * surf->h + img->getPaletteColorCount() * 3;
-	auto channels = g_director->getCurrentMovie()->getScore()->_channels;
+	auto channels = movie->getScore()->_channels;
 
 	for (uint i = 0; i < channels.size(); i++) {
 		if (channels[i]->_sprite->_castId == dst.asMemberID()) {
@@ -1976,8 +1981,8 @@ void LB::b_installMenu(int nargs) {
 		g_director->_wm->removeMenu();
 		return;
 	}
-
-	CastMember *member = g_director->getCurrentMovie()->getCastMember(memberID);
+	Movie *movie = g_director->getCurrentMovie();
+	CastMember *member = movie->getCastMember(memberID);
 	if (!member) {
 		g_lingo->lingoError("installMenu: Unknown %s", memberID.asString().c_str());
 		return;
@@ -2001,7 +2006,7 @@ void LB::b_installMenu(int nargs) {
 
 	debugC(3, kDebugLingoExec, "installMenu: '%s'", Common::toPrintable(menuStxt).encode().c_str());
 
-	LingoArchive *mainArchive = g_director->getCurrentMovie()->getMainLingoArch();
+	LingoArchive *mainArchive = movie->getMainLingoArch();
 
 	// Since loading the STXT converts the text to Unicode based on the platform
 	// encoding, we need to fetch the correct Unicode character for the platform.
@@ -2164,7 +2169,9 @@ void LB::b_move(int nargs) {
 		return;
 	}
 
-	if (!g_director->getCurrentMovie()->getCastMember(*src.u.cast)) {
+	Movie *movie = g_director->getCurrentMovie();
+
+	if (!movie->getCastMember(*src.u.cast)) {
 		warning("b_move: Source CastMember doesn't exist");
 		return;
 	}
@@ -2175,21 +2182,20 @@ void LB::b_move(int nargs) {
 
 	g_lingo->push(dest);
 	b_erase(1);
-
-	Movie *movie = g_director->getCurrentMovie();
-	uint16 frame = movie->getScore()->getCurrentFrame();
-	Frame *currentFrame = movie->getScore()->_frames[frame];
-	auto channels = g_director->getCurrentMovie()->getScore()->_channels;
+	Score *score = movie->getScore();
+	uint16 frame = score->getCurrentFrame();
+	Frame *currentFrame = score->_frames[frame];
+	auto channels = score->_channels;
 
 
-	movie->getScore()->renderFrame(frame, kRenderForceUpdate);
+	score->renderFrame(frame, kRenderForceUpdate);
 
-	g_director->getCurrentMovie()->eraseCastMember(dest.asMemberID());
+	movie->eraseCastMember(dest.asMemberID());
 	
-	CastMember *toMove = g_director->getCurrentMovie()->getCastMember(src.asMemberID());
+	CastMember *toMove = movie->getCastMember(src.asMemberID());
 	CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
-	g_director->getCurrentMovie()->createOrReplaceCastMember(dest.asMemberID(), toMove);
-	g_director->getCurrentMovie()->createOrReplaceCastMember(src.asMemberID(), toReplace);
+	movie->createOrReplaceCastMember(dest.asMemberID(), toMove);
+	movie->createOrReplaceCastMember(src.asMemberID(), toReplace);
 
 	for (uint16 i = 0; i < currentFrame->_sprites.size(); i++) {
 		if (currentFrame->_sprites[i]->_castId == dest.asMemberID())
@@ -2203,12 +2209,13 @@ void LB::b_move(int nargs) {
 		}
 	}
 
-	movie->getScore()->renderFrame(frame, kRenderForceUpdate);
+	score->renderFrame(frame, kRenderForceUpdate);
 }
 
 void LB::b_moveableSprite(int nargs) {
-	Score *sc = g_director->getCurrentMovie()->getScore();
-	Frame *frame = sc->_frames[g_director->getCurrentMovie()->getScore()->getCurrentFrame()];
+	Movie *movie = g_director->getCurrentMovie();
+	Score *score = movie->getScore();
+	Frame *frame = score->_frames[score->getCurrentFrame()];
 
 	if (g_lingo->_currentChannelId == -1) {
 		warning("b_moveableSprite: channel Id is missing");
@@ -2217,8 +2224,8 @@ void LB::b_moveableSprite(int nargs) {
 	}
 
 	// since we are using value copying, in order to make it taking effect immediately. we modify the sprites in channel
-	if (sc->_channels[g_lingo->_currentChannelId])
-		sc->_channels[g_lingo->_currentChannelId]->_sprite->_moveable = true;
+	if (score->_channels[g_lingo->_currentChannelId])
+		score->_channels[g_lingo->_currentChannelId]->_sprite->_moveable = true;
 	frame->_sprites[g_lingo->_currentChannelId]->_moveable = true;
 }
 
@@ -2230,10 +2237,11 @@ void LB::b_pasteClipBoardInto(int nargs) {
 	}
 
 	Movie *movie = g_director->getCurrentMovie();
-	uint16 frame = movie->getScore()->getCurrentFrame();
-	Frame *currentFrame = movie->getScore()->_frames[frame];
+	Score *score = movie->getScore();
+	uint16 frame = score->getCurrentFrame();
+	Frame *currentFrame = score->_frames[frame];
 	CastMember *castMember = movie->getCastMember(*g_director->_clipBoard);
-	auto channels = movie->getScore()->_channels;
+	auto channels = score->_channels;
 
 	castMember->setModified(true);
 	movie->createOrReplaceCastMember(*to.u.cast, castMember);
@@ -2255,6 +2263,7 @@ void LB::b_puppetPalette(int nargs) {
 	g_lingo->convertVOIDtoString(0, nargs);
 	int numFrames = 0, speed = 0, palette = 0;
 	Datum d;
+	Movie *movie = g_director->getCurrentMovie();
 
 	switch (nargs) {
 	case 3:
@@ -2284,7 +2293,7 @@ void LB::b_puppetPalette(int nargs) {
 			}
 		}
 		if (!palette) {
-			CastMember *member = g_director->getCurrentMovie()->getCastMember(d.asMemberID());
+			CastMember *member = movie->getCastMember(d.asMemberID());
 
 			if (member && member->_type == kCastPalette)
 				palette = ((PaletteCastMember *)member)->getPaletteId();
@@ -2295,20 +2304,21 @@ void LB::b_puppetPalette(int nargs) {
 		return;
 	}
 
+	Score *score = movie->getScore();
 	if (palette) {
 		g_director->setPalette(palette);
-		g_director->getCurrentMovie()->getScore()->_puppetPalette = true;
+		score->_puppetPalette = true;
 	} else {
 		// Setting puppetPalette to 0 disables it (Lingo Dictionary, 226)
-		Score *sc = g_director->getCurrentMovie()->getScore();
-		g_director->getCurrentMovie()->getScore()->_puppetPalette = false;
+
+		score->_puppetPalette = false;
 
 		// FIXME: set system palette decided by platform, should be fixed after windows palette is working.
 		// try to set mac system palette if lastPalette is 0.
-		if (sc->_lastPalette == 0)
+		if (score->_lastPalette == 0)
 			g_director->setPalette(-1);
 		else
-			g_director->setPalette(sc->resolvePaletteId(sc->_lastPalette));
+			g_director->setPalette(score->resolvePaletteId(score->_lastPalette));
 	}
 
 	// TODO: Implement advanced features that use these.
@@ -2876,6 +2886,7 @@ void LB::b_sound(int nargs) {
 	}
 
 	DirectorSound *soundManager = g_director->getCurrentWindow()->getSoundManager();
+	Score *score = g_director->getCurrentMovie()->getScore();
 
 	if (verb.u.s->equalsIgnoreCase("close") || verb.u.s->equalsIgnoreCase("stop")) {
 		if (nargs != 2) {
@@ -2890,24 +2901,24 @@ void LB::b_sound(int nargs) {
 			TYPECHECK(secondArg, INT);
 			ticks = secondArg.u.i;
 		} else {
-			ticks = 15 * (60 / g_director->getCurrentMovie()->getScore()->_currentFrameRate);
+			ticks = 15 * (60 / score->_currentFrameRate);
 		}
 
 		TYPECHECK(firstArg, INT);
 		soundManager->registerFade(firstArg.u.i, true, ticks);
-		g_director->getCurrentMovie()->getScore()->_activeFade = firstArg.u.i;
+		score->_activeFade = firstArg.u.i;
 		return;
 	} else if (verb.u.s->equalsIgnoreCase("fadeOut")) {
 		if (nargs > 2) {
 			TYPECHECK(secondArg, INT);
 			ticks = secondArg.u.i;
 		} else {
-			ticks = 15 * (60 / g_director->getCurrentMovie()->getScore()->_currentFrameRate);
+			ticks = 15 * (60 / score->_currentFrameRate);
 		}
 
 		TYPECHECK(firstArg, INT);
 		soundManager->registerFade(firstArg.u.i, false, ticks);
-		g_director->getCurrentMovie()->getScore()->_activeFade = firstArg.u.i;
+		score->_activeFade = firstArg.u.i;
 		return;
 	} else if (verb.u.s->equalsIgnoreCase("playFile")) {
 		ARGNUMCHECK(3)
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 937a2023202..336774b0a49 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -380,7 +380,7 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		d = g_lingo->_actorList;
 		break;
 	case kTheBeepOn:
-		d = (int)g_director->getCurrentMovie()->_isBeepOn;
+		d = (int)movie->_isBeepOn;
 		break;
 	case kTheButtonStyle:
 		d = (int)(g_director->_wm->_mode & Graphics::kWMModeButtonDialogStyle);
@@ -395,10 +395,10 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		d = g_director->_centerStage;
 		break;
 	case kTheCheckBoxAccess:
-		d = g_director->getCurrentMovie()->_checkBoxAccess;
+		d = movie->_checkBoxAccess;
 		break;
 	case kTheCheckBoxType:
-		d = g_director->getCurrentMovie()->_checkBoxType;
+		d = movie->_checkBoxType;
 		break;
 	case kTheChunk:
 		d = getTheChunk(id, field);
@@ -845,19 +845,19 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
 		d = getTheTime(field);
 		break;
 	case kTheTimeoutKeyDown:
-		d= g_director->getCurrentMovie()->_timeOutKeyDown;
+		d= movie->_timeOutKeyDown;
 		break;
 	case kTheTimeoutLapsed:
-		d = (int)(_vm->getMacTicks() - g_director->getCurrentMovie()->_lastTimeOut);
+		d = (int)(_vm->getMacTicks() - movie->_lastTimeOut);
 		break;
 	case kTheTimeoutLength:
-		d = (int)g_director->getCurrentMovie()->_timeOutLength;
+		d = (int)movie->_timeOutLength;
 		break;
 	case kTheTimeoutMouse:
-		d = g_director->getCurrentMovie()->_timeOutMouse;
+		d = movie->_timeOutMouse;
 		break;
 	case kTheTimeoutPlay:
-		d = g_director->getCurrentMovie()->_timeOutPlay;
+		d = movie->_timeOutPlay;
 		break;
 	case kTheTimeoutScript:
 		d.type = STRING;
@@ -917,7 +917,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		g_lingo->_actorList = d;
 		break;
 	case kTheBeepOn:
-		g_director->getCurrentMovie()->_isBeepOn = (bool)d.u.i;
+		movie->_isBeepOn = (bool)d.u.i;
 		break;
 	case kTheButtonStyle:
 		if (d.asInt())
@@ -932,10 +932,10 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		g_director->_centerStage = d.asInt();
 		break;
 	case kTheCheckBoxAccess:
-		g_director->getCurrentMovie()->_checkBoxAccess = d.asInt();
+		movie->_checkBoxAccess = d.asInt();
 		break;
 	case kTheCheckBoxType:
-		g_director->getCurrentMovie()->_checkBoxType = d.asInt();
+		movie->_checkBoxType = d.asInt();
 		break;
 	case kTheChunk:
 		setTheChunk(id, field, d);
@@ -952,7 +952,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 	case kTheFixStageSize:
 		g_director->_fixStageSize = (bool)d.u.i;
 		if (d.u.i) {
-			g_director->_fixStageRect = g_director->getCurrentMovie()->_movieRect;
+			g_director->_fixStageRect = movie->_movieRect;
 		}
 		break;
 	case kTheField:
@@ -1033,7 +1033,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 			break;
 		case kTheScript:
 		{
-			LingoArchive *mainArchive = g_director->getCurrentMovie()->getMainLingoArch();
+			LingoArchive *mainArchive = movie->getMainLingoArch();
 			int commandId = 100;
 			while (mainArchive->getScriptContext(kEventScript, commandId))
 				commandId++;
@@ -1078,7 +1078,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		warning("BUILDBOT: Trying to set SearchCurrentFolder lingo property");
 		break;
 	case kTheSelEnd:
-		g_director->getCurrentMovie()->_selEnd = d.asInt();
+		movie->_selEnd = d.asInt();
 		if (movie->_currentEditableTextChannel != 0) {
 			Channel *channel = score->getChannelById(movie->_currentEditableTextChannel);
 
@@ -1087,7 +1087,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		}
 		break;
 	case kTheSelStart:
-		g_director->getCurrentMovie()->_selStart = d.asInt();
+		movie->_selStart = d.asInt();
 		if (movie->_currentEditableTextChannel != 0) {
 			Channel *channel = score->getChannelById(movie->_currentEditableTextChannel);
 
@@ -1136,7 +1136,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		setTheEntitySTUB(kTheSwitchColorDepth);
 		break;
 	case kTheTimeoutKeyDown:
-		g_director->getCurrentMovie()->_timeOutKeyDown = d.asInt();
+		movie->_timeOutKeyDown = d.asInt();
 		break;
 	case kTheTimeoutLapsed:
 		// timeOutLapsed can be set in D4, but can't in D3. see D3.1 interactivity manual p312 and D4 dictionary p296.
@@ -1148,13 +1148,13 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
 		}
 		break;
 	case kTheTimeoutLength:
-		g_director->getCurrentMovie()->_timeOutLength = d.asInt();
+		movie->_timeOutLength = d.asInt();
 		break;
 	case kTheTimeoutMouse:
-		g_director->getCurrentMovie()->_timeOutMouse = d.asInt();
+		movie->_timeOutMouse = d.asInt();
 		break;
 	case kTheTimeoutPlay:
-		g_director->getCurrentMovie()->_timeOutPlay = d.asInt();
+		movie->_timeOutPlay = d.asInt();
 		break;
 	case kTheTimeoutScript:
 		movie->setPrimaryEventHandler(kEventTimeout, d.asString());
@@ -1385,7 +1385,8 @@ Datum Lingo::getTheSprite(Datum &id1, int field) {
 
 void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 	int id = id1.asInt();
-	Score *score = _vm->getCurrentMovie()->getScore();
+	Movie *movie = _vm->getCurrentMovie();
+	Score *score = movie->getScore();
 
 	if (!score) {
 		warning("Lingo::setTheSprite(): The sprite %d field \"%s\" setting over non-active score", id, field2str(field));
@@ -1422,7 +1423,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 	case kTheCastNum:
 		{
 			CastMemberID castId = d.asMemberID();
-			CastMember *castMember = g_director->getCurrentMovie()->getCastMember(castId);
+			CastMember *castMember = movie->getCastMember(castId);
 
 			if (castMember && castMember->_type == kCastDigitalVideo) {
 				Common::String path = castMember->getCast()->getVideoPath(castId.member);
@@ -1432,13 +1433,13 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 					// b_updateStage needs to have _videoPlayback set to render video
 					// in the regular case Score::renderSprites sets it.
 					// However Score::renderSprites is not in the current code path.
-					g_director->getCurrentMovie()->_videoPlayback = true;
+					movie->_videoPlayback = true;
 				}
 			}
 
 			if (castId != sprite->_castId) {
 				if (!sprite->_trails) {
-					g_director->getCurrentMovie()->getWindow()->addDirtyRect(channel->getBbox());
+					movie->getWindow()->addDirtyRect(channel->getBbox());
 					channel->_dirty = true;
 				}
 				channel->setCast(castId);
@@ -1512,7 +1513,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		break;
 	case kTheLoc:
 		if (channel->_currentPoint.x != d.asPoint().x || channel->_currentPoint.y != d.asPoint().y) {
-			g_director->getCurrentMovie()->getWindow()->addDirtyRect(channel->getBbox());
+			movie->getWindow()->addDirtyRect(channel->getBbox());
 			channel->_dirty = true;
 		}
 
@@ -1524,7 +1525,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 			// adding the dirtyRect only when the trails is false. Other changes which will add dirtyRect may also apply this patch
 			// this is for fixing the bug in jman-win. Currently, i've only patched the LocH, LocV and castNum since those are the only ones used in jman
 			if (!channel->_sprite->_trails) {
-				g_director->getCurrentMovie()->getWindow()->addDirtyRect(channel->getBbox());
+				movie->getWindow()->addDirtyRect(channel->getBbox());
 				channel->_dirty = true;
 			}
 			channel->_currentPoint.x = d.asInt();
@@ -1533,7 +1534,7 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 	case kTheLocV:
 		if (d.asInt() != channel->_currentPoint.y) {
 			if (!channel->_sprite->_trails) {
-				g_director->getCurrentMovie()->getWindow()->addDirtyRect(channel->getBbox());
+				movie->getWindow()->addDirtyRect(channel->getBbox());
 				channel->_dirty = true;
 			}
 			channel->_currentPoint.y = d.asInt();
@@ -1634,8 +1635,8 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 		warning("Lingo::setTheSprite(): Unprocessed setting field \"%s\" of sprite", field2str(field));
 	}
 
-	if (channel->_dirty && g_director->getCurrentMovie())
-		g_director->getCurrentMovie()->getWindow()->addDirtyRect(channel->getBbox());
+	if (channel->_dirty && movie)
+		movie->getWindow()->addDirtyRect(channel->getBbox());
 }
 
 Datum Lingo::getTheCast(Datum &id1, int field) {
diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index 04732801343..3d5d6bf5668 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -190,9 +190,10 @@ void Window::playTransition(uint frame, uint16 transDuration, uint8 transArea, u
 	Graphics::ManagedSurface nextFrame(Graphics::ManagedSurface(_composeSurface->w, _composeSurface->h, g_director->_pixelformat));
 
 	Common::Rect clipRect;
+	Score *score = g_director->getCurrentMovie()->getScore();
 	if (t.area) {
 		// Changed area transition
-		g_director->getCurrentMovie()->getScore()->renderSprites(t.frame);
+		score->renderSprites(t.frame);
 
 		if (_dirtyRects.size() == 0)
 			return;
@@ -218,7 +219,7 @@ void Window::playTransition(uint frame, uint16 transDuration, uint8 transArea, u
 		render(false, &nextFrame);
 	} else {
 		// Full stage transition
-		g_director->getCurrentMovie()->getScore()->renderSprites(t.frame, kRenderForceUpdate);
+		score->renderSprites(t.frame, kRenderForceUpdate);
 		render(true, &nextFrame);
 
 		clipRect = _innerDims;


Commit: c128f4056c1ac5599895dc940f6377417be411ec
    https://github.com/scummvm/scummvm/commit/c128f4056c1ac5599895dc940f6377417be411ec
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-10-07T13:17:41+02:00

Commit Message:
DIRECTOR: make use of Datum constructor

Replace handcrafted creation of CASTREF with the datum constructor
which handles the creation itself.

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 0bf81d370a3..870bdcc654b 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2142,10 +2142,9 @@ void LB::b_move(int nargs) {
 	Datum src, dest;
 
 	if (nargs == 1) {
-		Datum d;
-		d.type = CASTREF;
-		d.u.cast = new CastMemberID();
-		d.u.cast->member = (int) g_director->getCurrentMovie()->getCast()->_castArrayStart;
+		int id = (int) g_director->getCurrentMovie()->getCast()->_castArrayStart;
+		CastMemberID *castId = new CastMemberID(id, 0);
+		Datum d = Datum(*castId);
 		g_lingo->push(d);
 		b_findEmpty(1);
 		dest = g_lingo->pop();


Commit: c3e74c928d74aee8e85e0a64bdab3a56965a2efc
    https://github.com/scummvm/scummvm/commit/c3e74c928d74aee8e85e0a64bdab3a56965a2efc
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-10-07T13:17:41+02:00

Commit Message:
DIRECTOR: Fix dereference null return value

Check if castMember is not a nullptr before querying it.

Fixes COVERITY: 1490158

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 870bdcc654b..81489959188 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2236,10 +2236,16 @@ void LB::b_pasteClipBoardInto(int nargs) {
 	}
 
 	Movie *movie = g_director->getCurrentMovie();
+
+	CastMember *castMember = movie->getCastMember(*g_director->_clipBoard);
+	if (!castMember) {
+		warning("LB:B_pasteClipBoardInto(): castMember not found");
+		return;
+	}
+
 	Score *score = movie->getScore();
 	uint16 frame = score->getCurrentFrame();
 	Frame *currentFrame = score->_frames[frame];
-	CastMember *castMember = movie->getCastMember(*g_director->_clipBoard);
 	auto channels = score->_channels;
 
 	castMember->setModified(true);


Commit: ae201e7adf047c169a96ef50348020e5273a0013
    https://github.com/scummvm/scummvm/commit/ae201e7adf047c169a96ef50348020e5273a0013
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-10-07T13:17:41+02:00

Commit Message:
JANITORIAL: DIRECTOR: Fix whitepace

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 81489959188..60276658c51 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2190,7 +2190,7 @@ void LB::b_move(int nargs) {
 	score->renderFrame(frame, kRenderForceUpdate);
 
 	movie->eraseCastMember(dest.asMemberID());
-	
+
 	CastMember *toMove = movie->getCastMember(src.asMemberID());
 	CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
 	movie->createOrReplaceCastMember(dest.asMemberID(), toMove);


Commit: 8201244f4f56826153b986d80ffe19268d63262a
    https://github.com/scummvm/scummvm/commit/8201244f4f56826153b986d80ffe19268d63262a
Author: Roland van Laar (roland at rolandvanlaar.nl)
Date: 2022-10-07T13:17:41+02:00

Commit Message:
DIRECTOR: Fix dereference null return value

Refactor LB:b_movie to check once if castMember is not a nullptr

Fixes COVERITY: 1490723

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 60276658c51..2f7678b85b1 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2168,17 +2168,18 @@ void LB::b_move(int nargs) {
 		return;
 	}
 
+	if (src.u.cast->castLib != 0) {
+		warning("b_move: wrong castLib '%d' in src CastMemberID", src.u.cast->castLib);
+	}
+
 	Movie *movie = g_director->getCurrentMovie();
+	CastMember *toMove = movie->getCastMember(src.asMemberID());
 
-	if (!movie->getCastMember(*src.u.cast)) {
+	if (!toMove) {
 		warning("b_move: Source CastMember doesn't exist");
 		return;
 	}
 
-	if (src.u.cast->castLib != 0) {
-		warning("b_move: wrong castLib '%d' in src CastMemberID", src.u.cast->castLib);
-	}
-
 	g_lingo->push(dest);
 	b_erase(1);
 	Score *score = movie->getScore();
@@ -2186,12 +2187,10 @@ void LB::b_move(int nargs) {
 	Frame *currentFrame = score->_frames[frame];
 	auto channels = score->_channels;
 
-
 	score->renderFrame(frame, kRenderForceUpdate);
 
 	movie->eraseCastMember(dest.asMemberID());
 
-	CastMember *toMove = movie->getCastMember(src.asMemberID());
 	CastMember *toReplace = new CastMember(toMove->getCast(), src.asMemberID().member);
 	movie->createOrReplaceCastMember(dest.asMemberID(), toMove);
 	movie->createOrReplaceCastMember(src.asMemberID(), toReplace);




More information about the Scummvm-git-logs mailing list