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

sev- noreply at scummvm.org
Sat May 13 16:19:30 UTC 2023


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

Summary:
a98ecfba0a DIRECTOR: LINGO: Read 64-bit constants


Commit: a98ecfba0a8fbdf147c8736d0bbbac3317d88a01
    https://github.com/scummvm/scummvm/commit/a98ecfba0a8fbdf147c8736d0bbbac3317d88a01
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-05-13T18:18:53+02:00

Commit Message:
DIRECTOR: LINGO: Read 64-bit constants

Used in D5+ particularly in safecracker

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


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 746a9ee31d9..1336d241597 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -1217,17 +1217,20 @@ ScriptContext *LingoCompiler::compileLingoV4(Common::SeekableReadStreamEndian &s
 					break;
 				}
 
-				// Floats are stored as an "80 bit IEEE Standard 754 floating
-				// point number (Standard Apple Numeric Environment [SANE] data type
-				// Extended).
-				if (length != 10) {
-					error("Constant float expected to be 10 bytes but got %d", length);
-					break;
+				if (length == 10) {
+					// Floats are stored as an "80 bit IEEE Standard 754 floating
+					// point number (Standard Apple Numeric Environment [SANE] data type
+					// Extended).
+					uint16 signAndExponent = READ_BE_UINT16(&constsStore[pointer]);
+					uint64 mantissa = READ_BE_UINT64(&constsStore[pointer+2]);
+
+					constant.u.f = Common::XPFloat(signAndExponent, mantissa).toDouble(Common::XPFloat::kSemanticsSANE);
+				} else if (length == 8) {
+					constant.u.f = READ_BE_FLOAT64(&constsStore[pointer]);
+				} else {
+					error("Constant float expected to be 8 or 10 bytes but got %d", length);
 				}
-				uint16 signAndExponent = READ_BE_UINT16(&constsStore[pointer]);
-				uint64 mantissa = READ_BE_UINT64(&constsStore[pointer+2]);
 
-				constant.u.f = Common::XPFloat(signAndExponent, mantissa).toDouble(Common::XPFloat::kSemanticsSANE);
 			}
 			break;
 		default:




More information about the Scummvm-git-logs mailing list