Browse Source

Merge branch 'main' into SDL3

Sasha Szpakowski 1 year ago
parent
commit
2bdadf51d4
100 changed files with 427 additions and 238 deletions
  1. 144 60
      .github/workflows/main.yml
  2. 1 0
      .gitignore
  3. 2 2
      CMakeLists.txt
  4. 2 0
      changes.txt
  5. BIN
      extra/windows/love.rc
  6. 1 1
      license.txt
  7. 1 1
      platform/xcode/macosx/love-macosx.plist
  8. 9 19
      readme.md
  9. 1 1
      src/common/Color.h
  10. 18 1
      src/common/Data.cpp
  11. 20 6
      src/common/Data.h
  12. 1 1
      src/common/EnumMap.h
  13. 1 1
      src/common/Exception.cpp
  14. 1 1
      src/common/Exception.h
  15. 1 1
      src/common/Matrix.cpp
  16. 1 1
      src/common/Matrix.h
  17. 5 2
      src/common/Module.cpp
  18. 9 11
      src/common/Module.h
  19. 1 1
      src/common/Object.cpp
  20. 1 1
      src/common/Object.h
  21. 1 1
      src/common/Optional.h
  22. 2 2
      src/common/Range.h
  23. 1 1
      src/common/Reference.cpp
  24. 1 1
      src/common/Reference.h
  25. 1 1
      src/common/Stream.cpp
  26. 1 1
      src/common/Stream.h
  27. 1 1
      src/common/StringMap.cpp
  28. 1 1
      src/common/StringMap.h
  29. 1 1
      src/common/Variant.cpp
  30. 1 1
      src/common/Variant.h
  31. 1 1
      src/common/Vector.cpp
  32. 1 1
      src/common/Vector.h
  33. 9 7
      src/common/android.cpp
  34. 1 1
      src/common/android.h
  35. 1 1
      src/common/apple.h
  36. 1 1
      src/common/apple.mm
  37. 1 1
      src/common/b64.cpp
  38. 1 1
      src/common/b64.h
  39. 1 1
      src/common/config.h
  40. 1 1
      src/common/delay.cpp
  41. 1 1
      src/common/delay.h
  42. 1 1
      src/common/deprecation.cpp
  43. 1 1
      src/common/deprecation.h
  44. 1 1
      src/common/floattypes.cpp
  45. 1 1
      src/common/floattypes.h
  46. 1 1
      src/common/int.h
  47. 1 1
      src/common/ios.h
  48. 1 1
      src/common/ios.mm
  49. 1 1
      src/common/macos.h
  50. 1 1
      src/common/macos.mm
  51. 1 1
      src/common/math.h
  52. 1 1
      src/common/memory.cpp
  53. 1 1
      src/common/memory.h
  54. 9 1
      src/common/pixelformat.cpp
  55. 1 1
      src/common/pixelformat.h
  56. 1 4
      src/common/runtime.cpp
  57. 16 9
      src/common/runtime.h
  58. 1 1
      src/common/types.cpp
  59. 1 1
      src/common/types.h
  60. 1 1
      src/common/utf8.cpp
  61. 1 1
      src/common/utf8.h
  62. 1 1
      src/common/version.h
  63. 1 1
      src/libraries/ddsparse/ddsinfo.h
  64. 1 1
      src/libraries/ddsparse/ddsparse.cpp
  65. 1 1
      src/libraries/ddsparse/ddsparse.h
  66. 1 1
      src/libraries/enet/lua-enet.h
  67. 1 1
      src/libraries/luasocket/libluasocket/ftp.lua.h
  68. 1 1
      src/libraries/luasocket/libluasocket/headers.lua.h
  69. 15 9
      src/libraries/luasocket/libluasocket/http.lua
  70. 35 15
      src/libraries/luasocket/libluasocket/http.lua.h
  71. 1 1
      src/libraries/luasocket/libluasocket/inet.c
  72. 1 1
      src/libraries/luasocket/libluasocket/ltn12.lua.h
  73. 1 1
      src/libraries/luasocket/libluasocket/luasocket.h
  74. 2 2
      src/libraries/luasocket/libluasocket/makefile
  75. 1 1
      src/libraries/luasocket/libluasocket/mbox.lua.h
  76. 1 1
      src/libraries/luasocket/libluasocket/mime.lua.h
  77. 28 1
      src/libraries/luasocket/libluasocket/options.c
  78. 3 0
      src/libraries/luasocket/libluasocket/options.h
  79. 2 2
      src/libraries/luasocket/libluasocket/smtp.lua
  80. 2 2
      src/libraries/luasocket/libluasocket/smtp.lua.h
  81. 1 1
      src/libraries/luasocket/libluasocket/socket.lua.h
  82. 2 0
      src/libraries/luasocket/libluasocket/tcp.c
  83. 1 1
      src/libraries/luasocket/libluasocket/tp.lua.h
  84. 1 1
      src/libraries/luasocket/libluasocket/url.lua
  85. 4 3
      src/libraries/luasocket/libluasocket/url.lua.h
  86. 1 1
      src/libraries/luasocket/libluasocket/usocket.c
  87. 2 0
      src/libraries/luasocket/libluasocket/wsocket.c
  88. 1 1
      src/libraries/luasocket/luasocket.cpp
  89. 1 1
      src/libraries/luasocket/luasocket.h
  90. 3 3
      src/love.cpp
  91. 5 1
      src/modules/audio/Audio.cpp
  92. 5 4
      src/modules/audio/Audio.h
  93. 1 1
      src/modules/audio/Effect.cpp
  94. 1 1
      src/modules/audio/Effect.h
  95. 1 1
      src/modules/audio/Filter.cpp
  96. 1 1
      src/modules/audio/Filter.h
  97. 1 1
      src/modules/audio/RecordingDevice.cpp
  98. 1 1
      src/modules/audio/RecordingDevice.h
  99. 1 1
      src/modules/audio/Source.cpp
  100. 1 1
      src/modules/audio/Source.h

+ 144 - 60
.github/workflows/main.yml

@@ -2,7 +2,7 @@ name: continuous-integration
 on: [push, pull_request]
 on: [push, pull_request]
 
 
 jobs:
 jobs:
-  linux-os:
+  Linux:
     runs-on: ubuntu-22.04
     runs-on: ubuntu-22.04
     permissions:
     permissions:
       checks: write
       checks: write
@@ -25,12 +25,12 @@ jobs:
                                           libcurl4-openssl-dev libfuse2 wmctrl openbox mesa-vulkan-drivers \
                                           libcurl4-openssl-dev libfuse2 wmctrl openbox mesa-vulkan-drivers \
                                           libvulkan1 vulkan-tools vulkan-validationlayers
                                           libvulkan1 vulkan-tools vulkan-validationlayers
     - name: Checkout love-appimage-source
     - name: Checkout love-appimage-source
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
       with:
         repository: love2d/love-appimage-source
         repository: love2d/love-appimage-source
         ref: 12.x
         ref: 12.x
     - name: Checkout LÖVE
     - name: Checkout LÖVE
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
       with:
         path: love2d-${{ github.sha }}
         path: love2d-${{ github.sha }}
     - name: Get Dependencies for AppImage
     - name: Get Dependencies for AppImage
@@ -61,60 +61,63 @@ jobs:
     - name: Run Test Suite (opengl)
     - name: Run Test Suite (opengl)
       run: |
       run: |
         chmod a+x love-${{ github.sha }}.AppImage
         chmod a+x love-${{ github.sha }}.AppImage
-        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --runAllTests --isRunner
+        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --all --isRunner
     - name: Love Test Report (opengl)
     - name: Love Test Report (opengl)
       id: report1
       id: report1
       uses: ellraiser/love-test-report@main
       uses: ellraiser/love-test-report@main
       with:
       with:
         name: Love Testsuite Linux
         name: Love Testsuite Linux
         title: test-report-linux-opengl
         title: test-report-linux-opengl
-        path: love2d-${{ github.sha }}/testing/output/lovetest_runAllTests.md
+        path: love2d-${{ github.sha }}/testing/output/lovetest_all.md
         token: ${{ secrets.GITHUB_TOKEN }}
         token: ${{ secrets.GITHUB_TOKEN }}
     - name: Zip Test Output (opengl)
     - name: Zip Test Output (opengl)
       run: |
       run: |
         7z a -tzip test-output-linux-opengl.zip love2d-${{ github.sha }}/testing/output/
         7z a -tzip test-output-linux-opengl.zip love2d-${{ github.sha }}/testing/output/
     - name: Artifact Test Output (opengl)
     - name: Artifact Test Output (opengl)
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: test-output-linux-opengl-${{ steps.report1.outputs.conclusion }}
         name: test-output-linux-opengl-${{ steps.report1.outputs.conclusion }}
         path: test-output-linux-opengl.zip
         path: test-output-linux-opengl.zip
     # linux opengles tests
     # linux opengles tests
     - name: Run Test Suite (opengles)
     - name: Run Test Suite (opengles)
+      env:
+        LOVE_GRAPHICS_DEBUG: 1
       run: |
       run: |
         export LOVE_GRAPHICS_USE_OPENGLES=1
         export LOVE_GRAPHICS_USE_OPENGLES=1
-        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --runAllTests --isRunner
+        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --all --isRunner
     - name: Love Test Report (opengles)
     - name: Love Test Report (opengles)
       uses: ellraiser/love-test-report@main
       uses: ellraiser/love-test-report@main
       id: report2
       id: report2
       with:
       with:
         name: Love Testsuite Linux
         name: Love Testsuite Linux
         title: test-report-linux-opengles
         title: test-report-linux-opengles
-        path: love2d-${{ github.sha }}/testing/output/lovetest_runAllTests.md
+        path: love2d-${{ github.sha }}/testing/output/lovetest_all.md
         token: ${{ secrets.GITHUB_TOKEN }}
         token: ${{ secrets.GITHUB_TOKEN }}
     - name: Zip Test Output (opengles)
     - name: Zip Test Output (opengles)
       run: |
       run: |
         7z a -tzip test-output-linux-opengles.zip love2d-${{ github.sha }}/testing/output/
         7z a -tzip test-output-linux-opengles.zip love2d-${{ github.sha }}/testing/output/
     - name: Artifact Test Output (opengles)
     - name: Artifact Test Output (opengles)
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: test-output-linux-opengles-${{ steps.report2.outputs.conclusion }}
         name: test-output-linux-opengles-${{ steps.report2.outputs.conclusion }}
         path: test-output-linux-opengles.zip
         path: test-output-linux-opengles.zip
 #    # linux vulkan tests
 #    # linux vulkan tests
 #    - name: Run Test Suite (vulkan)
 #    - name: Run Test Suite (vulkan)
