// Copyright 2006-2008 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. #ifndef V8_CODE_H_ #define V8_CODE_H_ #include "src/allocation.h" #include "src/handles.h" #include "src/objects.h" namespace v8 { namespace internal { // Wrapper class for passing expected and actual parameter counts as // either registers or immediate values. Used to make sure that the // caller provides exactly the expected number of parameters to the // callee. class ParameterCount BASE_EMBEDDED { public: explicit ParameterCount(Register reg) : reg_(reg), immediate_(0) { } explicit ParameterCount(int immediate) : reg_(no_reg), immediate_(immediate) { } explicit ParameterCount(Handle<JSFunction> f) : reg_(no_reg), immediate_(f->shared()->formal_parameter_count()) { } bool is_reg() const { return !reg_.is(no_reg); } bool is_immediate() const { return !is_reg(); } Register reg() const { DCHECK(is_reg()); return reg_; } int immediate() const { DCHECK(is_immediate()); return immediate_; } private: const Register reg_; const int immediate_; DISALLOW_IMPLICIT_CONSTRUCTORS(ParameterCount); }; } } // namespace v8::internal #endif // V8_CODE_H_