Browse Source

Improved the error message when nil is passed as the first argument to love.image.newImageData (resolves issue #1205).

Alex Szpakowski 9 years ago
parent
commit
acde58d311

+ 5 - 0
src/modules/filesystem/wrap_Filesystem.cpp

@@ -218,6 +218,11 @@ FileData *luax_getfiledata(lua_State *L, int idx)
 	return data;
 	return data;
 }
 }
 
 
+bool luax_cangetfiledata(lua_State *L, int idx)
+{
+	return lua_isstring(L, idx) || luax_istype(L, idx, FILESYSTEM_FILE_ID) || luax_istype(L, idx, FILESYSTEM_FILE_DATA_ID);
+}
+
 int w_newFileData(lua_State *L)
 int w_newFileData(lua_State *L)
 {
 {
 	// Single argument: treat as filepath or File.
 	// Single argument: treat as filepath or File.

+ 1 - 0
src/modules/filesystem/wrap_Filesystem.h

@@ -39,6 +39,7 @@ namespace filesystem
  * May trigger a Lua error.
  * May trigger a Lua error.
  **/
  **/
 FileData *luax_getfiledata(lua_State *L, int idx);
 FileData *luax_getfiledata(lua_State *L, int idx);
+bool luax_cangetfiledata(lua_State *L, int idx);
 File *luax_getfile(lua_State *L, int idx);
 File *luax_getfile(lua_State *L, int idx);
 
 
 bool hack_setupWriteDirectory();
 bool hack_setupWriteDirectory();

+ 16 - 11
src/modules/image/wrap_Image.cpp

@@ -68,19 +68,24 @@ int w_newImageData(lua_State *L)
 		t->release();
 		t->release();
 		return 1;
 		return 1;
 	}
 	}
+	else if (filesystem::luax_cangetfiledata(L, 1)) // Case 2: File(Data).
+	{
+		filesystem::FileData *data = love::filesystem::luax_getfiledata(L, 1);
 
 
-	// Case 2: File(Data).
-	love::filesystem::FileData *data = love::filesystem::luax_getfiledata(L, 1);
-
-	ImageData *t = nullptr;
-	luax_catchexcept(L,
-		[&]() { t = instance()->newImageData(data); },
-		[&](bool) { data->release(); }
-	);
+		ImageData *t = nullptr;
+		luax_catchexcept(L,
+			[&]() { t = instance()->newImageData(data); },
+			[&](bool) { data->release(); }
+		);
 
 
-	luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t);
-	t->release();
-	return 1;
+		luax_pushtype(L, IMAGE_IMAGE_DATA_ID, t);
+		t->release();
+		return 1;
+	}
+	else
+	{
+		return luax_typerror(L, 1, "value");
+	}
 }
 }
 
 
 int w_newCompressedData(lua_State *L)
 int w_newCompressedData(lua_State *L)