+#      env:
+#        LOVE_GRAPHICS_DEBUG: 1
 #      run: |
 #      run: |
-#        export LOVE_GRAPHICS_DEBUG=1
-#        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --runAllTests --isRunner --renderers vulkan
+#        ./love-${{ github.sha }}.AppImage love2d-${{ github.sha }}/testing/main.lua --all --isRunner --renderers vulkan
 #    - name: Love Test Report (vulkan)
 #    - name: Love Test Report (vulkan)
 #      uses: ellraiser/love-test-report@main
 #      uses: ellraiser/love-test-report@main
 #      with:
 #      with:
 #        name: Love Testsuite Linux
 #        name: Love Testsuite Linux
 #        title: test-report-linux-vulkan
 #        title: test-report-linux-vulkan
-#        path: love2d-${{ github.sha }}/testing/output/lovetest_runAllTests.md
+#        path: love2d-${{ github.sha }}/testing/output/lovetest_all.md
 #    - name: Zip Test Output (vulkan)
 #    - name: Zip Test Output (vulkan)
 #      run: |
 #      run: |
 #        7z a -tzip test-output-linux-vulkan.zip love2d-${{ github.sha }}/testing/output/
 #        7z a -tzip test-output-linux-vulkan.zip love2d-${{ github.sha }}/testing/output/
 #    - name: Artifact Test Output (vulkan)
 #    - name: Artifact Test Output (vulkan)
-#      uses: actions/upload-artifact@v3
+#      uses: actions/upload-artifact@v4
 #      with:
 #      with:
 #        name: test-output-linux-vulkan
 #        name: test-output-linux-vulkan
 #        path: test-output-linux-vulkan.zip
 #        path: test-output-linux-vulkan.zip
@@ -125,12 +128,12 @@ jobs:
         kill $XVFBPID
         kill $XVFBPID
         kill $OPENBOXPID
         kill $OPENBOXPID
     - name: Artifact
     - name: Artifact
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: love-linux-x86_64.AppImage
         name: love-linux-x86_64.AppImage
         path: love-${{ github.sha }}.AppImage
         path: love-${{ github.sha }}.AppImage
     - name: Artifact Debug Symbols
     - name: Artifact Debug Symbols
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: love-x86_64-AppImage-debug
         name: love-x86_64-AppImage-debug
         path: love-${{ github.sha }}.AppImage-debug.tar.gz
         path: love-${{ github.sha }}.AppImage-debug.tar.gz
@@ -140,7 +143,7 @@ jobs:
         echo "${{ steps.report1.outputs.failed }} opengl tests failed"
         echo "${{ steps.report1.outputs.failed }} opengl tests failed"
         echo "${{ steps.report2.outputs.failed }} opengles tests failed"
         echo "${{ steps.report2.outputs.failed }} opengles tests failed"
         exit 1
         exit 1
-  windows-os:
+  Windows:
     runs-on: windows-latest
     runs-on: windows-latest
     permissions:
     permissions:
       checks: write
       checks: write
@@ -202,31 +205,32 @@ jobs:
         echo nofiles=ignore>> "%GITHUB_OUTPUT%"
         echo nofiles=ignore>> "%GITHUB_OUTPUT%"
         echo moredef=-DLOVE_EXTRA_DLLS=%CD%\angle\libEGL.dll;%CD%\angle\libGLESv2.dll>> "%GITHUB_OUTPUT%"
         echo moredef=-DLOVE_EXTRA_DLLS=%CD%\angle\libEGL.dll;%CD%\angle\libGLESv2.dll>> "%GITHUB_OUTPUT%"
         exit /b 0
         exit /b 0
-    - name: Download Windows SDK Setup 10.0.20348
-      run: curl -Lo winsdksetup.exe https://go.microsoft.com/fwlink/?linkid=2164145
-    - name: Install Debugging Tools for Windows
-      id: windbg
-      run: |
-        setlocal enabledelayedexpansion
-        start /WAIT %CD%\winsdksetup.exe /features OptionId.WindowsDesktopDebuggers /q /log %CD%\log.txt
-        echo ERRORLEVEL=!ERRORLEVEL! >> %GITHUB_OUTPUT%
-    - name: Print Debugging Tools Install Log
-      if: always()
+    - name: Download pdbstr
+      run: curl -Lfo pdbstr.nupkg https://www.nuget.org/api/v2/package/Microsoft.Debugging.Tools.PdbStr/20230731.1609.0
+    - name: Download srctool
+      run: curl -Lfo srctool.nupkg https://www.nuget.org/api/v2/package/Microsoft.Debugging.Tools.SrcTool/20230731.1609.0
+    - name: Extract Tools and Add to PATH
       run: |
       run: |
-        type log.txt
-        exit /b ${{ steps.windbg.outputs.ERRORLEVEL }}
+        mkdir debugtools
+        cd debugtools
+        if errorlevel 1 exit /b 1
+        7z e ..\srctool.nupkg content/amd64/srctool.exe
+        if errorlevel 1 exit /b 1
+        7z e ..\pdbstr.nupkg content/amd64/pdbstr.exe
+        if errorlevel 1 exit /b 1
+        echo %CD%>>%GITHUB_PATH%
     - name: Setup Python 3.10
     - name: Setup Python 3.10
-      uses: actions/setup-python@v4
+      uses: actions/setup-python@v5
       with:
       with:
         python-version: "3.10"
         python-version: "3.10"
     - name: Download source_index.py
     - name: Download source_index.py
-      run: curl -Lo source_index.py https://gist.github.com/MikuAuahDark/d9c099f5714e09a765496471c2827a55/raw/df34956052035f3473c5f01861dfb53930d06843/source_index.py
+      run: curl -Lfo source_index.py https://gist.github.com/MikuAuahDark/d9c099f5714e09a765496471c2827a55/raw/df34956052035f3473c5f01861dfb53930d06843/source_index.py
     - name: Clone Megasource
     - name: Clone Megasource
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
       with:
         path: megasource
         path: megasource
         repository: love2d/megasource
         repository: love2d/megasource
-        ref: 12.x
+        ref: main
     - id: megasource
     - id: megasource
       name: Get Megasource Commit SHA
       name: Get Megasource Commit SHA
       shell: python
       shell: python
@@ -238,11 +242,11 @@ jobs:
         commit = result.stdout.split()[0]
         commit = result.stdout.split()[0]
         with open(os.environ["GITHUB_OUTPUT"], "w", encoding="UTF-8") as f: f.write(f"commit={commit}")
         with open(os.environ["GITHUB_OUTPUT"], "w", encoding="UTF-8") as f: f.write(f"commit={commit}")
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
       with:
         path: megasource/libs/love
         path: megasource/libs/love
     - name: Download ANGLE
     - name: Download ANGLE
-      uses: robinraju/release-downloader@v1.7
+      uses: robinraju/release-downloader@v1.9
       if: steps.vars.outputs.angle == '1'
       if: steps.vars.outputs.angle == '1'
       with:
       with:
         repository: MikuAuahDark/angle-winbuild
         repository: MikuAuahDark/angle-winbuild
@@ -255,19 +259,19 @@ jobs:
       if: steps.vars.outputs.angle == '1'
       if: steps.vars.outputs.angle == '1'
       working-directory: angle
       working-directory: angle
       run: 7z x angle-win-${{ steps.vars.outputs.arch }}.zip
       run: 7z x angle-win-${{ steps.vars.outputs.arch }}.zip
-    - name: Delete Strawbery Perl
+    - name: Remove Strawbery Perl From Path
       # https://github.com/actions/runner-images/issues/6627
       # https://github.com/actions/runner-images/issues/6627
       # In particular, this is not pretty, but even CMAKE_IGNORE_PREFIX_PATH
       # In particular, this is not pretty, but even CMAKE_IGNORE_PREFIX_PATH
-      # cannot help in this case. Delete the whole folder!
+      # cannot help in this case.
       run: |
       run: |
-        rmdir /s /q C:\Strawberry
+        move /y C:\Strawberry C:\Strawberry_not_in_PATH
         exit /b 0
         exit /b 0
     - name: Configure
     - name: Configure
       env:
       env:
         CFLAGS: /Zi
         CFLAGS: /Zi
         CXXFLAGS: /Zi
         CXXFLAGS: /Zi
         LDFLAGS: /DEBUG:FULL /OPT:REF /OPT:ICF
         LDFLAGS: /DEBUG:FULL /OPT:REF /OPT:ICF
-      run: cmake -Bbuild -Smegasource -T v142 -A ${{ matrix.platform }} --install-prefix %CD%\install -DCMAKE_PDB_OUTPUT_DIRECTORY=%CD%\pdb ${{ steps.vars.outputs.moredef }}
+      run: cmake -Bbuild -Smegasource -T v143 -A ${{ matrix.platform }} --install-prefix %CD%\install -DCMAKE_PDB_OUTPUT_DIRECTORY=%CD%\pdb ${{ steps.vars.outputs.moredef }}
     - name: Install
     - name: Install
       run: cmake --build build --target PACKAGE --config Release -j2
       run: cmake --build build --target PACKAGE --config Release -j2
     - name: Copy LuaJIT lua51.pdb
     - name: Copy LuaJIT lua51.pdb
@@ -285,7 +289,7 @@ jobs:
         --source %CD%\build\libs\LuaJIT https://raw.githubusercontent.com/love2d/megasource/${{ steps.megasource.outputs.commit }}/libs/LuaJIT ^
         --source %CD%\build\libs\LuaJIT https://raw.githubusercontent.com/love2d/megasource/${{ steps.megasource.outputs.commit }}/libs/LuaJIT ^
         pdb\Release\*.pdb
         pdb\Release\*.pdb
     - name: Artifact
     - name: Artifact
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: love-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}
         name: love-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}
         path: |
         path: |
