LCOV - code coverage report
Current view: top level - src/compiler - property-access-builder.h (source / functions) Hit Total Coverage
Test: app.info Lines: 1 1 100.0 %
Date: 2017-10-20 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2017 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_COMPILER_PROPERTY_ACCESS_BUILDER_H_
       6             : #define V8_COMPILER_PROPERTY_ACCESS_BUILDER_H_
       7             : 
       8             : #include <vector>
       9             : 
      10             : #include "src/handles.h"
      11             : #include "src/objects/map.h"
      12             : #include "src/zone/zone-containers.h"
      13             : 
      14             : namespace v8 {
      15             : namespace internal {
      16             : 
      17             : class CompilationDependencies;
      18             : 
      19             : namespace compiler {
      20             : 
      21             : class CommonOperatorBuilder;
      22             : class Graph;
      23             : class JSGraph;
      24             : class Node;
      25             : class PropertyAccessInfo;
      26             : class SimplifiedOperatorBuilder;
      27             : 
      28             : class PropertyAccessBuilder {
      29             :  public:
      30             :   PropertyAccessBuilder(JSGraph* jsgraph, CompilationDependencies* dependencies)
      31      246036 :       : jsgraph_(jsgraph), dependencies_(dependencies) {}
      32             : 
      33             :   // Builds the appropriate string check if the maps are only string
      34             :   // maps.
      35             :   bool TryBuildStringCheck(MapHandles const& maps, Node** receiver,
      36             :                            Node** effect, Node* control);
      37             :   // Builds a number check if all maps are number maps.
      38             :   bool TryBuildNumberCheck(MapHandles const& maps, Node** receiver,
      39             :                            Node** effect, Node* control);
      40             : 
      41             :   Node* BuildCheckHeapObject(Node* receiver, Node** effect, Node* control);
      42             :   void BuildCheckMaps(Node* receiver, Node** effect, Node* control,
      43             :                       std::vector<Handle<Map>> const& receiver_maps);
      44             : 
      45             :   // Adds stability dependencies on all prototypes of every class in
      46             :   // {receiver_type} up to (and including) the {holder}.
      47             :   void AssumePrototypesStable(Handle<Context> native_context,
      48             :                               std::vector<Handle<Map>> const& receiver_maps,
      49             :                               Handle<JSObject> holder);
      50             : 
      51             :   // Builds the actual load for data-field and data-constant-field
      52             :   // properties (without heap-object or map checks).
      53             :   Node* BuildLoadDataField(Handle<Name> name,
      54             :                            PropertyAccessInfo const& access_info,
      55             :                            Node* receiver, Node** effect, Node** control);
      56             : 
      57             :  private:
      58             :   JSGraph* jsgraph() const { return jsgraph_; }
      59             :   CompilationDependencies* dependencies() const { return dependencies_; }
      60             :   Graph* graph() const;
      61             :   Isolate* isolate() const;
      62             :   CommonOperatorBuilder* common() const;
      63             :   SimplifiedOperatorBuilder* simplified() const;
      64             : 
      65             :   Node* TryBuildLoadConstantDataField(Handle<Name> name,
      66             :                                       PropertyAccessInfo const& access_info,
      67             :                                       Node* receiver);
      68             :   // Returns a node with the holder for the property access described by
      69             :   // {access_info}.
      70             :   Node* ResolveHolder(PropertyAccessInfo const& access_info, Node* receiver);
      71             : 
      72             :   JSGraph* jsgraph_;
      73             :   CompilationDependencies* dependencies_;
      74             : };
      75             : 
      76             : bool HasOnlyStringMaps(MapHandles const& maps);
      77             : 
      78             : }  // namespace compiler
      79             : }  // namespace internal
      80             : }  // namespace v8
      81             : 
      82             : #endif  // V8_COMPILER_PROPERTY_ACCESS_BUILDER_H_

Generated by: LCOV version 1.10