1 // Copyright 2013 The Chromium 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 #include "gin/arguments.h"
6 
7 #include "base/strings/stringprintf.h"
8 #include "gin/converter.h"
9 
10 namespace gin {
11 
Arguments()12 Arguments::Arguments()
13     : isolate_(NULL),
14       info_(NULL),
15       next_(0),
16       insufficient_arguments_(false) {
17 }
18 
Arguments(const v8::FunctionCallbackInfo<v8::Value> & info)19 Arguments::Arguments(const v8::FunctionCallbackInfo<v8::Value>& info)
20     : isolate_(info.GetIsolate()),
21       info_(&info),
22       next_(0),
23       insufficient_arguments_(false) {
24 }
25 
~Arguments()26 Arguments::~Arguments() {
27 }
28 
PeekNext() const29 v8::Handle<v8::Value> Arguments::PeekNext() const {
30   if (next_ >= info_->Length())
31     return v8::Handle<v8::Value>();
32   return (*info_)[next_];
33 }
34 
ThrowError() const35 void Arguments::ThrowError() const {
36   if (insufficient_arguments_)
37     return ThrowTypeError("Insufficient number of arguments.");
38 
39   ThrowTypeError(base::StringPrintf(
40       "Error processing argument %d.", next_ - 1));
41 }
42 
ThrowTypeError(const std::string & message) const43 void Arguments::ThrowTypeError(const std::string& message) const {
44   isolate_->ThrowException(v8::Exception::TypeError(
45       StringToV8(isolate_, message)));
46 }
47 
IsConstructCall() const48 bool Arguments::IsConstructCall() const {
49   return info_->IsConstructCall();
50 }
51 
52 }  // namespace gin
53