Home | History | Annotate | Download | only in src
      1 // Copyright 2006-2008 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_CODE_H_
      6 #define V8_CODE_H_
      7 
      8 #include "src/allocation.h"
      9 #include "src/handles.h"
     10 #include "src/objects.h"
     11 
     12 namespace v8 {
     13 namespace internal {
     14 
     15 
     16 // Wrapper class for passing expected and actual parameter counts as
     17 // either registers or immediate values. Used to make sure that the
     18 // caller provides exactly the expected number of parameters to the
     19 // callee.
     20 class ParameterCount BASE_EMBEDDED {
     21  public:
     22   explicit ParameterCount(Register reg)
     23       : reg_(reg), immediate_(0) { }
     24   explicit ParameterCount(int immediate)
     25       : reg_(no_reg), immediate_(immediate) { }
     26   explicit ParameterCount(Handle<JSFunction> f)
     27       : reg_(no_reg), immediate_(f->shared()->formal_parameter_count()) { }
     28 
     29   bool is_reg() const { return !reg_.is(no_reg); }
     30   bool is_immediate() const { return !is_reg(); }
     31 
     32   Register reg() const {
     33     DCHECK(is_reg());
     34     return reg_;
     35   }
     36   int immediate() const {
     37     DCHECK(is_immediate());
     38     return immediate_;
     39   }
     40 
     41  private:
     42   const Register reg_;
     43   const int immediate_;
     44 
     45   DISALLOW_IMPLICIT_CONSTRUCTORS(ParameterCount);
     46 };
     47 
     48 
     49 } }  // namespace v8::internal
     50 
     51 #endif  // V8_CODE_H_
     52