summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/gdscript_function.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Actually set GDScript static referenceGeorge Marques2020-05-291-0/+2
|
* Merge pull request #39074 from vnen/gdscript-assert-messageRémi Verschelde2020-05-271-2/+5
|\ | | | | Fix assert message when no custom message is set
| * GDScript: Fix assert message when no custom message is setGeorge Marques2020-05-261-2/+5
| |
* | Fix too eager GDScriptFunctionState stack cleanupPedro J. Estébanez2020-05-191-2/+0
|/
* Style: Enforce braces around if blocks and loopsRémi Verschelde2020-05-141-19/+36
| | | | | Using clang-tidy's `readability-braces-around-statements`. https://clang.llvm.org/extra/clang-tidy/checks/readability-braces-around-statements.html
* Style: Enforce separation line between function definitionsRémi Verschelde2020-05-141-0/+2
| | | | | | | | | | | | | | | | | | | | | | | I couldn't find a tool that enforces it, so I went the manual route: ``` find -name "thirdparty" -prune \ -o -name "*.cpp" -o -name "*.h" -o -name "*.m" -o -name "*.mm" \ -o -name "*.glsl" > files perl -0777 -pi -e 's/\n}\n([^#])/\n}\n\n\1/g' $(cat files) misc/scripts/fix_style.sh -c ``` This adds a newline after all `}` on the first column, unless they are followed by `#` (typically `#endif`). This leads to having lots of places with two lines between function/class definitions, but clang-format then fixes it as we enforce max one line of separation. This doesn't fix potential occurrences of function definitions which are indented (e.g. for a helper class defined in a .cpp), but it's better than nothing. Also can't be made to run easily on CI/hooks so we'll have to be careful with new code. Part of #33027.
* Style: clang-format: Disable KeepEmptyLinesAtTheStartOfBlocksRémi Verschelde2020-05-141-106/+0
| | | | | | | | | | | | | | Which means that reduz' beloved style which we all became used to will now be changed automatically to remove the first empty line. This makes us lean closer to 1TBS (the one true brace style) instead of hybridating it with some Allman-inspired spacing. There's still the case of braces around single-statement blocks that needs to be addressed (but clang-format can't help with that, but clang-tidy may if we agree about it). Part of #33027.
* Modernize remaining uses of 0/NULL instead of nullptr (C++11)Rémi Verschelde2020-05-141-1/+1
| | | | | Using clang-tidy's `modernize-use-nullptr`. https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
* Fix object leaks caused by unfulfilled yieldsPedro J. Estébanez2020-05-051-28/+55
| | | | | | | | | | Now the stack saved in a `GDScriptFunctionState` is cleared as soon as the `yield()` operation is known not to be resumed because either the script, the instance or both are deleted. This clears problems like leaked objects by eliminating cases of circular references between `GDScriptFunctionState`s preventing them and the objects they refer to in their saved stacks from being released. As an example, this makes using `SceneTreeTimer` safer. Furthermore, with this change it's now possible to print early warnings about `yield()`s to released script/instances, as now we know they won't be successfully resumed as the condition for that happens. However, this PR doesn't add such messages, to keep the observed behavior the same for the time being. Also, now a backup of the function name in `GDScriptFunctionState` is used, since the script may not be valid by the time the function name is needed for the resume-after-yield error messages.
* Fix leaked objects when game ends with yields in progressPedro J. Estébanez2020-04-291-9/+21
|
* Merge pull request #37318 from ttencate/fix/argument_nulled_37312Rémi Verschelde2020-04-221-9/+4
|\ | | | | Revert "Allow parameters passed to GDScript functions to be nulled"
| * Revert "Allow parameters passed to GDScript functions to be nulled"Thomas ten Cate2020-03-261-9/+4
| | | | | | | | | | | | This reverts commit f0efc7521e7302e60ebaab31a42fafd3ea2bda68. Fixes #37312.
* | Replace NULL with nullptrlupoDharkael2020-04-021-29/+29
|/
* Style: Set clang-format Standard to Cpp11Rémi Verschelde2020-03-171-1/+1
| | | | | | | | | | For us, it practically only changes the fact that `A<A<int>>` is now used instead of the C++03 compatible `A<A<int> >`. Note: clang-format 10+ changed the `Standard` arguments to fully specified `c++11`, `c++14`, etc. versions, but we can't use `c++17` now if we want to preserve compatibility with clang-format 8 and 9. `Cpp11` is still supported as deprecated alias for `Latest`.
* Refactor ScriptDebugger.Fabio Alessandrelli2020-03-081-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | EngineDebugger is the new interface to access the debugger. It tries to be as agnostic as possible on the data that various subsystems can expose. It allows 2 types of interactions: - Profilers: A subsystem can register a profiler, assigning it a unique name. That name can be used to activate the profiler or add data to it. The registered profiler can be composed of up to 3 functions: - Toggle: called when the profiler is activated/deactivated. - Add: called whenever data is added to the debugger (via `EngineDebugger::profiler_add_frame_data`) - Tick: called every frame (during idle), receives frame times. - Captures: (Only relevant in remote debugger for now) A subsystem can register a capture, assigning it a unique name. When receiving a message, the remote debugger will check if it starts with `[prefix]:` and call the associated capture with name `prefix`. Port MultiplayerAPI, Servers, Scripts, Visual, Performance to the new profiler system. Port SceneDebugger and RemoteDebugger to the new capture system. The LocalDebugger also uses the new profiler system for scripts profiling.
* Reimplement Mutex with C++'s <mutex>Pedro J. Estébanez2020-02-261-13/+6
| | | | | | | | | | | | | | | | Main: - It's now implemented thanks to `<mutex>`. No more platform-specific implementations. - `BinaryMutex` (non-recursive) is added, as an alternative for special cases. - Doesn't need allocation/deallocation anymore. It can live in the stack and be part of other classes. - Because of that, it's methods are now `const` and the inner mutex is `mutable` so it can be easily used in `const` contexts. - A no-op implementation is provided if `NO_THREADS` is defined. No more need to add `#ifdef NO_THREADS` just for this. - `MutexLock` now takes a reference. At this point the cases of null `Mutex`es are rare. If you ever need that, just don't use `MutexLock`. - Thread-safe utilities are therefore simpler now. Misc.: - `ScopedMutexLock` is dropped and replaced by `MutexLock`, because they were pretty much the same. - Every case of lock, do-something, unlock is replaced by `MutexLock` (complex cases where it's not straightfoward are kept as as explicit lock and unlock). - `ShaderRD` contained an `std::mutex`, which has been replaced by `Mutex`.
* Reworked signal connection system, added support for Callable and Signal ↵Juan Linietsky2020-02-201-36/+36
| | | | objects and made them default.
* GDScript: Remove self static reference and create one on callsGeorge Marques2020-02-191-7/+8
| | | | | | This is needed because of the new changes to Variant. The reference counter is increased by adding it to a Variant, which means no GDScript will be freed (or will be double freed if manually freed somewhere).
* Changed logic and optimized ObjectID in ObjectDB and Variant, removed RefPtr.Juan Linietsky2020-02-151-23/+39
|
* ObjectID converted to a structure, fixes many bugs where used incorrectly as ↵Juan Linietsky2020-02-121-3/+3
| | | | 32 bits.
* Remove unused #if 0'ed codeRémi Verschelde2020-01-211-3/+1
|
* Fix constant access in base class through subclass instanceChibiDenDen2020-01-171-7/+7
| | | | | | | | Fixes as issue where a subclass calls a base class method that tries to access a constant from the script. The original code went through every ower class, and for each owner, went through its inheritance tree. This seems like the wrong order, the modified code goes to each base class, and for each base class goes through the owner tree. This is more in line with what the parser does, as the current impelemtation allows an access that the parser does not support. This change should not negatively affect existing code due to the way the parser works
* GDScript: Validate object instance on `is` operationGeorge Marques2020-01-091-0/+7
| | | | | | | | Avoids crashes on debug mode. Instead it now breaks the execution and show the error in-editor. Will still crash on release. Also add a similar check to Marshalls to ensure the debugger doesn't crash when trying to serialize the invalid instance.
* Update copyright statements to 2020Rémi Verschelde2020-01-011-2/+2
| | | | | | | | | | | Happy new year to the wonderful Godot community! We're starting a new decade with a well-established, non-profit, free and open source game engine, and tons of further improvements in the pipeline from hundreds of contributors. Godot will keep getting better, and we're looking forward to all the games that the community will keep developing and releasing with it.
* GDScript: Fix type conversion in assignment with operationGeorge Marques2019-12-131-3/+3
|
* Remove ERR_EXPLAIN macros and the scaffolding they needed.Marcel Admiraal2019-11-111-2/+1
|
* GDScript: validate instance before accessing it on errorGeorge Marques2019-11-011-2/+2
| | | | | | | | Make sure the instance is valid before trying to access the script in after an error happened. If the instance is not valid it's possible that the script is invalid as well. Fix #29623
* Fixed some obvious typos in error messagesnoname14772019-10-051-4/+4
| | | | In some errors, there were closing quotation marks but no opening (e. g. "Unable to iterate on object of type " + Variant::get_type_name(container->get_type()) + "'."
* GDScript: add an optional message parameter to assert()Mitch Curtis2019-09-111-4/+9
| | | | | | | | | | | | | | | | | Before this patch, assert() only took the condition to assert on: assert(item_data) Now, it can optionally take a string that will be printed upon failure: assert(item_data, item_name + " has no item data in ItemDatabase") This makes it easier to immediately see what the issue is by being able to write informative failure messages. Thanks to @wiped1 for sharing their patch, upon which this is based. Closes #17082
* Fix yield check in GDScriptFunctionBojidar Marinov2019-08-281-2/+2
| | | | Fixes #31455
* Replace 'ERR_EXPLAIN' with 'ERR_FAIL_*_MSG' in "platform", ↵Robin Hübner2019-08-091-6/+3
| | | | "modules/gdnative", "modules/gdscript" directories.
* Fix stack underflows when yielding twiceBojidar Marinov2019-07-171-49/+1
| | | | | Also, refactor GDScriptFunctionState::_signal_callback, removing some excessive repetition. Fixes #30269.
* Merge pull request #28884 from vnen/yield-resume-stackRémi Verschelde2019-07-011-8/+41
|\ | | | | Keep GDScript functions in stack while yielding
| * Show function name in debugger stack traceGeorge Marques2019-05-141-2/+2
| | | | | | | | | | Also show script and line when the instance is gone when resuming from yield.
| * Keep GDScript functions in stack while yieldingGeorge Marques2019-05-141-6/+39
| | | | | | | | | | | | | | | | | | | | This prevents GDScript functions from leaving the stack too soon when they are resuming from yield, allowing the ones expecting it to finish to know the caller. Helps debugging cases when you use: `yield(function_which_yields(), "completed")` since now it shows the call that resumed that function.
* | fix some crashesFurkan Türkal2019-07-011-2/+2
| |
* | GDScript: Improve error on Object to Object invalid argument callsRémi Verschelde2019-06-181-27/+35
|/ | | | Fixes #27804.
* Revert "Forbid implicit type conversion in GDScript"Rémi Verschelde2019-03-041-3/+8
|
* GDScript: Forbid implicit type conversionGeorge Marques2019-03-031-8/+3
| | | | | Since types are not present in release builds, this could cause issues where a variable does not have the exact defined type.
* Allow parameters passed to GDScript functions to be nulledBojidar Marinov2019-03-031-4/+9
| | | | | Previous version resulted in confusing (but actually right) errors about converting "from Object to Object", since CallError does not include information about the actual types involved.
* Fix wrong error messages for invalid arguments when calling functions ↵Bojidar Marinov2019-01-311-1/+1
| | | | | | through call Fixes #25505
* Update copyright statements to 2019Rémi Verschelde2019-01-011-2/+2
| | | | Happy new year to the wonderful Godot community!
* Merge pull request #23959 from RandomShaper/fix-dangling-script-fixRémi Verschelde2018-11-261-24/+9
|\ | | | | Fix dangling script fix
| * Fix crash on signal/resume to dangling targetPedro J. Estébanez2018-11-251-27/+17
| |
| * Revert "Fix crash on signal/resume to dangling target"Pedro J. Estébanez2018-11-241-27/+22
| | | | | | | | This reverts commit 54bdc1e1f6a7fb85a5b193c9b8ecf0dcf06949e6.
* | Allow primitives to be compared to Object types with `is`George Marques2018-11-171-30/+27
|/
* Fix crash on signal/resume to dangling targetPedro J. Estébanez2018-10-171-22/+27
| | | | Fixes #22443.
* Fix compiler warnings in GDScript moduleGeorge Marques2018-10-061-10/+19
|
* Revert cause of #22794Mariusz Chwalba2018-10-061-5/+5
|
* Fix warnings on release builds (not DEBUG_ENABLED)Rémi Verschelde2018-10-031-13/+11
| | | | | | | | | | | | | | | | | | | | | | | | Fixes the following Clang 5 warnings: ``` modules/bmp/image_loader_bmp.cpp:46:60: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare] modules/bmp/image_loader_bmp.cpp:48:61: warning: comparison of unsigned expression < 0 is always false [-Wtautological-compare] drivers/png/image_loader_png.cpp:231:20: warning: comparison of unsigned expression >= 0 is always true [-Wtautological-compare] scene/gui/graph_edit.cpp:1045:8: warning: comparison of constant 0 with expression of type 'bool' is always false [-Wtautological-constant-out-of-range-compare] core/class_db.cpp:812:13: warning: unused variable 'check' [-Wunused-variable] core/io/file_access_pack.cpp:172:11: warning: unused variable 'ver_rev' [-Wunused-variable] core/math/bsp_tree.cpp:195:13: warning: unused variable 'plane' [-Wunused-variable] core/math/bsp_tree.cpp:168:6: warning: unused variable 'plane_count' [-Wunused-variable] modules/gdscript/gdscript_function.cpp:685:10: warning: unused variable 'ok' [-Wunused-variable] modules/gdscript/gdscript_function.cpp:706:10: warning: unused variable 'ok' [-Wunused-variable] modules/gdscript/gdscript_function.cpp:755:19: warning: unused variable 'var_type' [-Wunused-variable] modules/gdscript/gdscript_function.cpp:1306:12: warning: unused variable 'err' [-Wunused-variable] modules/gdscript/gdscript_function.cpp:158:15: warning: unused function '_get_var_type' [-Wunused-function] modules/gdscript/gdscript_parser.cpp:750:20: warning: unused variable 'lv' [-Wunused-variable] modules/gdscript/gdscript_parser.cpp:59:15: warning: unused function '_find_function_name' [-Wunused-function] scene/main/node.cpp:2489:13: warning: unused function '_Node_debug_sn' [-Wunused-function] ```