@@ -294,12 +298,12 @@ jobs:
         if-no-files-found: ${{ steps.vars.outputs.nofiles }}
         if-no-files-found: ${{ steps.vars.outputs.nofiles }}
     - name: Artifact JIT Modules
     - name: Artifact JIT Modules
       if: steps.vars.outputs.jitmodules == '1'
       if: steps.vars.outputs.jitmodules == '1'
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: love-windows-jitmodules
         name: love-windows-jitmodules
         path: build/libs/LuaJIT/src/jit/*.lua
         path: build/libs/LuaJIT/src/jit/*.lua
     - name: Artifact PDB
     - name: Artifact PDB
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: love-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-dbg
         name: love-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-dbg
         path: pdb/Release/*.pdb
         path: pdb/Release/*.pdb
@@ -317,10 +321,12 @@ jobs:
     # windows opengl tests
     # windows opengl tests
     - name: Run Tests (opengl)
     - name: Run Tests (opengl)
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
+      env:
+        LOVE_GRAPHICS_DEBUG: 1
       run: |
       run: |
         echo 'check dir'
         echo 'check dir'
         ls
         ls
-        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --runAllTests --isRunner
+        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --all --isRunner
     - name: Love Test Report (opengl)
     - name: Love Test Report (opengl)
       id: report1
       id: report1
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
@@ -328,7 +334,7 @@ jobs:
       with:
       with:
         name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (opengl)
         name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (opengl)
         title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengl
         title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengl
-        path: megasource/libs/love/testing/output/lovetest_runAllTests.md
+        path: megasource/libs/love/testing/output/lovetest_all.md
         token: ${{ secrets.GITHUB_TOKEN }}
         token: ${{ secrets.GITHUB_TOKEN }}
     - name: Zip Test Output (opengl)
     - name: Zip Test Output (opengl)
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
@@ -336,16 +342,18 @@ jobs:
         7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengl.zip megasource/libs/love/testing/output/
         7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengl.zip megasource/libs/love/testing/output/
     - name: Artifact Test Output (opengl)
     - name: Artifact Test Output (opengl)
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: test-output-windows-${{ steps.vars.outputs.arch }}-opengl-${{ steps.report1.outputs.conclusion }}
         name: test-output-windows-${{ steps.vars.outputs.arch }}-opengl-${{ steps.report1.outputs.conclusion }}
         path: test-output-windows-${{ steps.vars.outputs.arch }}-opengl.zip
         path: test-output-windows-${{ steps.vars.outputs.arch }}-opengl.zip
     # windows opengles tests
     # windows opengles tests
     - name: Run Tests (opengles)
     - name: Run Tests (opengles)
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
+      env:
+        LOVE_GRAPHICS_DEBUG: 1
+        LOVE_GRAPHICS_USE_OPENGLES: 1
       run: |
       run: |
-        $ENV:LOVE_GRAPHICS_USE_OPENGLES=1
-        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --runAllTests --isRunner
+        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --all --isRunner
     - name: Love Test Report (opengles)
     - name: Love Test Report (opengles)
       id: report2
       id: report2
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
@@ -353,7 +361,7 @@ jobs:
       with:
       with:
         name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (opengles)
         name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (opengles)
         title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengles
         title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengles
-        path: megasource/libs/love/testing/output/lovetest_runAllTests.md
+        path: megasource/libs/love/testing/output/lovetest_all.md
         token: ${{ secrets.GITHUB_TOKEN }}
         token: ${{ secrets.GITHUB_TOKEN }}
     - name: Zip Test Output (opengles)
     - name: Zip Test Output (opengles)
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
@@ -361,7 +369,7 @@ jobs:
         7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengles.zip megasource/libs/love/testing/output/
         7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-opengles.zip megasource/libs/love/testing/output/
     - name: Artifact Test Output (opengles)
     - name: Artifact Test Output (opengles)
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
       if: steps.vars.outputs.arch != 'ARM64' && steps.vars.outputs.compatname != '-compat'
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: test-output-windows-${{ steps.vars.outputs.arch }}-opengles-${{ steps.report2.outputs.conclusion }}
         name: test-output-windows-${{ steps.vars.outputs.arch }}-opengles-${{ steps.report2.outputs.conclusion }}
         path: test-output-windows-${{ steps.vars.outputs.arch }}-opengles.zip
         path: test-output-windows-${{ steps.vars.outputs.arch }}-opengles.zip
@@ -387,23 +395,24 @@ jobs:
 #    # windows vulkan tests
 #    # windows vulkan tests
 #    - name: Run Tests (vulkan)
 #    - name: Run Tests (vulkan)
 #      if: steps.vars.outputs.arch != 'ARM64'
 #      if: steps.vars.outputs.arch != 'ARM64'
+#      env:
+#        LOVE_GRAPHICS_DEBUG: 1
 #      run: |
 #      run: |
-#        $ENV:LOVE_GRAPHICS_DEBUG=1
-#        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --runAllTests --isRunner --renderers vulkan
+#        powershell.exe ./install/lovec.exe ./megasource/libs/love/testing/main.lua --all --isRunner --renderers vulkan
 #    - name: Love Test Report (vulkan)
 #    - name: Love Test Report (vulkan)
 #      if: steps.vars.outputs.arch != 'ARM64'
 #      if: steps.vars.outputs.arch != 'ARM64'
 #      uses: ellraiser/love-test-report@main
 #      uses: ellraiser/love-test-report@main
 #      with:
 #      with:
 #        name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (vulkan)
 #        name: Love Testsuite Windows ${{ steps.vars.outputs.arch }} ${{ steps.vars.outputs.compatname }} (vulkan)
 #        title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan
 #        title: test-report-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan
-#        path: megasource/libs/love/testing/output/lovetest_runAllTests.md
+#        path: megasource/libs/love/testing/output/lovetest_all.md
 #    - name: Zip Test Output (vulkan)
 #    - name: Zip Test Output (vulkan)
 #      if: steps.vars.outputs.arch != 'ARM64'
 #      if: steps.vars.outputs.arch != 'ARM64'
 #      run: |
 #      run: |
 #        7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan.zip megasource/libs/love/testing/output/
 #        7z a -tzip test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan.zip megasource/libs/love/testing/output/
 #    - name: Artifact Test Output (vulkan)
 #    - name: Artifact Test Output (vulkan)
 #      if: steps.vars.outputs.arch != 'ARM64'
 #      if: steps.vars.outputs.arch != 'ARM64'
-#      uses: actions/upload-artifact@v3
+#      uses: actions/upload-artifact@v4
 #      with:
 #      with:
 #        name: test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan
 #        name: test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan
 #        path: test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan.zip
 #        path: test-output-windows-${{ steps.vars.outputs.arch }}${{ steps.vars.outputs.compatname }}-vulkan.zip
@@ -414,9 +423,9 @@ jobs:
       pull-requests: write
       pull-requests: write
     steps:
     steps:
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Clone Dependencies
     - name: Clone Dependencies
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
       with:
         path: apple-dependencies
         path: apple-dependencies
         repository: love2d/love-apple-dependencies
         repository: love2d/love-apple-dependencies
@@ -434,28 +443,30 @@ jobs:
       run:
       run:
         ditto -c -k --sequesterRsrc --keepParent love-macos/love.app love-macos.zip 
         ditto -c -k --sequesterRsrc --keepParent love-macos/love.app love-macos.zip 
     - name: Artifact
     - name: Artifact
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: love-macos
         name: love-macos
         path: love-macos.zip
         path: love-macos.zip
     # macos opengl tests (metal not supported on runners)
     # macos opengl tests (metal not supported on runners)
     - name: Run Test Suite
     - name: Run Test Suite
+      env:
+        LOVE_GRAPHICS_DEBUG: 1
       run: |
       run: |
         ls
         ls
-        love-macos/love.app/Contents/MacOS/love ./testing/main.lua --runAllTests --isRunner
+        love-macos/love.app/Contents/MacOS/love ./testing/main.lua --all --isRunner
     - name: Love Test Report
     - name: Love Test Report
       id: report1
       id: report1
       uses: ellraiser/love-test-report@main
       uses: ellraiser/love-test-report@main
       with:
       with:
         name: Love Testsuite MacOS
         name: Love Testsuite MacOS
         title: test-report-macos
         title: test-report-macos
-        path: testing/output/lovetest_runAllTests.md
+        path: testing/output/lovetest_all.md
         token: ${{ secrets.GITHUB_TOKEN }}
         token: ${{ secrets.GITHUB_TOKEN }}
     - name: Zip Test Output
     - name: Zip Test Output
       run: |
       run: |
         7z a -tzip test-output-macos-opengl.zip ./testing/output/
         7z a -tzip test-output-macos-opengl.zip ./testing/output/
     - name: Artifact Test Output
     - name: Artifact Test Output
-      uses: actions/upload-artifact@v3
+      uses: actions/upload-artifact@v4
       with:
       with:
         name: test-output-macos-opengl-${{ steps.report1.outputs.conclusion }}
         name: test-output-macos-opengl-${{ steps.report1.outputs.conclusion }}
         path: test-output-macos-opengl.zip
         path: test-output-macos-opengl.zip
@@ -468,9 +479,9 @@ jobs:
     runs-on: macos-latest
     runs-on: macos-latest
     steps:
     steps:
     - name: Checkout
     - name: Checkout
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
     - name: Clone Dependencies
     - name: Clone Dependencies
-      uses: actions/checkout@v3
+      uses: actions/checkout@v4
       with:
       with:
         path: apple-dependencies
         path: apple-dependencies
         repository: love2d/love-apple-dependencies
         repository: love2d/love-apple-dependencies
@@ -481,3 +492,76 @@ jobs:
     - name: Build
     - name: Build
       run:
       run:
         xcodebuild -project platform/xcode/love.xcodeproj -scheme love-ios -configuration Release -destination 'platform=iOS Simulator,name=iPhone 11'
         xcodebuild -project platform/xcode/love.xcodeproj -scheme love-ios -configuration Release -destination 'platform=iOS Simulator,name=iPhone 11'
+  Android:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        build_type: [Debug, Release]
+    env:
+      GRADLE_OPTS: "-Dorg.gradle.jvmargs='-Xmx4G'"
+    steps:
+    - name: Prepare Environment
+      run: sudo apt-get update && curl -Lfo kitware-archive.sh https://apt.kitware.com/kitware-archive.sh && sudo bash ./kitware-archive.sh
+    - name: Install Dependencies
+      run: sudo apt-get install ninja-build cmake
+    - name: Checkout love-android
+      uses: actions/checkout@v4
+      with:
+        repository: love2d/love-android
+        submodules: false
+    - name: Setup Java 17
+      uses: actions/setup-java@v4
+      with:
+        distribution: adopt-hotspot
+        java-version: 17
+        cache: gradle
+    - name: Clone Megasource
+      uses: actions/checkout@v4
+      with:
+        path: app/src/main/cpp/megasource
+        repository: love2d/megasource
+        ref: main
+    - name: Checkout
+      uses: actions/checkout@v4
+      with:
+        path: app/src/main/cpp/love
+    - name: Build Normal Flavor
+      run: bash ./gradlew assembleNormalRecord${{ matrix.build_type }}
+    - name: Build Release-specific Binaries
+      if: ${{ matrix.build_type == 'Release' }}
+      run: bash ./gradlew bundleNormalNoRecordRelease bundleEmbedRecordRelease bundleEmbedNoRecordRelease
+    - name: Artifact (Normal debug APK)
+      if: ${{ matrix.build_type == 'Debug' }}
+      uses: actions/upload-artifact@v4
+      with:
+        name: love-android-debug.apk
+        path: app/build/outputs/apk/normalRecord/debug/app-normal-record-debug.apk
+    - name: Artifact (Normal unsigned APK)
+      if: ${{ matrix.build_type == 'Release' }}
+      uses: actions/upload-artifact@v4
+      with:
+        name: love-android.apk
+        path: app/build/outputs/apk/normalRecord/release/app-normal-record-release-unsigned.apk
+    - name: Artifact (Normal AAB w/o recording)
+      if: ${{ matrix.build_type == 'Release' }}
+      uses: actions/upload-artifact@v4
+      with:
+        name: love-android-ps.aab
+        path: app/build/outputs/bundle/normalNoRecordRelease/app-normal-noRecord-release.aab
+    - name: Artifact (Embed AAB)
+      if: ${{ matrix.build_type == 'Release' }}
+      uses: actions/upload-artifact@v4
+      with:
+        name: love-android-embed-record.aab
+        path: app/build/outputs/bundle/embedRecordRelease/app-embed-record-release.aab
+    - name: Artifact (Embed AAB w/o recording)
+      if: ${{ matrix.build_type == 'Release' }}
+      uses: actions/upload-artifact@v4
+      with:
+        name: love-android-embed.aab
+        path: app/build/outputs/bundle/embedNoRecordRelease/app-embed-noRecord-release.aab
+    - name: Artifact (Debug symbols)
+      uses: actions/upload-artifact@v4
+      with:
+        name: love-android-unstripped-debugsyms-${{ matrix.build_type }}
+        path: app/build/intermediates/cxx

+ 1 - 0
.gitignore

@@ -73,3 +73,4 @@ stamp-h1
 /testing/output/*.html
 /testing/output/*.html
 /testing/output/*.md
 /testing/output/*.md
 /testing/output/actual/*.png
 /testing/output/actual/*.png
+/testing/output/difference/*.png

+ 2 - 2
CMakeLists.txt

@@ -1,5 +1,5 @@
 #
 #
-# Copyright (c) 2006-2023 LOVE Development Team
+# Copyright (c) 2006-2024 LOVE Development Team
 #
 #
 # This software is provided 'as-is', without any express or implied
 # This software is provided 'as-is', without any express or implied
 # warranty.  In no event will the authors be held liable for any damages
 # warranty.  In no event will the authors be held liable for any damages
@@ -60,7 +60,7 @@ else()
 endif()
 endif()
 
 
 
 
-if(APPLE OR MEGA_ARM64)
+if(APPLE)
 	set(LOVE_DEFAULT_JIT FALSE)
 	set(LOVE_DEFAULT_JIT FALSE)
 else()
 else()
 	set(LOVE_DEFAULT_JIT TRUE)
 	set(LOVE_DEFAULT_JIT TRUE)

+ 2 - 0
changes.txt

@@ -101,6 +101,7 @@ Released: N/A
 * Changed RevoluteJoint:getMotorTorque and WheelJoint:getMotorTorque to take 'dt' as a parameter instead of 'inverse_dt'.
 * Changed RevoluteJoint:getMotorTorque and WheelJoint:getMotorTorque to take 'dt' as a parameter instead of 'inverse_dt'.
 * Changed love.math.perlinNoise and simplexNoise to use higher precision numbers for its internal calculations.
 * Changed love.math.perlinNoise and simplexNoise to use higher precision numbers for its internal calculations.
 * Changed t.accelerometerjoystick startup flag in love.conf to unset by default.
 * Changed t.accelerometerjoystick startup flag in love.conf to unset by default.
+* Changed love.data.hash to take in a container type.
 
 
 * Renamed 'display' field to 'displayindex' in love.window.setMode/updateMode/getMode and love.conf.
 * Renamed 'display' field to 'displayindex' in love.window.setMode/updateMode/getMode and love.conf.
 * Renamed love.graphics Text objects to TextBatch.
 * Renamed love.graphics Text objects to TextBatch.
@@ -120,6 +121,7 @@ Released: N/A
 * Deprecated t.accelerometerjoystick in love.conf (replaced by love.sensor module).
 * Deprecated t.accelerometerjoystick in love.conf (replaced by love.sensor module).
 * Deprecated the variants of Mesh:attachAttribute and SpriteBatch:attachAttribute which accept a Mesh (replaced by variants which accept a Buffer).
 * Deprecated the variants of Mesh:attachAttribute and SpriteBatch:attachAttribute which accept a Mesh (replaced by variants which accept a Buffer).
 * Deprecated Texture:newImageData (replaced by love.graphics.readbackTexture).
 * Deprecated Texture:newImageData (replaced by love.graphics.readbackTexture).
+* Deprecated love.data.hash (replaced by function variant, which takes container type).
 
 
 * Removed the variant of SpriteBatch:setColor() which turns off all previously set colors.
 * Removed the variant of SpriteBatch:setColor() which turns off all previously set colors.
 * Removed the no-argument variant of love.graphics.setColorMask.
 * Removed the no-argument variant of love.graphics.setColorMask.

BIN
extra/windows/love.rc


+ 1 - 1
license.txt

@@ -6,7 +6,7 @@ This distribution contains code from the following projects (full license text b
  - LOVE
  - LOVE
 	Website: https://love2d.org/
 	Website: https://love2d.org/
 	License: zlib
 	License: zlib
-	Copyright (c) 2006-2023 LOVE Development Team
+	Copyright (c) 2006-2024 LOVE Development Team
 
 
  - ENet
  - ENet
 	Website: http://enet.bespin.org/index.html
 	Website: http://enet.bespin.org/index.html

+ 1 - 1
platform/xcode/macosx/love-macosx.plist

@@ -70,7 +70,7 @@
 	<key>NSHighResolutionCapable</key>
 	<key>NSHighResolutionCapable</key>
 	<true/>
 	<true/>
 	<key>NSHumanReadableCopyright</key>
 	<key>NSHumanReadableCopyright</key>
-	<string>© 2006-2023 LÖVE Development Team</string>
+	<string>© 2006-2024 LÖVE Development Team</string>
 	<key>NSPrincipalClass</key>
 	<key>NSPrincipalClass</key>
 	<string>NSApplication</string>
 	<string>NSApplication</string>
 	<key>NSSupportsAutomaticGraphicsSwitching</key>
 	<key>NSSupportsAutomaticGraphicsSwitching</key>

+ 9 - 19
readme.md

@@ -11,12 +11,13 @@ If you need further help, feel free to ask on our [forums][forums], our [Discord
 Repository
 Repository
 ----------
 ----------
 
 
-We use the 'main' branch for patch development of the current major release, and therefore it should not be considered stable.
-There may also be a branch for the next major version in development, which is named after that version.
+We use the 'main' branch for development of the next major release, and therefore it should not be considered stable.
+
+There are also branches for currently released major versions, which may have fixes and changes meant for upcoming patch releases within that major version.
 
 
 We tag all our releases (since we started using mercurial and git), and have binary downloads available for them.
 We tag all our releases (since we started using mercurial and git), and have binary downloads available for them.
 
 
-Experimental changes are developed in a separate [love-experiments][love-experiments] repository.
+Experimental changes are sometimes developed in a separate [love-experiments][love-experiments] repository.
 
 
 Builds
 Builds
 ------
 ------
@@ -32,12 +33,11 @@ There are also unstable/nightly builds:
 Test Suite
 Test Suite
 ----------
 ----------
 
 
-The test suite in `testing/` covers all the LÖVE APIs, and tests them the same way developers use them. You can view current test coverage from any [12.0-dev action][12devworkflows].  
-You can run the suite locally like you would run a normal LÖVE project, i.e.:  
-`love testing/main.lua`
+The test suite in `testing/` covers all the LÖVE APIs, and tests them the same way developers use them. You can view current test coverage from any [action][workflows].  
+You can run the suite locally like you would run a normal LÖVE project, e.g.:  
+`love testing`
 
 
 See the [readme][testsuite] in the testing folder for more info.  
 See the [readme][testsuite] in the testing folder for more info.  
-You can contribute to the test suite [here][testsuitemain]
 
 
 Contributing
 Contributing
 ------------
 ------------
@@ -70,7 +70,6 @@ Then use the Xcode project found at `platform/xcode/love.xcodeproj` to build the
 ### iOS
 ### iOS
 Building for iOS requires macOS and Xcode.
 Building for iOS requires macOS and Xcode.
 
 
-#### LÖVE 11.4 and newer
 Download the `love-apple-dependencies` zip file corresponding to the LÖVE version being used from the [Releases page][dependencies-ios],
 Download the `love-apple-dependencies` zip file corresponding to the LÖVE version being used from the [Releases page][dependencies-ios],
 unzip it, and place the `iOS/libraries` subfolder into love's `platform/xcode/ios` folder.
 unzip it, and place the `iOS/libraries` subfolder into love's `platform/xcode/ios` folder.
 
 
@@ -80,14 +79,6 @@ Then use the Xcode project found at `platform/xcode/love.xcodeproj` to build the
 
 
 See `readme-iOS.rtf` for more information.
 See `readme-iOS.rtf` for more information.
 
 
-#### LÖVE 11.3 and older
-Download the `ios-libraries` zip file corresponding to the LÖVE version being used from the [Releases page][dependencies-ios],
-unzip it, and place the `include` and `libraries` subfolders into love's `platform/xcode/ios` folder.
-
-Then use the Xcode project found at `platform/xcode/love.xcodeproj` to build the `love-ios` target.
-
-See `readme-iOS.rtf` for more information.
-
 ### Android
 ### Android
 Visit the [Android build repository][android-repository] for build instructions.
 Visit the [Android build repository][android-repository] for build instructions.
 
 
@@ -117,6 +108,5 @@ Dependencies
 [codestyle]: https://love2d.org/wiki/Code_Style
 [codestyle]: https://love2d.org/wiki/Code_Style
 [android-repository]: https://github.com/love2d/love-android
 [android-repository]: https://github.com/love2d/love-android
 [releases]: https://github.com/love2d/love/releases
 [releases]: https://github.com/love2d/love/releases
-[testsuite]: https://github.com/love2d/love/tree/12.0-development/testing
-[testsuitemain]: https://github.com/ellraiser/love-test
-[12devworkflows]: https://github.com/love2d/love/actions/workflows/main.yml?query=branch%3A12.0-development
+[testsuite]: https://github.com/love2d/love/tree/main/testing
+[workflows]: https://github.com/love2d/love/actions/workflows/main.yml?query=branch%3Amain

+ 1 - 1
src/common/Color.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 18 - 1
src/common/Data.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -20,10 +20,27 @@
 
 
 // LOVE
 // LOVE
 #include "Data.h"
 #include "Data.h"
+#include "thread/threads.h"
 
 
 namespace love
 namespace love
 {
 {
 
 
 love::Type Data::type("Data", &Object::type);
 love::Type Data::type("Data", &Object::type);
 
 
+Data::~Data()
+{
+	delete mutex;
+}
+
+static void createMutex(love::thread::Mutex **mutexAddress)
+{
+	*mutexAddress = love::thread::newMutex();
+}
+
+love::thread::Mutex *Data::getMutex()
+{
+	std::call_once(mutexCreated, createMutex, &mutex);
+	return mutex;
+}
+
 } // love
 } // love

+ 20 - 6
src/common/Data.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -22,15 +22,20 @@
 #define LOVE_DATA_H
 #define LOVE_DATA_H
 
 
 // LOVE
 // LOVE
-#include "config.h"
 #include "Object.h"
 #include "Object.h"
 
 
 // C
 // C
 #include <stddef.h>
 #include <stddef.h>
+#include <mutex>
 
 
 namespace love
 namespace love
 {
 {
 
 
+namespace thread
+{
+class Mutex;
+}
+
 /**
 /**
  * This class is a simple abstraction over all objects which contain data.
  * This class is a simple abstraction over all objects which contain data.
  **/
  **/
