Commit Graph

171 Commits

Author SHA1 Message Date
0a67ee52d1 Revert "GDScript: Implement get_dependencies()"
This reverts commit dc73440f89.

This commit in some form is needed to fix handling of dependencies on
export, but as it's also used for import, it's exposing some pre-existing
issues which we need to solve first.

So reverting for now to give ourselves time to iron this out for a future
Godot release.

Fixes #91726.
2024-05-13 16:59:43 +02:00
4d43fe1c96 Merge pull request #91472 from vnen/gdscript-default-static-variables-non-tool
GDScript: Initialize static variables with defaults in-editor
2024-05-03 01:21:40 +02:00
22236380c0 GDScript: Initialize static variables with defaults in-editor
When the script is not marked as `@tool` the static constructor is not
called and thus the variables contain `null` by default. But since some
validated operations requires a valid value, this would cause a crash.

This commit solves this by initializing the static variables with a
default value based on their types in the editor, when they are not
marked as `@tool`, so if some `@tool` script access them, they will have
a valid typed value, avoiding the crash.
2024-05-02 15:09:22 -03:00
99b702ea3d GDScript: Call implicit ready on base script first
It is generally expected that the base class is called before the
inherited clas. This commit implements this behavior for the implicit
ready function (`@onready` annotation) to make it consistent with the
expectations.
2024-05-02 11:25:52 -03:00
dc73440f89 GDScript: Implement get_dependencies()
The parser and analyzer now track the dependencies of the script and
return the list when the resource loader ask for them.

What is considered a dependency:

