Line data Source code
1 :
2 : // Copyright 2017 the V8 project authors. All rights reserved.
3 : // Use of this source code is governed by a BSD-style license that can be
4 : // found in the LICENSE file.
5 :
6 : #include "src/code-stub-assembler.h"
7 :
8 : namespace v8 {
9 : namespace internal {
10 :
11 : class ForInBuiltinsAssembler : public CodeStubAssembler {
12 : public:
13 : explicit ForInBuiltinsAssembler(compiler::CodeAssemblerState* state)
14 258 : : CodeStubAssembler(state) {}
15 :
16 : std::tuple<Node*, Node*, Node*> EmitForInPrepare(Node* object, Node* context,
17 : Label* call_runtime,
18 : Label* nothing_to_iterate);
19 :
20 : Node* ForInFilter(Node* key, Node* object, Node* context);
21 :
22 : private:
23 : // Get the enumerable length from |map| and return the result as a Smi.
24 : Node* EnumLength(Node* map);
25 : void CheckPrototypeEnumCache(Node* receiver, Node* map, Label* use_cache,
26 : Label* use_runtime);
27 : // Check the cache validity for |receiver|. Branch to |use_cache| if
28 : // the cache is valid, otherwise branch to |use_runtime|.
29 : void CheckEnumCache(Node* receiver, Label* use_cache,
30 : Label* nothing_to_iterate, Label* use_runtime);
31 : };
32 :
33 : } // namespace internal
34 : } // namespace v8
|