@@ -40,10 +45,8 @@ public:
 
 
 	static love::Type type;
 	static love::Type type;
 
 
-	/**
-	 * Destructor.
-	 **/
-	virtual ~Data() {}
+	Data() {};
+	virtual ~Data();
 
 
 	/**
 	/**
 	 * Creates a duplicate of Data derived class instance.
 	 * Creates a duplicate of Data derived class instance.
@@ -60,6 +63,17 @@ public:
 	 **/
 	 **/
 	virtual size_t getSize() const = 0;
 	virtual size_t getSize() const = 0;
 
 
+	/**
+	 * Gets the Mutex associated with this Data object. Creates it in a thread-
+	 * safe manner if necessary.
+	 **/
+	love::thread::Mutex *getMutex();
+
+private:
+
+	love::thread::Mutex *mutex = nullptr;
+	std::once_flag mutexCreated;
+
 }; // Data
 }; // Data
 
 
 } // love
 } // love

+ 1 - 1
src/common/EnumMap.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Exception.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Exception.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Matrix.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Matrix.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 5 - 2
src/common/Module.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -62,9 +62,12 @@ namespace love
 love::Type Module::type("Module", &Object::type);
 love::Type Module::type("Module", &Object::type);
 Module *Module::instances[] = {};
 Module *Module::instances[] = {};
 
 
