Repository: godot
Issue: Double-Precision Godot editor crashes while binding functions for GDExtension
Labels: enhancement,documentation,topic:gdextension

### Tested versions

- Reproducible in: 4.2.1 and 4.3.dev (even after #88188)

### System information

Windows 10  64bits

### Issue description

- I'm trying to run my project with double-precision enabled.

- This project is around 50% GDExtension code, and 50% GDscript.

- It works perfectly fine with a normal precision build, but crashes at startup with the double-precision editor build.

- I recompiled the godot-cpp libraries using the following command "scons precision=double -j12 custom_api_file="extension_api.json"

- extension_api.json was directly dumped from the two Godot versions I tested (4.2.1 stable and 4.3 latest)

<details><summary>My bind_methods() function is the following:</summary>

```
void BaseClass3D::_bind_methods() {

    // forceMultiplier
    ClassDB::bind_method(D_METHOD("get_forceMultiplier"), &BaseClass3D::get_forceMultiplier);
    ClassDB::bind_method(D_METHOD("set_forceMultiplier", "p_forceMultiplier"), &BaseClass3D::set_forceMultiplier);
    ClassDB::add_property("BaseClass3D", PropertyInfo(Variant::FLOAT, "forceMultiplier"), "set_forceMultiplier", "get_forceMultiplier");

    // damping
    ClassDB::bind_method(D_METHOD("get_damping"), &BaseClass3D::get_damping);
    ClassDB::bind_method(D_METHOD("set_damping", "p_damping"), &BaseClass3D::set_damping);
    ClassDB::add_property("BaseClass3D", PropertyInfo(Variant::FLOAT, "damping"), "set_damping", "get_damping");

    // ljDistance
    ClassDB::bind_method(D_METHOD("get_ljDistance"), &BaseClass3D::get_ljDistance);
    ClassDB::bind_method(D_METHOD("set_ljDistance", "p_ljDistance"), &BaseClass3D::set_ljDistance);
    ClassDB::add_property("BaseClass3D", PropertyInfo(Variant::FLOAT, "ljDistance"), "set_ljDistance", "get_ljDistance");

    // numThreads
    ClassDB::bind_method(D_METHOD("get_numThreads"), &BaseClass3D::get_numThreads);
    ClassDB::bind_method(D_METHOD("set_numThreads", "p_numThreads"), &BaseClass3D::set_numThreads);
    ClassDB::add_property("BaseClass3D", PropertyInfo(Variant::INT, "numThreads"), "set_numThreads", "get_numThreads");

    // useMultiThreading
    ClassDB::bind_method(D_METHOD("get_useMultiThreading"), &BaseClass3D::get_useMultiThreading);
    ClassDB::bind_method(D_METHOD("set_useMultiThreading", "p_useMultiThreading"), &BaseClass3D::set_useMultiThreading);
    ClassDB::add_property("BaseClass3D", PropertyInfo(Variant::BOOL, "useMultiThreading"), "set_useMultiThreading", "get_useMultiThreading");

    // Bind function of SIGNAL
    ClassDB::bind_method(D_METHOD("_rid_clicked"), &BaseClass3D::_rid_clicked);
    ClassDB::bind_method(D_METHOD("_force_changed"), &BaseClass3D::_force_changed);
    ClassDB::bind_method(D_METHOD("_damping_changed"), &BaseClass3D::_damping_changed);
    ClassDB::bind_method(D_METHOD("_ljDistance_changed"), &BaseClass3D::_ljDistance_changed);
    ClassDB::bind_method(D_METHOD("_relSize_changed"), &BaseClass3D::_relSize_changed);
    ClassDB::bind_method(D_METHOD("_btMultiThreading_pressed"), &BaseClass3D::_btMultiThreading_pressed);
    ClassDB::bind_method(D_METHOD("_btTrajectories_pressed"), &BaseClass3D::_btTrajectories_pressed);
    ClassDB::bind_method(D_METHOD("_playMode"), &BaseClass3D::_playMode);
    ClassDB::bind_method(D_METHOD("_setSimSpeed"), &BaseClass3D::_setSimSpeed);
    ClassDB::bind_method(D_METHOD("_btEnsurePrecision_pressed"), &BaseClass3D::_btEnsurePrecision_pressed);
    ClassDB::bind_method(D_METHOD("_listIntegrationMethod_changed"), &BaseClass3D::_listIntegrationMethod_changed);
    
    // Bind callable function
    ClassDB::bind_method(D_METHOD("manage_resource", "parameters"), &BaseClass3D::_manage_resource);
    ClassDB::bind_method(D_METHOD("picker_clicked", "idx", "mode"), &BaseClass3D::_picker_clicked);
    ClassDB::bind_method(D_METHOD("add_resource"), &BaseClass3D::_add_resource);
    ClassDB::bind_method(D_METHOD("cancel_resource"), &BaseClass3D::_cancel_resource);
}
```

</details>

- The error I get before crashing is the following (this only shows up if there's something inside _bind_methods() and the editor+cpp were compiled with double precision):
![image](https://github.com/godotengine/godot/assets/67602607/cb3d456b-9b9e-4ed8-8bef-07e7ce1abf80)

### Steps to reproduce

- Compile Godot with `precision=double`
- Create a project, setup GDExtension, bind some signals and/or functions
- Compile cpp libraries with `scons precision=double custom_api_file="extension_api.json"` command
- Open the project,  watch the console, check if the editor crashes

### Minimal reproduction project (MRP)

This is happening in a really big project of mine. But when I get the time, I'll to add an MRP. (turned out to not be needed)