| Index: src/code-stub-assembler.h
 | 
| diff --git a/src/code-stub-assembler.h b/src/code-stub-assembler.h
 | 
| index ac08b5073e45223832029466bf4d3d347b2cd129..8d964b1362aef8b1b0dafcd4734fc8a47023658e 100644
 | 
| --- a/src/code-stub-assembler.h
 | 
| +++ b/src/code-stub-assembler.h
 | 
| @@ -40,6 +40,8 @@ class CodeStubAssembler : public compiler::CodeAssembler {
 | 
|    compiler::Node* NoContextConstant();
 | 
|    compiler::Node* NullConstant();
 | 
|    compiler::Node* UndefinedConstant();
 | 
| +  compiler::Node* TheHoleConstant();
 | 
| +  compiler::Node* HashSeed();
 | 
|    compiler::Node* StaleRegisterConstant();
 | 
|  
 | 
|    // Float64 operations.
 | 
| @@ -112,6 +114,8 @@ class CodeStubAssembler : public compiler::CodeAssembler {
 | 
|    compiler::Node* LoadMap(compiler::Node* object);
 | 
|    // Load the instance type of an HeapObject.
 | 
|    compiler::Node* LoadInstanceType(compiler::Node* object);
 | 
| +  // Load the properties backing store of a JSObject.
 | 
| +  compiler::Node* LoadProperties(compiler::Node* object);
 | 
|    // Load the elements backing store of a JSObject.
 | 
|    compiler::Node* LoadElements(compiler::Node* object);
 | 
|    // Load the length of a fixed array base instance.
 | 
| @@ -128,12 +132,21 @@ class CodeStubAssembler : public compiler::CodeAssembler {
 | 
|    compiler::Node* LoadMapDescriptors(compiler::Node* map);
 | 
|    // Load the prototype of a map.
 | 
|    compiler::Node* LoadMapPrototype(compiler::Node* map);
 | 
| -
 | 
| -  // Load the hash field of a name.
 | 
| -  compiler::Node* LoadNameHash(compiler::Node* name);
 | 
|    // Load the instance size of a Map.
 | 
|    compiler::Node* LoadMapInstanceSize(compiler::Node* map);
 | 
|  
 | 
| +  // Load the hash field of a name.
 | 
| +  compiler::Node* LoadNameHashField(compiler::Node* name);
 | 
| +  // Load the hash value of a name. If {if_hash_not_computed} label
 | 
| +  // is specified then it also checks if hash is actually computed.
 | 
| +  compiler::Node* LoadNameHash(compiler::Node* name,
 | 
| +                               Label* if_hash_not_computed = nullptr);
 | 
| +
 | 
| +  // Load length field of a String object.
 | 
| +  compiler::Node* LoadStringLength(compiler::Node* object);
 | 
| +  // Load value field of a JSValue object.
 | 
| +  compiler::Node* LoadJSValueValue(compiler::Node* object);
 | 
| +
 | 
|    compiler::Node* AllocateUninitializedFixedArray(compiler::Node* length);
 | 
|  
 | 
|    // Load an array element from a FixedArray.
 | 
| @@ -141,6 +154,11 @@ class CodeStubAssembler : public compiler::CodeAssembler {
 | 
|        compiler::Node* object, compiler::Node* int32_index,
 | 
|        int additional_offset = 0,
 | 
|        ParameterMode parameter_mode = INTEGER_PARAMETERS);
 | 
| +  // Load an array element from a FixedDoubleArray.
 | 
| +  compiler::Node* LoadFixedDoubleArrayElement(
 | 
| +      compiler::Node* object, compiler::Node* int32_index,
 | 
| +      MachineType machine_type, int additional_offset = 0,
 | 
| +      ParameterMode parameter_mode = INTEGER_PARAMETERS);
 | 
|  
 | 
|    // Context manipulation
 | 
|    compiler::Node* LoadNativeContext(compiler::Node* context);
 | 
| @@ -230,17 +248,31 @@ class CodeStubAssembler : public compiler::CodeAssembler {
 | 
|  
 | 
|    // Various building blocks for stubs doing property lookups.
 | 
|    void TryToName(compiler::Node* key, Label* if_keyisindex, Variable* var_index,
 | 
| -                 Label* if_keyisunique, Label* call_runtime);
 | 
| +                 Label* if_keyisunique, Label* if_bailout);
 | 
| +
 | 
| +  static const int kInlinedDictionaryProbes = 4;
 | 
| +  template <typename Dictionary>
 | 
| +  void NameDictionaryLookup(compiler::Node* dictionary,
 | 
| +                            compiler::Node* unique_name, Label* if_found,
 | 
| +                            Variable* var_entry, Label* if_not_found,
 | 
| +                            int inlined_probes = kInlinedDictionaryProbes);
 | 
| +
 | 
| +  compiler::Node* ComputeIntegerHash(compiler::Node* key, compiler::Node* seed);
 | 
| +
 | 
| +  template <typename Dictionary>
 | 
| +  void NumberDictionaryLookup(compiler::Node* dictionary, compiler::Node* key,
 | 
| +                              Label* if_found, Variable* var_entry,
 | 
| +                              Label* if_not_found);
 | 
|  
 | 
|    void TryLookupProperty(compiler::Node* object, compiler::Node* map,
 | 
| -                         compiler::Node* instance_type, compiler::Node* name,
 | 
| -                         Label* if_found, Label* if_not_found,
 | 
| -                         Label* call_runtime);
 | 
| +                         compiler::Node* instance_type,
 | 
| +                         compiler::Node* unique_name, Label* if_found,
 | 
| +                         Label* if_not_found, Label* if_bailout);
 | 
|  
 | 
|    void TryLookupElement(compiler::Node* object, compiler::Node* map,
 | 
|                          compiler::Node* instance_type, compiler::Node* index,
 | 
|                          Label* if_found, Label* if_not_found,
 | 
| -                        Label* call_runtime);
 | 
| +                        Label* if_bailout);
 | 
|  
 | 
|    // Instanceof helpers.
 | 
|    // ES6 section 7.3.19 OrdinaryHasInstance (C, O)
 | 
| 
 |