-Module::Module()
+Module::Module(Module::ModuleType moduleType, const char *name)
+	: moduleType(moduleType)
+	, name(name)
 {
 {
 	initDeprecation();
 	initDeprecation();
+	registerInstance(this);
 }
 }
 
 
 Module::~Module()
 Module::~Module()

+ 9 - 11
src/common/Module.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -62,13 +62,13 @@ public:
 		M_MAX_ENUM
 		M_MAX_ENUM
 	};
 	};
 
 
-	Module();
+	Module(ModuleType moduleType, const char *name);
 	virtual ~Module();
 	virtual ~Module();
 
 
     /**
     /**
      * Gets the base type of the module.
      * Gets the base type of the module.
      **/
      **/
-	virtual ModuleType getModuleType() const = 0;
+	ModuleType getModuleType() const { return moduleType; }
 
 
 	/**
 	/**
 	 * Gets the name of the module. This is used in case of errors
 	 * Gets the name of the module. This is used in case of errors
@@ -76,14 +76,7 @@ public:
 	 *
 	 *
 	 * @return The full name of the module, eg. love.graphics.opengl.
 	 * @return The full name of the module, eg. love.graphics.opengl.
 	 **/
 	 **/
-	virtual const char *getName() const = 0;
-
-	/**
-	 * Add module to internal registry. To be used /only/ in
-	 * runtime.cpp:luax_register_module()
-	 * @param instance The module instance.
-	 */
-	static void registerInstance(Module *instance);
+	const char *getName() const { return name.c_str(); }
 
 
 	/**
 	/**
 	 * Retrieve module instance from internal registry. May return NULL
 	 * Retrieve module instance from internal registry. May return NULL
@@ -106,6 +99,11 @@ public:
 
 
 private:
 private:
 
 
+	static void registerInstance(Module *instance);
+
+	ModuleType moduleType;
+	std::string name;
+
 	static Module *instances[M_MAX_ENUM];
 	static Module *instances[M_MAX_ENUM];
 
 
 }; // Module
 }; // Module

+ 1 - 1
src/common/Object.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Object.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Optional.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 2 - 2
src/common/Range.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -61,7 +61,7 @@ struct Range
 		return first <= other.first && last >= other.last;
 		return first <= other.first && last >= other.last;
 	}
 	}
 
 
-	bool intersects(const Range &other)
+	bool intersects(const Range &other) const
 	{
 	{
 		return !(first > other.last || last < other.first);
 		return !(first > other.last || last < other.first);
 	}
 	}

+ 1 - 1
src/common/Reference.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Reference.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Stream.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Stream.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/StringMap.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/StringMap.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Variant.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Variant.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Vector.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/Vector.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 9 - 7
src/common/android.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -385,18 +385,20 @@ struct AssetInfo: public love::filesystem::physfs::PhysfsIo<AssetInfo>
 		return 1;
 		return 1;
 	}
 	}
 
 
-	AssetInfo *duplicate() const
+	AssetInfo(const AssetInfo &other)
+	: assetManager(other.assetManager)
+	, size(strlen(other.filename) + 1)
 	{
 	{
-		AAsset *newAsset = AAssetManager_open(assetManager, filename, AASSET_MODE_RANDOM);
+		asset = AAssetManager_open(assetManager, other.filename, AASSET_MODE_RANDOM);
 
 
-		if (newAsset == nullptr)
+		if (asset == nullptr)
 		{
 		{
 			PHYSFS_setErrorCode(PHYSFS_ERR_OS_ERROR);
 			PHYSFS_setErrorCode(PHYSFS_ERR_OS_ERROR);
-			return nullptr;
+			throw new love::Exception("Unable to duplicate AssetInfo");
 		}
 		}
 
 
-		AAsset_seek64(asset, tell(), SEEK_SET);
-		return fromAAsset(assetManager, filename, asset);
+		filename = new (std::nothrow) char[size];
+		memcpy(filename, other.filename, size);
 	}
 	}
 
 
 	~AssetInfo() override
 	~AssetInfo() override

+ 1 - 1
src/common/android.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/apple.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/apple.mm

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/b64.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/b64.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/config.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/delay.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/delay.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/deprecation.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/deprecation.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/floattypes.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/floattypes.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/int.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/ios.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/ios.mm

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/macos.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/macos.mm

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/math.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/memory.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/memory.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 9 - 1
src/common/pixelformat.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -342,6 +342,10 @@ PixelFormat getSRGBPixelFormat(PixelFormat format)
 	{
 	{
 	case PIXELFORMAT_RGBA8_UNORM: return PIXELFORMAT_RGBA8_sRGB;
 	case PIXELFORMAT_RGBA8_UNORM: return PIXELFORMAT_RGBA8_sRGB;
 	case PIXELFORMAT_BGRA8_UNORM: return PIXELFORMAT_BGRA8_sRGB;
 	case PIXELFORMAT_BGRA8_UNORM: return PIXELFORMAT_BGRA8_sRGB;
+	case PIXELFORMAT_DXT1_UNORM: return PIXELFORMAT_DXT1_sRGB;
+	case PIXELFORMAT_DXT3_UNORM: return PIXELFORMAT_DXT3_sRGB;
+	case PIXELFORMAT_DXT5_UNORM: return PIXELFORMAT_DXT5_sRGB;
+	case PIXELFORMAT_BC7_UNORM: return PIXELFORMAT_BC7_sRGB;
 	case PIXELFORMAT_PVR1_RGB2_UNORM: return PIXELFORMAT_PVR1_RGB2_sRGB;
 	case PIXELFORMAT_PVR1_RGB2_UNORM: return PIXELFORMAT_PVR1_RGB2_sRGB;
 	case PIXELFORMAT_PVR1_RGB4_UNORM: return PIXELFORMAT_PVR1_RGB4_sRGB;
 	case PIXELFORMAT_PVR1_RGB4_UNORM: return PIXELFORMAT_PVR1_RGB4_sRGB;
 	case PIXELFORMAT_PVR1_RGBA2_UNORM: return PIXELFORMAT_PVR1_RGBA2_sRGB;
 	case PIXELFORMAT_PVR1_RGBA2_UNORM: return PIXELFORMAT_PVR1_RGBA2_sRGB;
@@ -374,6 +378,10 @@ PixelFormat getLinearPixelFormat(PixelFormat format)
 	{
 	{
 	case PIXELFORMAT_RGBA8_sRGB: return PIXELFORMAT_RGBA8_UNORM;
 	case PIXELFORMAT_RGBA8_sRGB: return PIXELFORMAT_RGBA8_UNORM;
 	case PIXELFORMAT_BGRA8_sRGB: return PIXELFORMAT_BGRA8_UNORM;
 	case PIXELFORMAT_BGRA8_sRGB: return PIXELFORMAT_BGRA8_UNORM;
+	case PIXELFORMAT_DXT1_sRGB: return PIXELFORMAT_DXT1_UNORM;
+	case PIXELFORMAT_DXT3_sRGB: return PIXELFORMAT_DXT3_UNORM;
+	case PIXELFORMAT_DXT5_sRGB: return PIXELFORMAT_DXT5_UNORM;
+	case PIXELFORMAT_BC7_sRGB: return PIXELFORMAT_BC7_UNORM;
 	case PIXELFORMAT_PVR1_RGB2_sRGB: return PIXELFORMAT_PVR1_RGB2_UNORM;
 	case PIXELFORMAT_PVR1_RGB2_sRGB: return PIXELFORMAT_PVR1_RGB2_UNORM;
 	case PIXELFORMAT_PVR1_RGB4_sRGB: return PIXELFORMAT_PVR1_RGB4_UNORM;
 	case PIXELFORMAT_PVR1_RGB4_sRGB: return PIXELFORMAT_PVR1_RGB4_UNORM;
 	case PIXELFORMAT_PVR1_RGBA2_sRGB: return PIXELFORMAT_PVR1_RGBA2_UNORM;
 	case PIXELFORMAT_PVR1_RGBA2_sRGB: return PIXELFORMAT_PVR1_RGBA2_UNORM;

+ 1 - 1
src/common/pixelformat.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 4
src/common/runtime.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -473,9 +473,6 @@ int luax_register_module(lua_State *L, const WrappedModule &m)
 	lua_setfield(L, -3, m.name); // love.graphics = table
 	lua_setfield(L, -3, m.name); // love.graphics = table
 	lua_remove(L, -2); // love
 	lua_remove(L, -2); // love
 
 
-	// Register module instance
-	Module::registerInstance(m.module);
-
 	return 1;
 	return 1;
 }
 }
 
 

+ 16 - 9
src/common/runtime.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -629,22 +629,29 @@ T *luax_optmodule(lua_State *L)
 }
 }
 
 
 /**
 /**
- * Converts the value at idx to the specified type without checking that
- * this conversion is valid. If the type has been previously verified with
- * luax_istype, then this can be safely used. Otherwise, use luax_checktype.
+ * Converts the value at idx to the specified type. Returns null if the type
+ * doesn't match.
  * @param L The Lua state.
  * @param L The Lua state.
  * @param idx The index on the stack.
  * @param idx The index on the stack.
  * @param type The type of the object.
  * @param type The type of the object.
  **/
  **/
 template <typename T>
 template <typename T>
