- 29 May, 2018 3 commits
-
-
Tobias Tebbi authored
This adds support for union types to Torque. There is a new type expression A | B to form the union of the type expressions A and B. This is only possible if A and B have a common supertype, to prevent nonsensical unions of types with different representations. Union types are normalized: A | B == B | A A | (B | C) == (A | B) | C A | A == A The subtyping rules are defined recursively: (A | B) <: C if A <: C and B <: C A <: (B | C) if A <: B or A <: C This allows to define Object as a union type: type Tagged generates 'TNode<Object>'; type Smi extends Tagged generates 'TNode<Smi>'; type HeapObject extends Tagged generates 'TNode<HeapObject>'; type Object = Smi | HeapObject; The type {Tagged} is introduced to have a common supertype of all tagged values, but we should not use it directly, because {Object} contains the additional information that there is nothing but {Smi} and {HeapObject} values. When mapping union types to CSA types, we select the most specific common supertype. For Number and Numeric, we already use union types on the CSA side. Since it is not possible to map to CSA union types in general, we special-case these two union types to map them to the CSA union types we already use. Bug: v8:7793 Change-Id: I7a4e466436f55d04012f29ef17acfdb957653908 Reviewed-on: https://chromium-review.googlesource.com/1076132Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53411}
-
Tobias Tebbi authored
Bug: v8:7754 Change-Id: I8548d0e07fabc23bb5f65b1f91683c756195ae1b Reviewed-on: https://chromium-review.googlesource.com/1071654Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53398}
-
Tobias Tebbi authored
This fixes the bug that cast<A>(...) could be interpreted as cast<B>(...) if B is a subtype of A. Bug: v8:7793 Change-Id: Ia03ce832f8c14ced09114d41c935be06d4629d99 Reviewed-on: https://chromium-review.googlesource.com/1075890 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Cr-Commit-Position: refs/heads/master@{#53397}
-
- 25 May, 2018 1 commit
-
-
Tobias Tebbi authored
Bug: v8:7754 Change-Id: I4664a86ca0daccdd977f6a1b89c0f33294f084a1 Reviewed-on: https://chromium-review.googlesource.com/1073149Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53353}
-
- 24 May, 2018 2 commits
-
-
Tobias Tebbi authored
Change-Id: Ie8bdbcdea8006d3105c419113f9adb2c1d6f162c Reviewed-on: https://chromium-review.googlesource.com/1070203 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#53341}
-
Sigurd Schneider authored
Bug: v8:7754 Change-Id: Ifa329efa1ccbae3d4cf6251f43b11b697ddf76f8 Reviewed-on: https://chromium-review.googlesource.com/1068678 Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53321}
-
- 23 May, 2018 2 commits
-
-
Simon Zünd authored
This CL replaces the default ConsoleErrorListener with a custom one. The only difference is that the error message now also includes the file name where the lexer/parser error happened. R=tebbi@chromium.org Change-Id: Ifa22501a55066b82b32234c76df180db41ee8b62 Reviewed-on: https://chromium-review.googlesource.com/1069137 Commit-Queue: Simon Zünd <szuend@google.com> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53309}
-
Simon Zünd authored
This CL stops torque from crashing when a function pointer call site uses wrong parameters. R=tebbi@chromium.org Change-Id: If097d0882ca5370e525097c68014f7ec051b3fe8 Reviewed-on: https://chromium-review.googlesource.com/1068181Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Simon Zünd <szuend@google.com> Cr-Commit-Position: refs/heads/master@{#53308}
-
- 22 May, 2018 4 commits
-
-
Tobias Tebbi authored
Change-Id: Ie61c8fa51c7c13ab74c4c97ed6803be7f879a549 Reviewed-on: https://chromium-review.googlesource.com/1069088 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#53293}
-
Tobias Tebbi authored
Change-Id: I80dd313ac3a5809d363adff9cf11ac31b04648dd Reviewed-on: https://chromium-review.googlesource.com/1068876 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#53292}
-
Simon Zünd authored
This CL adds grammar support for function pointers to generic builtins. It also instantiates generic specializations when they are only used in an assignment to a function pointer. Example: builtin GenericBuiltinTest<T: type>(c: Context, param: T): Object { return Null; } let fnptr: builtin(Context, Smi) => Object = GenericBuiltinTest<Smi>; Change-Id: Ib7e5f47ffc05f14eb5d0b789936587263dfb961d Reviewed-on: https://chromium-review.googlesource.com/1068731 Commit-Queue: Simon Zünd <szuend@google.com> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53284}
-
Tobias Tebbi authored
We already had to introduce TypeAlias to allow types to be const. With TypeAlias, there is no need for types to be declarable themselves. Change-Id: Ia718482f6c121b5316aca819368e6d048283e5e8 Reviewed-on: https://chromium-review.googlesource.com/1068734 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#53282}
-
- 18 May, 2018 2 commits
-
-
Daniel Clifford authored
Fixes known issue that specialization doesn't rigorously checked to verify that specialization signature precisely matches generic declaration. Change-Id: I884f7f16a467ab716d2b0c553485f4b1c55ed806 Reviewed-on: https://chromium-review.googlesource.com/1063613Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#53252}
-
Théotime Grohens authored
Change-Id: I79e4ad1cf41ea8888bf6288690203d746a7b7864 Reviewed-on: https://chromium-review.googlesource.com/1065811Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Théotime Grohens <theotime@google.com> Cr-Commit-Position: refs/heads/master@{#53245}
-
- 17 May, 2018 1 commit
-
-
Tobias Tebbi authored
Change-Id: I9ca9d0d81ed37bdddd3286b3ebc46f2ecdacb248 Reviewed-on: https://chromium-review.googlesource.com/1063612Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53228}
-
- 16 May, 2018 3 commits
-
-
Tobias Tebbi authored
Cq-Include-Trybots: luci.v8.try:v8_linux_noi18n_rel_ng Change-Id: I20e30f0c19c887b1e093b02e39c7bd3d53d15182 Reviewed-on: https://chromium-review.googlesource.com/1054073 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#53221}
-
Tobias Tebbi authored
This CL adds the new type expression builtin(Context, ArgType1, ...) => ReturnType and allows to use Torque-defined builtins as values of this type, as well as calling values of this type. The new function pointer types are subtypes of Code. Change-Id: Ib7ba3ce6ef7a8591a4c79230dd189fd25698d5b9 Reviewed-on: https://chromium-review.googlesource.com/1060056 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#53217}
-
Daniel Clifford authored
Including specialization, e.g.: // Declare parameterized generic macro GenericMacroTest<T: type>(param: T): Object { return Undefined; } // Declare specialization of generic GenericMacroTest<Object>(param: Object): Object { return param; } ... assert(GenericMacroTest<Smi>(0) == Undefined); assert(GenericMacroTest<Smi>(1) == Undefined); assert(GenericMacroTest<Object>(Null) == Null); assert(GenericMacroTest<Object>(False) == False); ... Known issue: specialization doesn't rigorously checked to verify that specialization signature precisely matches generic declaration. Change-Id: I9d9d96da4c5c8c9a76550844680e9e133a5edaed Reviewed-on: https://chromium-review.googlesource.com/1043986 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53203}
-
- 15 May, 2018 1 commit
-
-
Simon Zünd authored
This CL changes the generated C++ code for LabeledStatementBlocks to only emit labels if they are used. Prior to this CL, when a label was only used on one path of an if constexpr expression, and not at all anywhere else, the try/label construct would BIND a label that was not used, causing a CSA verification error. R=tebbi@chromium.org Change-Id: Ia81a0cd081b84528c95bbdbdb98b9ab51928e13f Reviewed-on: https://chromium-review.googlesource.com/1057247Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Simon Zünd <szuend@google.com> Cr-Commit-Position: refs/heads/master@{#53173}
-
- 13 May, 2018 2 commits
-
-
peterwmwong authored
Change-Id: I37ed9115c099f3d17f23a26348a1bbf5f773ee32 Reviewed-on: https://chromium-review.googlesource.com/1056668Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Peter Wong <peter.wm.wong@gmail.com> Cr-Commit-Position: refs/heads/master@{#53136}
-
Daniel Clifford authored
In the process, add a few simple tests for "constexpr" expressions, which identified a few bugs that are also fixed in this CL. Change-Id: I97486c781572642d2b574b92133b1f9cda3db592 Reviewed-on: https://chromium-review.googlesource.com/1055493 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53135}
-
- 08 May, 2018 1 commit
-
-
Tobias Tebbi authored
Change-Id: I61a594e194082577135dbc82b2673bf477105ef3 Reviewed-on: https://chromium-review.googlesource.com/1046949 Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#53050}
-
- 07 May, 2018 1 commit
-
-
Daniel Clifford authored
In the process, rename Boolean constants (i.e. JavaScript constants), to 'True' and 'False'. This uncovered a bug in the internal handling of True/False labels was fixed (they shouldn't be Values and Torque shouldn't conflate Labels with other Declarables, throwing exceptions when they're improperly used in the wrong context). Furthermore, the internal labels used for True and False for if statements have been renamed so that they can't be aliased from user Torque code. Change-Id: I09dbd2241d2bc2f1daff53862dee1b601810060c Reviewed-on: https://chromium-review.googlesource.com/1044370Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Commit-Queue: Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53026}
-
- 04 May, 2018 4 commits
-
-
Daniel Clifford authored
Torque expressions of type constexpr are evaluated at compile-time rather than runtime. They are backed by C++ types rather than TNode<X> types, so the macro functions that are called by generated C++ code expect values to be computed when the snapshot is generated rather than by TurboFan-generated code. Specifically, "if" statements can have a constexpr modifier. With this modifier, a type of "constexpr bool" is expected rather than "bool", and in that case instead of generating a CSA BranchIf, it generates a C++ "if (<bool expression>)" that generates code for only the true or false path based on the bool value at torque-execution (compile time) rather than generating both paths (including inserting phi nodes for variables modified on either branch at the re-merge at the end of the if) and dynamically dispatching to the true or false path during d8/Chrome/node.js execution (runtime) using a CSA BranchIf. Change-Id: I8238e25aaadbfc618847e04556e96a3949ea5a8d Reviewed-on: https://chromium-review.googlesource.com/1042085 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#53001}
-
Daniel Clifford authored
* Empty string literals (e.g. "" and '') were not recognized a strings. This is now fixed. * return statements without expressions (e.g. for functions with void return types) caused crashes. Change-Id: Ied60f9abffca457a0d85c9e01e3795839fe777c9 Reviewed-on: https://chromium-review.googlesource.com/1042310 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Cr-Commit-Position: refs/heads/master@{#52997}
-
Clemens Hammacher authored
macros.h already not only defines macros, but also templatized helpers like {bit_cast} and {arraysize}. Thus {implicit_cast} also belongs there. R=tebbi@chromium.org Bug: v8:7570 Change-Id: Iaea6075dad359d62498453575f22d73ca84e2323 Reviewed-on: https://chromium-review.googlesource.com/1042401 Commit-Queue: Clemens Hammacher <clemensh@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#52991}
-
Daniel Clifford authored
- In debug builds, 'assert(<expr>)' evaluates and aborts execution if the provided Torque expression is false at runtime. assert(<expr>) supports the same set of expressions protocols as Toruqe's if statement, i.e. both bool values and BranchIf- style tests. Upon failure, the assertion prints the Torque source code of the failed expression, not the generated CSA code. - 'unreachable' calls CSA's Unreachable() and signals to Torque that code execution cannot continue (i.e. its statement returns the 'never' type). In debug builds, the line number and position of the statement are printed before breaking. - 'debug' calls CSA's DebugBreak(). In debug builds, the line number and position of the 'debug' are printed before breaking. Change-Id: I4efd052536bb402c097a0d5f7be56e154b5b3676 Reviewed-on: https://chromium-review.googlesource.com/1042570 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#52984}
-
- 03 May, 2018 1 commit
-
-
Daniel Clifford authored
This is a preparatory step for implementing generics. Along the way, clean up and encapsulate a bunch of code, including: * Fully encapsulate Scope by adding the new class ScopeChain that provide an abstraction for creating and activating scopes. * Untangle Modules and Scopes. * Unify scope activation so that it is always associated with an AST node and triggered by a RAII helper class. * Unify (somewhat) how builtins and macros are created, fixing a few inconsistencies with when and how parameters and their types are declared. * Create a new Declarations class that brokers between the visitor classes and the ScopeChain. This moves handling of declaration-related errors out of the visitors but also makes it possible to do so without polluting Scope and ScopeChain with details about resolving SourcePositions in error cases. Change-Id: I180017d4cf39ccf5ef1d20b84f53284c252f8d87 Reviewed-on: https://chromium-review.googlesource.com/1038504 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#52947}
-
- 25 Apr, 2018 1 commit
-
-
Simon Zünd authored
This CL changes the DECIMAL_LITERAL lexer rule to allow negative decimal literals as well. This could also be achieved by using the unary minus operation, which would occur an runtime overhead and feel counter-intuitive for literals (imho). R=tebbi@chromium.org Change-Id: Ib01aa1930254bcd85a161de385b0fd4f176feb46 Reviewed-on: https://chromium-review.googlesource.com/1027473Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Simon Zünd <szuend@google.com> Cr-Commit-Position: refs/heads/master@{#52773}
-
- 24 Apr, 2018 3 commits
-
-
Dan Elphick authored
Use StringConstant instead of NewStringFromAsciiChecked so strings are deduplicated. Change-Id: I0c5395be6d06caacd7d257b61bd2372da2fce427 Reviewed-on: https://chromium-review.googlesource.com/1025815Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Dan Elphick <delphick@chromium.org> Cr-Commit-Position: refs/heads/master@{#52763}
-
Marja Hölttä authored
BUG=v8:7490 Change-Id: I03421657d4abc3cd6e27ffafa6b922ea0e83b2b4 Reviewed-on: https://chromium-review.googlesource.com/1016381 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#52752}
-
Daniel Clifford authored
Bug: v8:7666 Change-Id: Ida9b6f964261bad75a4eb5d567ad37ec82569bcc Reviewed-on: https://chromium-review.googlesource.com/1023061 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Tobias Tebbi <tebbi@chromium.org> Cr-Commit-Position: refs/heads/master@{#52751}
-
- 20 Apr, 2018 1 commit
-
-
Mike Stanton authored
To implement builtin continuations called from the deoptimizer, we need to better support writing builtins declared with javascript binding in Torque. This CL adds fixed number of argument support. So you can declare in Torque, something like: builtin javascript Foo(context: Context, receiver: Object, bar: Object): Object { ... } Formerly, this would give you an error because we only supported javascript bindings with a varargs array. Bug: v8:7672 Change-Id: I5b5b25bdbbd5e054049c39dd2f1a4c606472dcd5 Reviewed-on: https://chromium-review.googlesource.com/1018941 Commit-Queue: Michael Stanton <mvstanton@chromium.org> Reviewed-by:
Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#52704}
-
- 19 Apr, 2018 2 commits
-
-
Daniel Clifford authored
This problem was discovered by mvstanton@'s forEach Torque patch. In the absense of test coverage for Torque, his patch will serve as the regression test case for this bug when it lands. Change-Id: Ic77446a8e46168928da221e6eb18753dd6478c87 Reviewed-on: https://chromium-review.googlesource.com/1018763Reviewed-by:
Michael Stanton <mvstanton@chromium.org> Commit-Queue: Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#52688}
-
Simon Zünd authored
Module names in torque are allowed to have underscores but not dashes. To stay consistent with C++ file naming conventions, the underscores in module names are replaced by dashes for file names. Example: module typed_array {} would now generate: builtins-typed-array-from-dsl-gen.(cc|h) instead of: builtins-typed_array-from-dsl-gen.(cc|h) R=danno@chromium.org Change-Id: Iff42d7b9b5f65c378ee30f9d884ab6a3a3cd42a7 Reviewed-on: https://chromium-review.googlesource.com/1016460Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Daniel Clifford <danno@chromium.org> Cr-Commit-Position: refs/heads/master@{#52686}
-
- 18 Apr, 2018 1 commit
-
-
Simon Zünd authored
The escaped double quote is needed for calling CSA macros that expect const char* (so the double quotes are preserved). Example: type MethodName; const kProtoSort: MethodName = '\"%TypedArray%.prototype.sort\"'; extern macro ValidateTypedArray(Context, Object, MethodName): JSTypedArray; R=danno@chromium.org Bug: v8:7382 Change-Id: Ida554f7d2638fda2c9e1ace9975c3744b5d84050 Reviewed-on: https://chromium-review.googlesource.com/1016400Reviewed-by:
Daniel Clifford <danno@chromium.org> Commit-Queue: Simon Zünd <szuend@google.com> Cr-Commit-Position: refs/heads/master@{#52666}
-
- 16 Apr, 2018 1 commit
-
-
Daniel Clifford authored
An overview of motivation behind Torque and some of its principles can be found here: https://bit.ly/2qAI5Ep Note that there is quite a bit of work left to do in order to get Torque production-ready for any non-trivial amount of code, but landing the prototype as-is will allow for much faster iteration. Bugs will be filed for all of the big-ticket items that are not landing blockers but called out in this patch as important to fix. Cq-Include-Trybots: luci.v8.try:v8_linux_nosnap_rel;luci.v8.try:v8_linux_noi18n_rel_ng Change-Id: Ib07af70966d5133dc57344928885478b9c6b8b73 Reviewed-on: https://chromium-review.googlesource.com/845682 Commit-Queue: Daniel Clifford <danno@chromium.org> Reviewed-by:
Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#52618}
-