• Daniel Clifford's avatar
    [torque] Implement methods and constructors for structs and classes · b615dfa5
    Daniel Clifford authored
    With the changes in this patch,	it is now possible to add methods to
    both Torque's class and struct types. As a special case, "constructor"
    methods are used to initialize the values of classes and structs when
    they are constructed.
    
    The functionality in this patch	includes:
    
    - The refactoring of class- and struct-handling code to share field
      and method declaration code between both.
    
    - Addition of the "%Allocate" intrinsic that allocates raw bytes to be
      allocated from the V8 GC's NewSpace heap as the basis for freshly
      created, initialized class objects.
    
    - An implementation of a CallMethodExpression AST node that enables
      calling methods and constructors, including special handling of
      passing through the "this" pointer for method calls on structs by
      reference. The syntax for struct construction using "{}" remains as
      before, but now calls the struct's matching constructor rather than
      implicitly initializing the struct fields with the initialization
      arguments. A new syntax for allocation classes is introduced: "new
      ClassName{constructor_param1, constructor_param1, ...}", which
      de-sugars to an %Allocate call followed by a call to the matching
      constructor.
    
    - class	constructors can use the "super" keyword to initialize	their
      super class.
    
    - If classes and struct do not have a constructor, Torque creates a
      default constructor for them based on their field declarations,
      where each field's initial value is assigned to a same-typed
      parameter to the the default constructor. The default constructor's
      parameters are in field-declaration order, and for derived classes,
      the default constructor automatically uses a "super" initialization
      call to initialize inherited fields.
    
    - Class field declarations now automatically create ".field" and
      ".field=" operators that create CSA-compatible object accessors.
    
    - Addition of a no-argument constructor for JSArrays that creates an
      empty, PACKED_SMI_ELEMENTS JSArray using the machinery added
      elsewhere in this patch.
    
    Bug: v8:7793
    Change-Id: I31ce5f4b444656ab999555d780aeeba605666bfa
    Reviewed-on: https://chromium-review.googlesource.com/c/1392192
    Commit-Queue: Daniel Clifford <danno@chromium.org>
    Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#58860}
    b615dfa5
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...