-T *luax_totype(lua_State *L, int idx, const love::Type& /*type*/)
+T *luax_totype(lua_State *L, int idx, const love::Type &type)
 {
 {
-	T *o = (T *)(((Proxy *)lua_touserdata(L, idx))->object);
+	if (lua_type(L, idx) != LUA_TUSERDATA)
+		return nullptr;
 
 
-	if (o == nullptr)
-		luaL_error(L, "Cannot use object after it has been released.");
+	Proxy *p = (Proxy *) lua_touserdata(L, idx);
+
+	if (p->type != nullptr && p->type->isa(type))
+	{
+		if (p->object == nullptr)
+			luaL_error(L, "Cannot use object after it has been released.");
+
+		return (T *) p->object;
+	}
 
 
-	return o;
+	return nullptr;
 }
 }
 
 
 template <typename T>
 template <typename T>

+ 1 - 1
src/common/types.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/types.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/utf8.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/utf8.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/common/version.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/ddsparse/ddsinfo.h

@@ -1,7 +1,7 @@
 /**
 /**
  * Simple DDS data parser for compressed 2D textures.
  * Simple DDS data parser for compressed 2D textures.
  *
  *
- * Copyright (c) 2013-2023 Sasha Szpakowski
+ * Copyright (c) 2013-2024 Sasha Szpakowski
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/ddsparse/ddsparse.cpp

@@ -1,7 +1,7 @@
 /**
 /**
  * Simple DDS data parser for compressed 2D textures.
  * Simple DDS data parser for compressed 2D textures.
  *
  *
- * Copyright (c) 2013-2023 Sasha Szpakowski
+ * Copyright (c) 2013-2024 Sasha Szpakowski
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/ddsparse/ddsparse.h

@@ -1,7 +1,7 @@
 /**
 /**
  * Simple DDS data parser for compressed 2D textures.
  * Simple DDS data parser for compressed 2D textures.
  *
  *
- * Copyright (c) 2013-2023 Sasha Szpakowski
+ * Copyright (c) 2013-2024 Sasha Szpakowski
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/enet/lua-enet.h

@@ -1,5 +1,5 @@
 /**
 /**
-* Copyright (c) 2006-2023 LOVE Development Team
+* Copyright (c) 2006-2024 LOVE Development Team
 * 
 * 
 * This software is provided 'as-is', without any express or implied
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/luasocket/libluasocket/ftp.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/luasocket/libluasocket/headers.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 15 - 9
src/libraries/luasocket/libluasocket/http.lua

@@ -54,7 +54,7 @@ local function receiveheaders(sock, headers)
     while line ~= "" do
     while line ~= "" do
         -- get field-name and value
         -- get field-name and value
         name, value = socket.skip(2, string.find(line, "^(.-):%s*(.*)"))
         name, value = socket.skip(2, string.find(line, "^(.-):%s*(.*)"))
-        if not (name and value) then return nil, "malformed reponse headers" end
+        if not (name and value) then return nil, "malformed response headers" end
         name = string.lower(name)
         name = string.lower(name)
         -- get next line (value might be folded)
         -- get next line (value might be folded)
         line, err  = sock:receive()
         line, err  = sock:receive()
@@ -62,7 +62,7 @@ local function receiveheaders(sock, headers)
         -- unfold any folded values
         -- unfold any folded values
         while string.find(line, "^%s") do
         while string.find(line, "^%s") do
             value = value .. line
             value = value .. line
-            line = sock:receive()
+            line, err = sock:receive()
             if err then return nil, err end
             if err then return nil, err end
         end
         end
         -- save pair in table
         -- save pair in table
@@ -81,7 +81,7 @@ socket.sourcet["http-chunked"] = function(sock, headers)
         dirty = function() return sock:dirty() end
         dirty = function() return sock:dirty() end
     }, {
     }, {
         __call = function()
         __call = function()
-            -- get chunk size, skip extention
+            -- get chunk size, skip extension
             local line, err = sock:receive()
             local line, err = sock:receive()
             if err then return nil, err end
             if err then return nil, err end
             local size = base.tonumber(string.gsub(line, ";.*", ""), 16)
             local size = base.tonumber(string.gsub(line, ";.*", ""), 16)
@@ -219,9 +219,11 @@ local function adjustproxy(reqt)
     local proxy = reqt.proxy or _M.PROXY
     local proxy = reqt.proxy or _M.PROXY
     if proxy then
     if proxy then
         proxy = url.parse(proxy)
         proxy = url.parse(proxy)
-        return proxy.host, proxy.port or 3128
+        proxy.port = proxy.port or 3128
+        proxy.create = SCHEMES[proxy.scheme].create(reqt)
+        return proxy.host, proxy.port, proxy.create
     else
     else
-        return reqt.host, reqt.port
+        return reqt.host, reqt.port, reqt.create
     end
     end
 end
 end
 
 
@@ -279,7 +281,7 @@ local function adjustrequest(reqt)
     if not (host and host ~= "") then
     if not (host and host ~= "") then
         socket.try(nil, "invalid host '" .. base.tostring(nreqt.host) .. "'")
         socket.try(nil, "invalid host '" .. base.tostring(nreqt.host) .. "'")
     end
     end
-    -- compute uri if user hasn't overriden
+    -- compute uri if user hasn't overridden
     nreqt.uri = reqt.uri or adjusturi(nreqt)
     nreqt.uri = reqt.uri or adjusturi(nreqt)
     -- adjust headers in request
     -- adjust headers in request
     nreqt.headers = adjustheaders(nreqt)
     nreqt.headers = adjustheaders(nreqt)
@@ -291,7 +293,10 @@ local function adjustrequest(reqt)
     end
     end
 
 
     -- ajust host and port if there is a proxy
     -- ajust host and port if there is a proxy
-    nreqt.host, nreqt.port = adjustproxy(nreqt)
+    local proxy_create
+    nreqt.host, nreqt.port, proxy_create = adjustproxy(nreqt)
+    if not reqt.create then nreqt.create = proxy_create end
+
     return nreqt
     return nreqt
 end
 end
 
 
@@ -300,6 +305,8 @@ local function shouldredirect(reqt, code, headers)
     if not location then return false end
     if not location then return false end
     location = string.gsub(location, "%s", "")
     location = string.gsub(location, "%s", "")
     if location == "" then return false end
     if location == "" then return false end
+    -- the RFC says the redirect URL may be relative
+    location = url.absolute(reqt.url, location)
     local scheme = url.parse(location).scheme
     local scheme = url.parse(location).scheme
     if scheme and (not SCHEMES[scheme]) then return false end
     if scheme and (not SCHEMES[scheme]) then return false end
     -- avoid https downgrades
     -- avoid https downgrades
@@ -323,8 +330,7 @@ end
 local trequest, tredirect
 local trequest, tredirect
 
 
 --[[local]] function tredirect(reqt, location)
 --[[local]] function tredirect(reqt, location)
-    -- the RFC says the redirect URL has to be absolute, but some
-    -- servers do not respect that
+    -- the RFC says the redirect URL may be relative
     local newurl = url.absolute(reqt.url, location)
     local newurl = url.absolute(reqt.url, location)
     -- if switching schemes, reset port and create function
     -- if switching schemes, reset port and create function
     if url.parse(newurl).scheme ~= reqt.scheme then
     if url.parse(newurl).scheme ~= reqt.scheme then

+ 35 - 15
src/libraries/luasocket/libluasocket/http.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -167,8 +167,8 @@ const unsigned char http_lua[] =
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x61, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x28, 0x6e, 0x61, 
 	0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 
 	0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 
 	0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x22, 0x6d, 0x61, 0x6c, 0x66, 
 	0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 0x22, 0x6d, 0x61, 0x6c, 0x66, 
-	0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x72, 0x65, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x68, 0x65, 0x61, 0x64, 
-	0x65, 0x72, 0x73, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+	0x6f, 0x72, 0x6d, 0x65, 0x64, 0x20, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x20, 0x68, 0x65, 0x61, 
+	0x64, 0x65, 0x72, 0x73, 0x22, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 
 	0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a,
 	0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x67, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x67, 0x65, 0x74, 0x20, 0x6e, 0x65, 0x78, 
@@ -186,8 +186,9 @@ const unsigned char http_lua[] =
 	0x22, 0x29, 0x20, 0x64, 0x6f, 0x0a,
 	0x22, 0x29, 0x20, 0x64, 0x6f, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 
 	0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2e, 0x2e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x0a,
 	0x3d, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x2e, 0x2e, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x0a,
-	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x3d, 
-	0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x29, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 
+	0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 
+	0x28, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x65, 0x72, 0x72, 
 	0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 
 	0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x69, 0x6c, 0x2c, 0x20, 
 	0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x65, 0x72, 0x72, 0x20, 0x65, 0x6e, 0x64, 0x0a,
@@ -235,7 +236,7 @@ const unsigned char http_lua[] =
 	0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a,
 	0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x67, 0x65, 0x74, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x67, 0x65, 0x74, 
 	0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x73, 0x6b, 0x69, 0x70, 0x20, 
 	0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x73, 0x6b, 0x69, 0x70, 0x20, 
-	0x65, 0x78, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x0a,
+	0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 
 	0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 
 	0x6c, 0x69, 0x6e, 0x65, 0x2c, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x3a, 0x72, 
 	0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x29, 0x0a,
 	0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x28, 0x29, 0x0a,
@@ -570,12 +571,20 @@ const unsigned char http_lua[] =
 	0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x75, 0x72, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x20, 0x3d, 0x20, 0x75, 0x72, 
 	0x6c, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x29, 0x0a,
 	0x6c, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x29, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x6f, 0x72, 0x74, 
+	0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x33, 
+	0x31, 0x32, 0x38, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 
+	0x74, 0x65, 0x20, 0x3d, 0x20, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x45, 0x53, 0x5b, 0x70, 0x72, 0x6f, 0x78, 0x79, 
+	0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x5d, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x28, 0x72, 0x65, 
+	0x71, 0x74, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x72, 0x6f, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x72, 0x6f, 
 	0x78, 0x79, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x6f, 0x72, 
 	0x78, 0x79, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x70, 0x6f, 0x72, 
-	0x74, 0x20, 0x6f, 0x72, 0x20, 0x33, 0x31, 0x32, 0x38, 0x0a,
+	0x74, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x71, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x71, 
-	0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x0a,
+	0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x2c, 
+	0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x65, 0x6e, 0x64, 0x0a,
 	0x65, 0x6e, 0x64, 0x0a,
 	0x0a,
 	0x0a,
@@ -710,7 +719,7 @@ const unsigned char http_lua[] =
 	0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x20, 0x75, 0x72, 0x69, 
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x20, 0x75, 0x72, 0x69, 
 	0x20, 0x69, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x68, 0x61, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x6f, 0x76, 
 	0x20, 0x69, 0x66, 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x68, 0x61, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x6f, 0x76, 
-	0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x6e, 0x0a,
+	0x65, 0x72, 0x72, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75, 0x72, 0x69, 0x20, 0x3d, 0x20, 0x72, 0x65, 
 	0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75, 0x72, 0x69, 0x20, 0x3d, 0x20, 0x72, 0x65, 
 	0x71, 0x74, 0x2e, 0x75, 0x72, 0x69, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x75, 0x72, 
 	0x71, 0x74, 0x2e, 0x75, 0x72, 0x69, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x75, 0x72, 
 	0x69, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a,
 	0x69, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a,
@@ -736,9 +745,17 @@ const unsigned char http_lua[] =
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x61, 0x6a, 0x75, 0x73, 0x74, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x20, 
 	0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 
 	0x61, 0x6e, 0x64, 0x20, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x69, 0x66, 0x20, 0x74, 0x68, 0x65, 0x72, 0x65, 0x20, 
 	0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x0a,
 	0x69, 0x73, 0x20, 0x61, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x72, 
+	0x65, 0x61, 0x74, 0x65, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x6e, 0x72, 
 	0x20, 0x20, 0x20, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x68, 0x6f, 0x73, 0x74, 0x2c, 0x20, 0x6e, 0x72, 
-	0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x70, 
-	0x72, 0x6f, 0x78, 0x79, 0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a,
+	0x65, 0x71, 0x74, 0x2e, 0x70, 0x6f, 0x72, 0x74, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x72, 
+	0x65, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x70, 0x72, 0x6f, 0x78, 0x79, 
+	0x28, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x29, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x63, 0x72, 
+	0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x63, 0x72, 
+	0x65, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 
+	0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+	0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x72, 0x65, 0x71, 0x74, 0x0a,
 	0x65, 0x6e, 0x64, 0x0a,
 	0x65, 0x6e, 0x64, 0x0a,
 	0x0a,
 	0x0a,
@@ -757,6 +774,12 @@ const unsigned char http_lua[] =
 	0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 
 	0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x3d, 
 	0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 
 	0x20, 0x22, 0x22, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x61, 
 	0x6c, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x6c, 0x73, 0x65, 0x20, 0x65, 0x6e, 0x64, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x46, 0x43, 0x20, 0x73, 0x61, 0x79, 
+	0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20, 0x55, 0x52, 0x4c, 
+	0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x75, 0x72, 0x6c, 
+	0x2e, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x28, 0x72, 0x65, 0x71, 0x74, 0x2e, 0x75, 0x72, 0x6c, 
+	0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x3d, 
 	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x20, 0x3d, 
 	0x20, 0x75, 0x72, 0x6c, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 
 	0x20, 0x75, 0x72, 0x6c, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x28, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 
 	0x6e, 0x29, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x0a,
 	0x6e, 0x29, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x0a,
@@ -820,10 +843,7 @@ const unsigned char http_lua[] =
 	0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a,
 	0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x46, 0x43, 0x20, 0x73, 0x61, 0x79, 
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x52, 0x46, 0x43, 0x20, 0x73, 0x61, 0x79, 
 	0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20, 0x55, 0x52, 0x4c, 
 	0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x20, 0x55, 0x52, 0x4c, 
-	0x20, 0x68, 0x61, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 
-	0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x0a,
-	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x20, 0x64, 0x6f, 0x20, 
-	0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x70, 0x65, 0x63, 0x74, 0x20, 0x74, 0x68, 0x61, 0x74, 0x0a,
+	0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x65, 0x77, 0x75, 0x72, 0x6c, 0x20, 0x3d, 
 	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6e, 0x65, 0x77, 0x75, 0x72, 0x6c, 0x20, 0x3d, 
 	0x20, 0x75, 0x72, 0x6c, 0x2e, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x28, 0x72, 0x65, 0x71, 0x74, 
 	0x20, 0x75, 0x72, 0x6c, 0x2e, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x65, 0x28, 0x72, 0x65, 0x71, 0x74, 
 	0x2e, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a,
 	0x2e, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x0a,

+ 1 - 1
src/libraries/luasocket/libluasocket/inet.c

@@ -290,7 +290,7 @@ int inet_meth_getsockname(lua_State *L, p_socket ps, int family)
         return 2;
         return 2;
     }
     }
     lua_pushstring(L, name);
     lua_pushstring(L, name);
-    lua_pushstring(L, port);
+    lua_pushinteger(L, (int) strtol(port, (char **) NULL, 10));
     switch (family) {
     switch (family) {
         case AF_INET: lua_pushliteral(L, "inet"); break;
         case AF_INET: lua_pushliteral(L, "inet"); break;
         case AF_INET6: lua_pushliteral(L, "inet6"); break;
         case AF_INET6: lua_pushliteral(L, "inet6"); break;

+ 1 - 1
src/libraries/luasocket/libluasocket/ltn12.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/luasocket/libluasocket/luasocket.h

@@ -10,7 +10,7 @@
 /*-------------------------------------------------------------------------* \
 /*-------------------------------------------------------------------------* \
 * Current socket library version
 * Current socket library version
 \*-------------------------------------------------------------------------*/
 \*-------------------------------------------------------------------------*/
