• Tobias Tebbi's avatar
    [torque] add references to HeapObject fields. · a9a1a3bb
    Tobias Tebbi authored
    This adds references to HeapObject fields to Torque.
    The syntax is based on Rust (which is essentially C pointer syntax).
    
    The type &T is a reference to T (which must be a scalar type for now).
    We can create references from field access expressions, using the
    addressof(&) operator:
      &obj.fieldname
    To read or assign a reference, we use the dereference(*) operator:
      *someref = *otherref
    
    This CL also uses references internally normal class field accesses,
    but only if there is no overload for field accessor functions.
    This allows to have overloaded field accessors for a subtype like
    FastJSArray. However, there is a change in behavior in that an
    operator ".fieldname" will stop reference creation and will therefore
    also stop write access to a class field of the same name. That's why
    this CL had to add a write overload ".length=" for FastJSArray.
    
    References desugar to a pair of a tagged HeapObject pointer and an
    untagged offset into this HeapObject. On the CSA-side, they are
    represented by the C++ struct
    
    struct TorqueReference {
      TNode<HeapObject> object;
      TNode<IntPtrT> offset;
    };
    
    Bug: v8:7793
    Change-Id: Ica6468d47847bd68fb6b85f731cf8fbe142fa401
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1557151
    Commit-Queue: Tobias Tebbi <tebbi@chromium.org>
    Reviewed-by: 's avatarSigurd Schneider <sigurds@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#60780}
    a9a1a3bb
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...