Commit Graph

1026 Commits

Author SHA1 Message Date
Andy Friesen
55d7a9912d Merge branch 'master' into merge 2023-09-15 09:28:09 -07:00
Andy Friesen
d8b97f4745 Sync to upstream/release/595 2023-09-15 09:27:45 -07:00
Someon1e
a35d3d4588
Demo site: case sensitive highlighting (#1040)
Before:
![image](https://github.com/Roblox/luau/assets/142684596/6a5ec602-9946-48aa-98c7-ddebc404c5dd)

After:
![image](https://github.com/Roblox/luau/assets/142684596/d7a9bf3d-2163-417c-8407-43d65d6eca01)
2023-09-11 09:09:00 -07:00
vegorov-rbx
c7c986b996
Sync to upstream/release/594 (#1036)
* Fixed `Frontend::markDirty` not working on modules that were not
typechecked yet
* Fixed generic variadic function unification succeeding when it should
have reported an error

New Type Solver:
* Implemented semantic subtyping check for function types

Native Code Generation:
* Improved performance of numerical loops with a constant step
* Simplified IR for `bit32.extract` calls extracting first/last bits
* Improved performance of NaN checks
2023-09-07 17:13:49 -07:00
Vyacheslav Egorov
789ece0941 Merge branch 'upstream' into merge 2023-09-07 16:33:17 -07:00
Vyacheslav Egorov
5143f5ecd3 Merge branch 'master' into merge 2023-09-07 16:33:12 -07:00
Vyacheslav Egorov
8e28c240bd Sync to upstream/release/594 2023-09-07 16:28:45 -07:00
Arseny Kapoulkine
bf1fb8f1e4
Update syntax.md (#1035)
Add a note about floor division support.
2023-09-06 18:14:03 -07:00
Arseny Kapoulkine
105f54b233
fix build & test conformance issues on mingw32/gcc and mingw64/clang (#1034)
CLI/Reduce.cpp:
Never worked under MinGW as-is. Add check for MinGW as they're defined.

VM/src/lmem.cpp:
MinGW layout follows more closely MSVC. Checks before were only correct
for 32-bit gcc / clang in non-Windows.

NOTES:
__MINGW32__ is defined on both 32-bit and 64-bit, __MINGW64__ is 64-bit
only. 32-bit MinGW compilers (both Clang & GCC) have a floating point
test error on math.noise, specifically math.lua:258. All other test
cases / unit tests pass modulo stack size issues (so requires optimized build).

---------

Co-authored-by: jdp_ <42700985+jdpatdiscord@users.noreply.github.com>
2023-09-05 10:22:35 -07:00
Arseny Kapoulkine
f0a2e79365
rfcs: Mark floor division RFC as implemented 2023-09-01 14:10:22 -07:00
Arseny Kapoulkine
cb18b53396
Update compatibility.md
Mark floor division operator as implemented
2023-09-01 14:09:18 -07:00
Lily Brown
551a43c424
Sync to upstream/release/593 (#1024)
- Updated Roblox copyright to 2023
- Floor division operator `//` (implements #832)
- Autocomplete now shows `end` within `do` blocks
- Restore BraceType when using `Lexer::lookahead` (fixes #1019)

# New typechecker

- Subtyping tests between metatables and tables
- Subtyping tests between string singletons and tables
- Subtyping tests for class types

# Native codegen

- Fixed macOS test failure (wrong spill restore offset)
- Fixed clobbering of non-volatile xmm registers on Windows
- Fixed wrong storage location of SSA reg spills
- Implemented A64 support for add/sub extended
- Eliminated zextReg from A64 lowering
- Remove identical table slot lookups
- Propagate values from predecessor into the linear block
- Disabled reuse slot optimization
- Keep `LuaNode::val` check for nil when optimizing `CHECK_SLOT_MATCH`
- Implemented IR translation of `table.insert` builtin
- Fixed mmap error handling on macOS/Linux

# Tooling

- Used `|` as a column separator instead of `+` in `bench.py`
- Added a `table.sort` micro-benchmark
- Switched `libprotobuf-mutator` to a less problematic version
2023-09-01 10:58:27 -07:00
Lily Brown
09fdb4cfbd Merge branch 'upstream' into merge 2023-09-01 10:15:30 -07:00
Lily Brown
a2df5951d4 Merge branch 'master' into merge 2023-09-01 09:40:20 -07:00
Lily Brown
397dbb1188 Sync to upstream/release/593 2023-09-01 09:38:53 -07:00
vegorov-rbx
ce9414cb98
Sync to upstream/release/592 (#1018)
* AST queries at position where function name is will now return
AstExprLocal
* Lexer performance has been slightly improved
* Fixed incorrect string singleton autocomplete suggestions (fixes #858)
* Improved parsing error messages
* Fixed crash on null pointer access in unification (fixes #1017)
* Native code support is enabled by default and `native=1`
(make)/`LUAU_NATIVE` (CMake)/`-DLUA_CUSTOM_EXECUTION` configuration is
no longer required

New typechecker:
* New subtyping check can now handle generic functions and tables
(including those that contain cycles)

Native code generation:
* Loops with non-numeric parameters are now handled by VM to streamline
native code
* Array size check can be optimized away in SETLIST
* On failure, CodeGen::compile returns a reason
* Fixed clobbering of non-volatile xmm registers on Windows
2023-08-25 10:23:55 -07:00
Vyacheslav Egorov
51d4d18ec0 Late fixes 2023-08-25 18:46:28 +03:00
Vyacheslav Egorov
8cf13435c8 Merge branch 'upstream' into merge 2023-08-25 18:45:54 +03:00
Vyacheslav Egorov
263c282635 Merge branch 'master' into merge 2023-08-25 18:45:50 +03:00
Vyacheslav Egorov
a811050505 Sync to upstream/release/592 2023-08-25 18:25:09 +03:00
Andy Friesen
c3fc0d7bc8
RFC for local type inference. (#1007)
[Rendered](0e1082108f/rfcs/local-type-inference.md)
2023-08-23 15:52:59 -07:00
Arseny Kapoulkine
535f85ebd3
Update performance.md (#1016)
Document tostring/tonumber and math.pi/huge optimizations
2023-08-23 10:55:14 -07:00
Alan Jeffrey
5097c60f10
Fix HATRA 23 citations (#1015) 2023-08-21 15:25:25 -05:00
Alan Jeffrey
d5e37ab367
Responding to referee comments on the HATRA 23 paper (#1014) 2023-08-21 14:21:10 -05:00
Andy Friesen
e25b0a6275
Sync to upstream/release/591 (#1012)
* Fix a use-after-free bug in the new type cloning algorithm
* Tighten up the type of `coroutine.wrap`. It is now `<A..., R...>(f:
(A...) -> R...) -> ((A...) -> R...)`
* Break `.luaurc` out into a separate library target `Luau.Config`. This
makes it easier for applications to reason about config files without
also depending on the type inference engine.
* Move typechecking limits into `FrontendOptions`. This allows embedders
more finely-grained control over autocomplete's internal time limits.
* Fix stability issue with debugger onprotectederror callback allowing
break in non-yieldable contexts

New solver:

* Initial work toward [Local Type
Inference](0e1082108f/rfcs/local-type-inference.md)
* Introduce a new subtyping test. This will be much nicer than the old
test because it is completely separate both from actual type inference
and from error reporting.

Native code generation:

* Added function to compute iterated dominance frontier
* Optimize barriers in SET_UPVALUE when tag is known
* Cache lua_State::global in a register on A64
* Optimize constant stores in A64 lowering
* Track table array size state to optimize array size checks
* Add split tag/value store into a VM register
* Check that spills can outlive the block only in specific conditions

---------

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
2023-08-18 11:15:41 -07:00
Andy Friesen
bdc2f6907b Merge branch 'upstream' into merge 2023-08-18 10:12:05 -07:00
Andy Friesen
434e618378 Merge branch 'master' into merge 2023-08-18 10:11:38 -07:00
Andy Friesen
433d966ea8 Sync to upstream/release/591 2023-08-18 10:06:29 -07:00
Maciej Barć
a2a47104c8
LinterConfig.h: add missing stdint.h include (#1010) 2023-08-14 06:10:56 -07:00
vegorov-rbx
d98256bb80
Sync to upstream/release/590 (#1008)
* Better indentation in multi-line type mismatch error messages
* Error message clone can no longer cause a stack overflow (when
typechecking with retainFullTypeGraphs set to false); fixes
https://github.com/Roblox/luau/issues/975
* `string.format` with %s is now ~2x faster on strings smaller than 100
characters

Native code generation:
* All VM side exits will block return to the native execution of the
current function to preserve correctness
* Fixed executable page allocation on Apple platforms when using
hardened runtime
* Added statistics for code generation (no. of functions compiler,
memory used for different areas)
* Fixed issue with function entry type checks performed more that once
in some functions
2023-08-11 07:42:37 -07:00
Vyacheslav Egorov
50571a7a15 Merge branch 'upstream' into merge 2023-08-11 15:57:09 +03:00
Vyacheslav Egorov
d841a32095 Merge branch 'master' into merge 2023-08-11 15:57:03 +03:00
Vyacheslav Egorov
089da9e924 Sync to upstream/release/590 2023-08-11 15:55:30 +03:00
Arseny Kapoulkine
bd229816c0 Remove old benchmark-dev workflows
Nobody is maintaining this and we haven't really used it and are
unlikely to start due to a high degree of noise and lack of dedicated
machines for this setup. Callgrind has worked for us well enough, with
additional profiling performed locally by engineers - this is not
perfect but it doesn't look like we have a path to making this better.
2023-08-08 12:15:10 -07:00
John Hui
3f478bb439
Add luau-compile to .gitignore (#995) 2023-08-07 16:26:16 -07:00
LoganDark
2b03c8f72a
Use const char* const* over const char** (#1005)
The FFI difference becomes significant in languages like Rust where you
can't necessarily just cast a const pointer.
2023-08-07 13:45:04 -07:00
Andy Friesen
0b2755f964
Sync to upstream/release/589 (#1000)
* Progress toward a diffing algorithm for types. We hope that this will
be useful for writing clearer error messages.
* Add a missing recursion limiter in `Unifier::tryUnifyTables`. This was
causing a crash in certain situations.
* Luau heap graph enumeration improvements:
    * Weak references are not reported
    * Added tag as a fallback name of non-string table links
* Included top Luau function information in thread name to understand
where thread might be suspended
* Constant folding for `math.pi` and `math.huge` at -O2
* Optimize `string.format` and `%*`
* This change makes string interpolation 1.5x-2x faster depending on the
number and type of formatted components, assuming a few are using
primitive types, and reduces associated GC pressure.

New type checker:

* Initial work toward tracking the upper and lower bounds of types
accurately.

Native code generation (JIT):

* Add IrCmd::CHECK_TRUTHY for improved assert fast-calls
* Do not compute type map for modules without types
* Capture metatable+readonly state for NEW_TABLE IR instructions
* Replace JUMP_CMP_ANY with CMP_ANY and existing JUMP_EQ_INT
* Add support for exits to VM with reentry lock in VmExit

---------

Co-authored-by: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
Co-authored-by: Vyacheslav Egorov <vegorov@roblox.com>
2023-08-04 12:18:54 -07:00
Vyacheslav Egorov
63d9e3e209 Smaller recursion limit for NoOpt in the failing test 2023-08-04 21:07:54 +03:00
Andy Friesen
b26eeacfd2 Merge branch 'upstream' into merge 2023-08-04 10:02:13 -07:00
Andy Friesen
e25b717e54 Merge branch 'master' into merge 2023-08-04 10:02:07 -07:00
Andy Friesen
25cc75b096 * Progress toward a diffing algorithm for types. We hope that this will be useful for writing clearer error messages.
* Add a missing recursion limiter in `Unifier::tryUnifyTables`.  This was causing a crash in certain situations.
* Luau heap graph enumeration improvements:
    * Weak references are not reported
    * Added tag as a fallback name of non-string table links
    * Included top Luau function information in thread name to understand where thread might be suspended
* Constant folding for `math.pi` and `math.huge` at -O2
* Optimize `string.format` and `%*`
    * This change makes string interpolation 1.5x-2x faster depending on the number and type of formatted components, assuming a few are using primitive types, and reduces associated GC pressure.

New solver

* Initial work toward tracking the upper and lower bounds of types more accurately.

JIT

* Add IrCmd::CHECK_TRUTHY for improved assert fast-calls
* Do not compute type map for modules without types
* Capture metatable+readonly state for NEW_TABLE IR instructions
* Replace JUMP_CMP_ANY with CMP_ANY and existing JUMP_EQ_INT
* Add support for exits to VM with reentry lock in VmExit
2023-08-04 10:01:35 -07:00
Federico Cassano
fff897a75f
Fix some EBNF cases in grammar.md (#999) 2023-08-02 13:20:57 -07:00
Someon1e
8b510d3dbb
Add dark theme (#991)
Fixes #333 


![image](https://github.com/Roblox/luau/assets/120410318/539fec9f-3ad1-49cd-ba2f-a47b6c1ee42c)

![image](https://github.com/Roblox/luau/assets/120410318/981981c6-2fbe-46ae-99b1-a1fc2c647a6a)

---------

Co-authored-by: Someone-dQw4w9WgXcQ <dcheunggb@outlook.com>
2023-08-01 09:14:02 -07:00
vegorov-rbx
a08c3409b8
Luau Recap: July 2023 (#993)
If this does make it to the Roblox forum, I think I will cut intro about
new type solver and JIT.


[Rendered](https://github.com/vegorov-rbx/luau/blob/post-recap-july-2023/docs/_posts/2023-07-28-luau-recap-july-2023.md)


[Preview](https://vegorov-rbx.github.io/luau/2023/07/28/luau-recap-july-2023.html)
2023-07-31 13:02:24 -07:00
vegorov-rbx
76f67e0733
Sync to upstream/release/588 (#992)
Type checker/autocomplete:
* `Luau::autocomplete` no longer performs typechecking internally, make
sure to run `Frontend::check` before performing autocomplete requests
* Autocomplete string suggestions without "" are now only suggested
inside the ""
* Autocomplete suggestions now include `function (anonymous autofilled)`
key with a full suggestion for the function expression (with arguments
included) stored in `AutocompleteEntry::insertText`
* `AutocompleteEntry::indexedWithSelf` is provided for function call
suggestions made with `:`
* Cyclic modules now see each other type exports as `any` to prevent
memory use-after-free (similar to module return type)

Runtime:
* Updated inline/loop unroll cost model to better handle assignments
(Fixes https://github.com/Roblox/luau/issues/978)
* `math.noise` speed was improved by ~30%
* `table.concat` speed was improved by ~5-7%
* `tonumber` and `tostring` now have fastcall paths that execute ~1.5x
and ~2.5x faster respectively (fixes #777)
* Fixed crash in `luaL_typename` when index refers to a non-existing
value
* Fixed potential out of memory scenario when using `string.sub` or
`string.char` in a loop
* Fixed behavior of some fastcall builtins when called without arguments
under -O2 to match original functions
* Support for native code execution in VM is now enabled by default
(note: native code still has to be generated explicitly)
* `Codegen::compile` now accepts `CodeGen_OnlyNativeModules` flag. When
set, only modules that have a `--!native` hot-comment at the top will be
compiled to native code

In our new typechecker:
* Generic type packs are no longer considered to be variadic during
unification
* Timeout and cancellation now works in new solver
* Fixed false positive errors around 'table' and 'function' type
refinements
* Table literals now use covariant unification rules. This is sound
since literal has no type specified and has no aliases
* Fixed issues with blocked types escaping the constraint solver
* Fixed more places where error messages that should've been suppressed
were still reported
* Fixed errors when iterating over a top table type

In our native code generation (jit):
* 'DebugLuauAbortingChecks' flag is now supported on A64
* LOP_NEWCLOSURE has been translated to IR
2023-07-28 08:13:53 -07:00
Someon1e
087be529b0
Improve demo site (#990)
Updated builtins tables, made `` highlighted as a string, removed code
that replaced "stdin:" from print messages

Before:

![image](https://github.com/Roblox/luau/assets/120410318/ba399f0b-d612-4f69-a523-56369eafb037)
After:

![image](https://github.com/Roblox/luau/assets/120410318/98ab06c8-9b2a-4d9b-aa86-0a8432296417)

---------

Co-authored-by: Someone-dQw4w9WgXcQ <dcheunggb@outlook.com>
2023-07-28 08:11:16 -07:00
Vyacheslav Egorov
4c6a370872 Merge branch 'upstream' into merge 2023-07-28 15:05:40 +03:00
Vyacheslav Egorov
9fd79ade04 Merge branch 'master' into merge 2023-07-28 15:05:00 +03:00
Vyacheslav Egorov
5e1aca164c Sync to upstream/release/588 2023-07-28 14:37:00 +03:00
Arseny Kapoulkine
f80229c517
docs: Document return value for table.remove (#987)
Fixes #984.
2023-07-26 06:42:23 -07:00