-#define LUASOCKET_VERSION    "LuaSocket 3.0.0"
+#define LUASOCKET_VERSION    "LuaSocket 3.1.0"
 #define LUASOCKET_COPYRIGHT  "Copyright (C) 1999-2013 Diego Nehab"
 #define LUASOCKET_COPYRIGHT  "Copyright (C) 1999-2013 Diego Nehab"
 
 
 /*-------------------------------------------------------------------------*\
 /*-------------------------------------------------------------------------*\

+ 2 - 2
src/libraries/luasocket/libluasocket/makefile

@@ -1,6 +1,6 @@
 # luasocket src/makefile
 # luasocket src/makefile
 #
 #
-# Definitions in this section can be overriden on the command line or in the
+# Definitions in this section can be overridden on the command line or in the
 # environment.
 # environment.
 #
 #
 # These are equivalent:
 # These are equivalent:
@@ -272,7 +272,7 @@ SOCKET_win64=wsocket.obj
 #
 #
 SO=$(SO_$(PLAT))
 SO=$(SO_$(PLAT))
 O=$(O_$(PLAT))
 O=$(O_$(PLAT))
-SOCKET_V=3.0.0
+SOCKET_V=3.1.0
 MIME_V=1.0.3
 MIME_V=1.0.3
 SOCKET_SO=socket-$(SOCKET_V).$(SO)
 SOCKET_SO=socket-$(SOCKET_V).$(SO)
 MIME_SO=mime-$(MIME_V).$(SO)
 MIME_SO=mime-$(MIME_V).$(SO)

+ 1 - 1
src/libraries/luasocket/libluasocket/mbox.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/luasocket/libluasocket/mime.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 28 - 1
src/libraries/luasocket/libluasocket/options.c

@@ -54,6 +54,33 @@ int opt_meth_getoption(lua_State *L, p_opt opt, p_socket ps)
     return opt->func(L, ps);
     return opt->func(L, ps);
 }
 }
 
 
+/*------------------------------------------------------*/
+/* binds socket to network interface */
+int opt_set_bindtodevice(lua_State *L, p_socket ps)
+{
+#ifndef SO_BINDTODEVICE
+    return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
+#else
+    const char *dev = luaL_checkstring(L, 3);
+    return opt_set(L, ps, SOL_SOCKET, SO_BINDTODEVICE, (char*)dev, strlen(dev)+1);
+#endif
+}
+
+int opt_get_bindtodevice(lua_State *L, p_socket ps)
+{
+#ifndef SO_BINDTODEVICE
+    return luaL_error(L, "SO_BINDTODEVICE is not supported on this operating system");
+#else
+    char dev[IFNAMSIZ];
+    int len = sizeof(dev);
+    int err = opt_get(L, ps, SOL_SOCKET, SO_BINDTODEVICE, &dev, &len);
+    if (err)
+        return err;
+    lua_pushstring(L, dev);
+    return 1;
+#endif
+}
+
 /*------------------------------------------------------*/
 /*------------------------------------------------------*/
 /* enables reuse of local address */
 /* enables reuse of local address */
 int opt_set_reuseaddr(lua_State *L, p_socket ps)
 int opt_set_reuseaddr(lua_State *L, p_socket ps)
@@ -190,7 +217,7 @@ int opt_set_send_buf_size(lua_State *L, p_socket ps)
 	return opt_setint(L, ps, SOL_SOCKET, SO_SNDBUF);
 	return opt_setint(L, ps, SOL_SOCKET, SO_SNDBUF);
 }
 }
 
 
-// /*------------------------------------------------------*/
+/*------------------------------------------------------*/
 
 
 #ifdef TCP_FASTOPEN
 #ifdef TCP_FASTOPEN
 int opt_set_tcp_fastopen(lua_State *L, p_socket ps)
 int opt_set_tcp_fastopen(lua_State *L, p_socket ps)