- Any `preload()` call.
- The base script this one extends.
- Any identifier, including types, that refers to global scripts.
- Any autoload singleton reference.
2024-04-18 11:54:37 -03:00
d4e1a74efb Add 'override' mark to ResourceFormat class 2024-03-25 04:06:34 +08:00
59bcc2888c Add methods to get argument count of methods
Added to:
* `Callable`s
* `Object`s
* `ClassDB`
* `Script(Instance)`s
2024-03-10 11:02:43 +01:00
8ffc50ee8c GDScript: Canonicalize script path in FQCN 2024-02-26 10:46:24 +03:00
6f805dee2a Merge pull request #88365 from dalexeev/gds-fix-gdc-export
GDScript: Fix extension comparison for exported scripts
2024-02-15 17:35:58 +01:00
a2e3e31e80 GDScript: Fix extension comparison for exported scripts 2024-02-15 17:53:24 +03:00
a8bc9f3e78 Add const lvalue ref to core/* container parameters 2024-02-14 11:20:36 -03:00
986c8af29d Merge pull request #81629 from rune-scape/more-gdscript-deps
GDScript: Include lambda dependencies
2024-02-12 13:33:22 +01:00
b4d0a09f15 GDScript: Reintroduce binary tokenization on export
This adds back a function available in 3.x: exporting the GDScript
files in a binary form by converting the tokens recognized by the
tokenizer into a data format.

It is enabled by default on export but can be manually disabled. The
format helps with loading times since, the tokens are easily
reconstructed, and with hiding the source code, since recovering it
would require a specialized tool. Code comments are not stored in this
format.

The `--test` command can also include a `--use-binary-tokens` flag
which will run the GDScript tests with the binary format instead of the
regular source code by converting them in-memory before the test runs.
2024-02-08 11:20:05 -03:00
745f8e112f Revert "Add UID support to GDScript files"
This reverts commit c7f68a27ec.

We still think GDScript files need UIDs to allow safe refactoring,
but we're still debating what form those should take exactly.

So far there seems to be agreement that it shouldn't be done via an
annotation as implemented here, so we're reverting this one for now,
to revisit the feature in a future PR.
2024-01-29 21:00:26 +01:00
d3003c48b3 Merge pull request #67132 from KoBeWi/This_commit_message_is_auto-generated._Do_not_modify_it-
Add UID support to GDScript files
2024-01-18 16:33:14 +01:00
c7f68a27ec Add UID support to GDScript files 2024-01-17 22:30:56 +01:00
c027aecc2e Merge pull request #86676 from rune-scape/sparse-script-reload
GDScript: Hot-reload changed scripts only
2024-01-17 18:52:54 +01:00
96a95cb974 Add const lvalue ref to container parameters 2024-01-05 14:49:57 -03:00
49bce5c9ef GDScript: Lambda hotswap fixes 2024-01-04 16:33:54 -08:00
cde478bda6 Hot-reload only changed scripts 2024-01-02 17:56:52 -08:00
e4242f9b40 GDScript: Include lambda dependencies 2023-12-26 13:02:03 -08:00
f1cc14d525 Fix missing time for some script functions in profiler
Fixes the issue by adding a mechanism by which the functions that were
previously disappearing can be profiled too. This is optional with
an editor setting, since collecting more information naturally slows the engine
further while profiling.

Fixes #23715, #40251, #29049
2023-12-19 19:42:21 +01:00
0d77c3e092 Speed up GDScript::get_must_clear_dependencies()
get_must_clear_dependencies() has a N^3*log(N) time complexity, and this can very quickly slow down the quitting process as more gdscripts are added in a project.
This change improves it to N^2*log(N).
Instead of using all the inverted dependencies, we do the same with all (non-inverted) dependencies, which is N times faster.

Fixes #85435
2023-12-09 13:02:38 +01:00
bfe66ab7cd Fixup thread-owned lambda bookkeeping on thread exit (take 2) 2023-11-23 18:50:20 +01:00
f26328e9a3 Revert recently added approach to cross-thread lambda survival
Commits reverted:
- 1ed6919148
- 271511726b
2023-11-22 20:07:01 +01:00
1ed6919148 Fix leak in the bookkeeping of GDScript lambdas 2023-11-21 12:52:55 +01:00
bc80776618 Merge pull request #84659 from RandomShaper/fix_lambda_cross_thread
Fix lambda cross-thread dynamics
2023-11-12 12:14:42 +01:00
a3627b6e37 Assign temporary path to preloaded resources 2023-11-10 00:43:30 +01:00
271511726b Fixup thread-owned lambda bookkeeping on thread exit 2023-11-10 00:05:38 +01:00
9fb8862d73 GDScript: Lambda hot reloading
Co-authored-by: Adam Scott <ascott.ca@gmail.com>
2023-10-17 15:52:52 -04:00
6a0716dedd Merge pull request #83123 from astillich/82998-propagate-base-class-exports
Fix modifying base script exports not propagating to derived scripts
2023-10-16 18:43:39 +02:00
99f8751878 Fix editing exports in a base script not propagating the change to the opened property editor
This patch fixes the user having to navigate away from the selected node which has the derived script attached and back to see the changes of the base script exports reflected in the property editor.
2023-10-16 17:55:19 +02:00
de7cbe8789 Highlight doc comments in a different color 2023-10-08 19:26:10 +03:00
ed0b3c08e1 Core: Fix Object::has_method() for script static methods 2023-10-04 19:44:32 +03:00
78483a1df2 Merge pull request #82186 from dalexeev/gds-fix-property-duplication
GDScript: Fix duplication of inherited script properties
2023-09-28 20:04:18 +02:00
d759f91f8d Merge pull request #81101 from 398utubzyt/dotnet/abstract-class-support
C#: Add abstract class support
2023-09-25 17:18:05 +02:00
16e860bcb3 GDScript: Fix duplication of inherited script properties 2023-09-23 15:30:23 +03:00
2df37a237a C#: Abstract script class support 2023-09-15 20:35:25 -07:00
26ce861910 Editor: Remove unused Class Name field from Create Script dialog 2023-09-12 12:49:56 +03:00
b539bfb263 Merge pull request #81201 from anvilfolk/rpc
GDScript: Fix subclass methods not inheriting RPC info
2023-09-12 08:49:33 +02:00
711ffabcfe GDScript: fix subclass methods not inheriting RPC info 2023-09-11 11:10:07 -04:00
462d8f4752 GDScript: Fix get_*_list() methods return incorrect info 2023-09-04 00:21:03 +03:00
c4705a590b Fix Object::notification order
Previously the `p_reversed` parameter didn't influence the order
in a correct way.
Also script overridden _notification functions were not called in
the correct order.

To fix this some `notification` functions had to add a `p_reversed`
parameter.

This made it necessary to adjust cpp-bindings.

Co-authored-by: David Snopek <dsnopek@gmail.com>
2023-08-30 00:15:55 +02:00
76d318dbd1 Merge pull request #75778 from KoBeWi/_vp
Expose `_validate_property()` for scripting
2023-08-29 12:41:27 +02:00
67db4693eb Expose _validate_property() for scripting 2023-08-28 15:18:48 +02:00
2c77f07aaa Add a script method to get its class icon
Co-authored-by: Danil Alexeev <danil@alexeev.xyz>
2023-08-24 13:05:41 +02:00
5e512b705e Support threads in the script debugger
* This implementation adds threads on the side of the client (script debugger).
* Some functions of the debugger are optimized.
* The profile is also now thread safe using atomics.
* The editor can switch between multiple threads when debugging.

This PR adds threaded support for the script language debugger. Every thread has its own thread local data and it will connect to the debugger using multiple thread IDs.
This means that, now, the editor can receive multiple threads entering debug mode at the same time.
2023-07-26 12:06:45 +02:00
a0577eb23b GDScript: Fix _get_script_name() function collision for SCU build 2023-06-20 12:03:54 +03:00
aebbbda080 GDScript: Fix some bugs with static variables and functions 2023-06-16 22:52:11 +03:00
25b2f1780a Style: Harmonize header includes in modules
This applies our existing style guide, and adds a new rule to that style
guide for modular components such as platform ports and modules:

Includes from the platform port or module ("local" includes) should be listed
first in their own block using relative paths, before Godot's "core" includes
which use "absolute" (project folder relative) paths, and finally thirdparty
includes.

Includes in `#ifdef`s come after their relevant section, i.e. the overall
structure is:

- Local includes
  * Conditional local includes
- Core includes
  * Conditional core includes
- Thirdparty includes
  * Conditional thirdparty includes
2023-06-15 14:35:45 +02:00