cca26cc83f
There are two ways a class can be added to ClassDB:
- `A`: When an instance of the class is created for the first time. When
this happends the class is not registered/exposed to scripts.
- `B`: When calling `GDREGISTER_CLASS(ClassName)` or similar. When this
happens the class is registered/exposed to scripts.
ClassDB has an API type property to differentiate between the core
and editor APIs. Up until now the API type was determined whenever
the class is added to ClassDB (either `A` or `B`).
The problem comes when a class is instantiated (`A`) before
being registered (`B`).
If at this point the current defined API is not the same as when the
class is later registered, this will result in a mismatch between
`--editor` and non-editor apps.
This is specially bad for C# as it makes the editor player abort.
This was happening with `EditorPaths` which, while being registered
during the editor API classes registrations, it was also being
instantiated earlier when running the editor or the project manager,
via a call to `EditorPaths::create()`. This regression was introduced
in
|
||
---|---|---|
.. | ||
callable_method_pointer.cpp | ||
callable_method_pointer.h | ||
class_db.cpp | ||
class_db.h | ||
make_virtuals.py | ||
message_queue.cpp | ||
message_queue.h | ||
method_bind.cpp | ||
method_bind.h | ||
object_id.h | ||
object.cpp | ||
object.h | ||
ref_counted.cpp | ||
ref_counted.h | ||
script_language.cpp | ||
script_language.h | ||
SCsub | ||
undo_redo.cpp | ||
undo_redo.h |