summaryrefslogtreecommitdiff
path: root/modules/gdscript
AgeCommit message (Collapse)Author
2021-05-17Merge pull request #48793 from vnen/gdscript-fix-temp-type-adjustRémi Verschelde
GDScript: Fix crash caused by uninitialized temp stack slots
2021-05-17GDScript: Fix crash caused by uninitialized temp stack slotsGeorge Marques
This adds initialization to every typed temporary stack slot at the beginning of the function call instead of emitting instructions, since those might be in a conditional branch and not be called.
2021-05-17Make all file access 64-bit (uint64_t)Pedro J. Estébanez
This changes the types of a big number of variables. General rules: - Using `uint64_t` in general. We also considered `int64_t` but eventually settled on keeping it unsigned, which is also closer to what one would expect with `size_t`/`off_t`. - We only keep `int64_t` for `seek_end` (takes a negative offset from the end) and for the `Variant` bindings, since `Variant::INT` is `int64_t`. This means we only need to guard against passing negative values in `core_bind.cpp`. - Using `uint32_t` integers for concepts not needing such a huge range, like pages, blocks, etc. In addition: - Improve usage of integer types in some related places; namely, `DirAccess`, core binds. Note: - On Windows, `_ftelli64` reports invalid values when using 32-bit MinGW with version < 8.0. This was an upstream bug fixed in 8.0. It breaks support for big files on 32-bit Windows builds made with that toolchain. We might add a workaround. Fixes #44363. Fixes godotengine/godot-proposals#400. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
2021-05-16Merge pull request #48767 from vnen/gdscript-builtin-static-methodsRémi Verschelde
GDScript: Add support for builtin static method calls
2021-05-16GDScript: Add support for builtin static method callsGeorge Marques
2021-05-07Merge pull request #33577 from Calinou/highlight-control-flow-keywordsRémi Verschelde
Highlight control flow keywords with a different color
2021-05-06Merge pull request #47776 from Razoric480/foreportRémi Verschelde
Implement LSP didDeleteFiles & make parser aware of sub-nodes
2021-05-06Merge pull request #46714 from HaSa1002/fix-gdscript-underscore-strictRémi Verschelde
Fix GDScript Tokenizer being very strict about the number of underscores
2021-05-06Rename `IP_Unix`, `IP_Address` and `TCP_Server` to remove underscoresHugo Locurcio
2021-05-05Highlight control flow keywords with a different colorHugo Locurcio
This makes them easier to distinguish from other keywords.
2021-05-04Merge pull request #47798 from ray90514/bug#47620Rémi Verschelde
Fix constants at function scope are not defined as constants for completion
2021-05-03Merge pull request #47958 from Xrayez/gdscript-rename-test-scriptsRémi Verschelde
Rename GDScript test script filenames to use `snake_case`
2021-04-29Replace remaining uses of `NULL` with `nullptr`Rémi Verschelde
Follow-up to #38736 (these uses were likely added after this PR was merged).
2021-04-28GDScript: Fix crash when base of an attribute is invalidGeorge Marques
In attribute expressions (`a.b`) it's possible that the base has an incorrect syntax and thus become a nullptr expression in the tree. This commit add the check for this case to fail gracefully instead of crashing.
2021-04-28GDScript: Implement lambdas compilation and runtimeGeorge Marques
2021-04-28GDScript: Add lambdas to the type analyzerGeorge Marques
- Lambdas are always callables (no specific signature match). - Captures from the current context are evaluated.
2021-04-28GDScript: Add lambda syntax parsingGeorge Marques
Lambda syntax is the same as a the function syntax (using the same `func` keyword) except that the name is optional and it can be embedded anywhere an expression is expected. E.g.: func _ready(): var my_lambda = func(x): print(x) my_lambda.call("hello")
2021-04-27Core: Drop custom `copymem`/`zeromem` definesRémi Verschelde
We've been using standard C library functions `memcpy`/`memset` for these since 2016 with 67f65f66391327b2967a20a89c3627e1dd6e84eb. There was still the possibility for third-party platform ports to override the definitions with a custom header, but this doesn't seem useful anymore.
2021-04-26Remove uses of `auto` for better readability and online code reviewsHugo Locurcio
The current code style guidelines forbid the use of `auto`. Some uses of `auto` are still present, such as in UWP code (which can't be currently tested) and macros (where removing `auto` isn't easy).
2021-04-24Merge pull request #48139 from vnen/gdscript-dict-keysRémi Verschelde
Fix mismatch between String and StringName in dictionary keys
2021-04-24Merge pull request #47891 from Razoric480/lsp-update-filesystemRémi Verschelde
Make LSP update the filesystem for changed scripts
2021-04-23GDScript: Make sure Lua-style dicts use StringName as keysGeorge Marques
2021-04-23GDScript: Fix resolution of dictionary keysGeorge Marques
There was a mixup between String and StringName keys. Now they're clearly separated. This also means you have to consider which type you're using for the dictionary keys and how you are accessing them.
2021-04-20Merge pull request #47956 from vnen/gdscript-double-stackRémi Verschelde
GDScript: Use special stack space for temporaries to reduce type changes
2021-04-16Rename GDScript test script filenames to use `snake_case`Andrii Doroshenko (Xrayez)
2021-04-16GDScript: Adjust type of temporaries when neededGeorge Marques
2021-04-16Merge pull request #47701 from vnen/gdscript-test-runnerRémi Verschelde
2021-04-14GDScript: Pool temporary values by type on the stackGeorge Marques
So the stack slots perform less type changes, which is useful for future optimizations.
2021-04-14Make LSP update the filesystem of changed scriptsFrancois Belair
This updates global classes and exposes base member variables. Fixes #39713
2021-04-14Merge pull request #47330 from ↵George Marques
Blackiris/fix-corrupt-scene-when-export-has-setter Fix corrupt scene when export var has setter
2021-04-14Fix corrupt scene when export var has setterJulien Nguyen
2021-04-11Fix type argument in is_builtin which was treated as an addressJulien Nguyen
2021-04-11Fix Constants at function scope are not defined as constants for autocompletionray90514
2021-04-10Implement LSP didDeleteFiles & make parser aware of sub-nodesFrancois Belair
2021-04-08Reduce number of addressing modes in GDScript VMGeorge Marques
There's now only 3 addressing modes: stack, constant, and member. Self, class, and nil are now present respectively in the first 3 stack slots. Global and class constants are moved to local constants when compiling. Named globals is only present on editor to use on tool singletons, so its use now emits a new instruction to copy the global to the stack. This allow us to further optimize the VM later by embedding the addressing modes in the instructions themselves, which is better done with less permutations.
2021-04-08Add runner for GDScript testingGeorge Marques
This is meant for testing the GDScript implementation, not for testing user scripts nor testing the engine using scripts. Tests consists in a GDScript file and a .out file with the expected output. The .out file format is: expected status (based on the enum GDScriptTest::TestStatus) on the first line, followed by either an error message or the resulting output. Warnings are added after the first line, before the output (or compiler errors) if the parser pass without any error. The test script must have a function called `test()` which takes no argument. Such function will be called by the test runner. The test should not have any dependency unless it's part of the test too. Global classes (using `class_name`) are registered before the runner starts, so those should work if needed. Use the command `godot --gdscript-generate-tests godot-source/modules/gdscript/tests/scripts` to update the .out files with the current output (make sure the output are the expected values before committing). The tests themselves are part of the doctest suite so those can be executed with `godot --test`. Co-authored-by: Andrii Doroshenko (Xrayez) <xrayez@gmail.com>
2021-04-07Merge pull request #47648 from Blackiris/fix-gdscript-editor-hangsRémi Verschelde
Fix infinite loop when guessing argument type from parent class
2021-04-06Fix stack overflow in setterJulien Nguyen
2021-04-05Fix infinite loop when guessing argument type from parent classJulien Nguyen
2021-04-05Merge pull request #47569 from vnen/gdscript-typed-returnRémi Verschelde
GDScript: Properly validate return type
2021-04-05GDScript: Properly validate return typeGeorge Marques
When the type cannot be validated at compile time, the runtime must do a check to ensure type safety is kept, as the code might be assuming the return type is correct in another place, leading to crashes if the contract is broken.
2021-04-05Style: Apply clang-tidy's `readability-braces-around-statements`Rémi Verschelde
2021-04-05Style: Apply clang-tidy's `modernize-use-nullptr`Rémi Verschelde
2021-04-04Fix GDScript variables addresses getting mixedJulien Nguyen
2021-04-01Merge pull request #46991 from madmiraal/rename-invert-reverseRémi Verschelde
Rename Array.invert() to Array.reverse()
2021-03-30Merge pull request #47131 from vnen/gdscript-export-fixRémi Verschelde
Fix a few issues with @export in GDScript
2021-03-30Merge pull request #47492 from vnen/gdscript-typed-arraysRémi Verschelde
GDScript: Fix array type check on constants
2021-03-30GDScript: Fix array type check on constantsGeorge Marques
They mistakenly pointing to the wrong union member (variable instead of constant).
2021-03-30GDScript: Implement export of typed arraysGeorge Marques
2021-03-30GDScript: Allow export of enum variablesGeorge Marques
Also fix the enum type in variables to be integer.