• 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
csa-generator.cc 26.5 KB