+ 3 - 0
src/libraries/luasocket/libluasocket/options.h

@@ -53,6 +53,9 @@ int opt_get_tcp_keepintvl(lua_State *L, p_socket ps);
 int opt_set_tcp_defer_accept(lua_State *L, p_socket ps);
 int opt_set_tcp_defer_accept(lua_State *L, p_socket ps);
 #endif
 #endif
 
 
+int opt_set_bindtodevice(lua_State *L, p_socket ps);
+int opt_get_bindtodevice(lua_State *L, p_socket ps);
+
 int opt_set_keepalive(lua_State *L, p_socket ps);
 int opt_set_keepalive(lua_State *L, p_socket ps);
 int opt_get_keepalive(lua_State *L, p_socket ps);
 int opt_get_keepalive(lua_State *L, p_socket ps);
 
 

+ 2 - 2
src/libraries/luasocket/libluasocket/smtp.lua

@@ -225,7 +225,7 @@ local function adjust_headers(mesgt)
     lower["date"] = lower["date"] or
     lower["date"] = lower["date"] or
         os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or _M.ZONE)
         os.date("!%a, %d %b %Y %H:%M:%S ") .. (mesgt.zone or _M.ZONE)
     lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
     lower["x-mailer"] = lower["x-mailer"] or socket._VERSION
-    -- this can't be overriden
+    -- this can't be overridden
     lower["mime-version"] = "1.0"
     lower["mime-version"] = "1.0"
     return lower
     return lower
 end
 end
@@ -253,4 +253,4 @@ _M.send = socket.protect(function(mailt)
     return s:close()
     return s:close()
 end)
 end)
 
 
-return _M
+return _M

+ 2 - 2
src/libraries/luasocket/libluasocket/smtp.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -543,7 +543,7 @@ const unsigned char smtp_lua[] =
 	0x6c, 0x65, 0x72, 0x22, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x5f, 0x56, 
 	0x6c, 0x65, 0x72, 0x22, 0x5d, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x5f, 0x56, 
 	0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a,
 	0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x27, 0x74, 0x20, 
-	0x62, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x6e, 0x0a,
+	0x62, 0x65, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x2d, 0x76, 0x65, 
 	0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5b, 0x22, 0x6d, 0x69, 0x6d, 0x65, 0x2d, 0x76, 0x65, 
 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x22, 0x0a,
 	0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5d, 0x20, 0x3d, 0x20, 0x22, 0x31, 0x2e, 0x30, 0x22, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x0a,

+ 1 - 1
src/libraries/luasocket/libluasocket/socket.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 2 - 0
src/libraries/luasocket/libluasocket/tcp.c

@@ -71,6 +71,7 @@ static luaL_Reg tcp_methods[] = {
 
 
 /* socket option handlers */
 /* socket option handlers */
 static t_opt optget[] = {
 static t_opt optget[] = {
+    {"bindtodevice", opt_get_bindtodevice},
     {"keepalive",   opt_get_keepalive},
     {"keepalive",   opt_get_keepalive},
     {"reuseaddr",   opt_get_reuseaddr},
     {"reuseaddr",   opt_get_reuseaddr},
     {"reuseport",   opt_get_reuseport},
     {"reuseport",   opt_get_reuseport},
@@ -92,6 +93,7 @@ static t_opt optget[] = {
 };
 };
 
 
 static t_opt optset[] = {
 static t_opt optset[] = {
+    {"bindtodevice", opt_set_bindtodevice},
     {"keepalive",   opt_set_keepalive},
     {"keepalive",   opt_set_keepalive},
     {"reuseaddr",   opt_set_reuseaddr},
     {"reuseaddr",   opt_set_reuseaddr},
     {"reuseport",   opt_set_reuseport},
     {"reuseport",   opt_set_reuseport},

+ 1 - 1
src/libraries/luasocket/libluasocket/tp.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/luasocket/libluasocket/url.lua

@@ -152,7 +152,7 @@ function _M.parse(url, default)
     url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
     url = string.gsub(url, "^([%w][%w%+%-%.]*)%:",
         function(s) parsed.scheme = s; return "" end)
         function(s) parsed.scheme = s; return "" end)
     -- get authority
     -- get authority
-    url = string.gsub(url, "^//([^/]*)", function(n)
+    url = string.gsub(url, "^//([^/%?#]*)", function(n)
         parsed.authority = n
         parsed.authority = n
         return ""
         return ""
     end)
     end)

+ 4 - 3
src/libraries/luasocket/libluasocket/url.lua.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  * 
  * 
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -402,8 +402,9 @@ const unsigned char url_lua[] =
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x67, 0x65, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 
 	0x20, 0x20, 0x20, 0x20, 0x2d, 0x2d, 0x20, 0x67, 0x65, 0x74, 0x20, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 
 	0x74, 0x79, 0x0a,
 	0x74, 0x79, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 
 	0x20, 0x20, 0x20, 0x20, 0x75, 0x72, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 
-	0x73, 0x75, 0x62, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x22, 0x5e, 0x2f, 0x2f, 0x28, 0x5b, 0x5e, 0x2f, 0x5d, 
-	0x2a, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 0x29, 0x0a,
+	0x73, 0x75, 0x62, 0x28, 0x75, 0x72, 0x6c, 0x2c, 0x20, 0x22, 0x5e, 0x2f, 0x2f, 0x28, 0x5b, 0x5e, 0x2f, 0x25, 
+	0x3f, 0x23, 0x5d, 0x2a, 0x29, 0x22, 0x2c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6e, 
+	0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x61, 0x75, 0x74, 
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x2e, 0x61, 0x75, 0x74, 
 	0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x6e, 0x0a,
 	0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x6e, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x22, 0x22, 0x0a,

+ 1 - 1
src/libraries/luasocket/libluasocket/usocket.c

@@ -236,7 +236,7 @@ int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,
     *sent = 0;
     *sent = 0;
     if (*ps == SOCKET_INVALID) return IO_CLOSED;
     if (*ps == SOCKET_INVALID) return IO_CLOSED;
     for ( ;; ) {
     for ( ;; ) {
-        long put = (long) sendto(*ps, data, count, 0, addr, len); 
+        long put = (long) sendto(*ps, data, count, 0, addr, len);
         if (put >= 0) {
         if (put >= 0) {
             *sent = put;
             *sent = put;
             return IO_DONE;
             return IO_DONE;

+ 2 - 0
src/libraries/luasocket/libluasocket/wsocket.c

@@ -262,6 +262,7 @@ int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
         if (err != WSAEWOULDBLOCK) {
         if (err != WSAEWOULDBLOCK) {
             if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
             if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
             prev = err;
             prev = err;
+            continue;
         }
         }
         if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
         if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
     }
     }
@@ -291,6 +292,7 @@ int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,
         if (err != WSAEWOULDBLOCK) {
         if (err != WSAEWOULDBLOCK) {
             if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
             if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
             prev = err;
             prev = err;
+            continue;
         }
         }
         if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
         if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
     }
     }

+ 1 - 1
src/libraries/luasocket/luasocket.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/libraries/luasocket/luasocket.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 3 - 3
src/love.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -150,11 +150,11 @@ enum DoneAction
 static void print_usage()
 static void print_usage()
 {
 {
     // when editing this message, change it at boot.lua too
     // when editing this message, change it at boot.lua too
-    printf("LÖVE is an *awesome* framework you can use to make 2D games in Lua\n"
+    printf("LOVE is an *awesome* framework you can use to make 2D games in Lua\n"
         "https://love2d.org\n"
         "https://love2d.org\n"
         "\n"
         "\n"
         "usage:\n"
         "usage:\n"
-        "    love --version                  prints LÖVE version and quits\n"
+        "    love --version                  prints LOVE version and quits\n"
         "    love --help                     prints this message and quits\n"
         "    love --help                     prints this message and quits\n"
         "    love path/to/gamedir            runs the game from the given directory which contains a main.lua file\n"
         "    love path/to/gamedir            runs the game from the given directory which contains a main.lua file\n"
         "    love path/to/packagedgame.love  runs the packaged game from the provided .love file\n"
         "    love path/to/packagedgame.love  runs the packaged game from the provided .love file\n"

+ 5 - 1
src/modules/audio/Audio.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -68,6 +68,10 @@ void showRecordingPermissionMissingDialog()
 #endif
 #endif
 }
 }
 
 
+Audio::Audio(const char *name)
+	: Module(M_AUDIO, name)
+{}
+
 bool Audio::setMixWithSystem(bool mix)
 bool Audio::setMixWithSystem(bool mix)
 {
 {
 #ifdef LOVE_IOS
 #ifdef LOVE_IOS

+ 5 - 4
src/modules/audio/Audio.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages
@@ -101,9 +101,6 @@ public:
 
 
 	virtual ~Audio() {}
 	virtual ~Audio() {}
 
 
-	// Implements Module.
-	virtual ModuleType getModuleType() const { return M_AUDIO; }
-
 	virtual Source *newSource(love::sound::Decoder *decoder) = 0;
 	virtual Source *newSource(love::sound::Decoder *decoder) = 0;
 	virtual Source *newSource(love::sound::SoundData *soundData) = 0;
 	virtual Source *newSource(love::sound::SoundData *soundData) = 0;
 	virtual Source *newSource(int sampleRate, int bitDepth, int channels, int buffers) = 0;
 	virtual Source *newSource(int sampleRate, int bitDepth, int channels, int buffers) = 0;
@@ -312,6 +309,10 @@ public:
 	 */
 	 */
 	virtual void setPlaybackDevice(const char *name);
 	virtual void setPlaybackDevice(const char *name);
 
 
+protected:
+
+	Audio(const char *name);
+
 private:
 private:
 
 
 	static StringMap<DistanceModel, DISTANCE_MAX_ENUM>::Entry distanceModelEntries[];
 	static StringMap<DistanceModel, DISTANCE_MAX_ENUM>::Entry distanceModelEntries[];

+ 1 - 1
src/modules/audio/Effect.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/Effect.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/Filter.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/Filter.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/RecordingDevice.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/RecordingDevice.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/Source.cpp

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

+ 1 - 1
src/modules/audio/Source.h

@@ -1,5 +1,5 @@
 /**
 /**
- * Copyright (c) 2006-2023 LOVE Development Team
+ * Copyright (c) 2006-2024 LOVE Development Team
  *
  *
  * This software is provided 'as-is', without any express or implied
  * This software is provided 'as-is', without any express or implied
  * warranty.  In no event will the authors be held liable for any damages
  * warranty.  In no event will the authors be held liable for any damages

Some files were not shown because too many files changed in this diff