blob: 3aeb0bee51c537cc50c2926d109cb7432f1abb90 [file] [log] [blame]
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/code-stub-assembler.h"
namespace v8 {
namespace internal {
class ForInBuiltinsAssembler : public CodeStubAssembler {
public:
explicit ForInBuiltinsAssembler(compiler::CodeAssemblerState* state)
: CodeStubAssembler(state) {}
std::tuple<Node*, Node*, Node*> EmitForInPrepare(Node* object, Node* context,
Label* call_runtime,
Label* nothing_to_iterate);
Node* ForInFilter(Node* key, Node* object, Node* context);
private:
// Get the enumerable length from |map| and return the result as a Smi.
Node* EnumLength(Node* map);
void CheckPrototypeEnumCache(Node* receiver, Node* map, Label* use_cache,
Label* use_runtime);
// Check the cache validity for |receiver|. Branch to |use_cache| if
// the cache is valid, otherwise branch to |use_runtime|.
void CheckEnumCache(Node* receiver, Label* use_cache,
Label* nothing_to_iterate, Label* use_runtime);
};
} // namespace internal
} // namespace v8