blob: 284451479d5ebf8ea9181c6bac28a86847e97cc4 [file] [log] [blame]
[email protected]e87f3122013-11-12 00:41:271// 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
[email protected]855ab432013-11-18 17:09:367#include "base/strings/stringprintf.h"
[email protected]e87f3122013-11-12 00:41:278#include "gin/converter.h"
9
10namespace gin {
11
[email protected]7618ebbb2013-11-27 03:38:2612Arguments::Arguments()
13 : isolate_(NULL),
14 info_(NULL),
15 next_(0),
16 insufficient_arguments_(false) {
17}
18
[email protected]e87f3122013-11-12 00:41:2719Arguments::Arguments(const v8::FunctionCallbackInfo<v8::Value>& info)
20 : isolate_(info.GetIsolate()),
[email protected]7618ebbb2013-11-27 03:38:2621 info_(&info),
[email protected]e87f3122013-11-12 00:41:2722 next_(0),
23 insufficient_arguments_(false) {
24}
25
26Arguments::~Arguments() {
27}
28
[email protected]97f21ca2013-11-17 17:46:0729v8::Handle<v8::Value> Arguments::PeekNext() {
[email protected]7618ebbb2013-11-27 03:38:2630 if (next_ >= info_->Length())
[email protected]97f21ca2013-11-17 17:46:0731 return v8::Handle<v8::Value>();
[email protected]7618ebbb2013-11-27 03:38:2632 return (*info_)[next_];
[email protected]97f21ca2013-11-17 17:46:0733}
34
[email protected]e87f3122013-11-12 00:41:2735void Arguments::ThrowError() {
36 if (insufficient_arguments_)
37 return ThrowTypeError("Insufficient number of arguments.");
38
[email protected]855ab432013-11-18 17:09:3639 ThrowTypeError(base::StringPrintf(
40 "Error processing argument %d.", next_ - 1));
[email protected]e87f3122013-11-12 00:41:2741}
42
43void Arguments::ThrowTypeError(const std::string& message) {
44 isolate_->ThrowException(v8::Exception::TypeError(
45 StringToV8(isolate_, message)));
46}
47
[email protected]7618ebbb2013-11-27 03:38:2648template<>
49bool Arguments::GetNext<Arguments>(Arguments* out) {
50 *out = *this;
51 return true;
52}
53
[email protected]e87f3122013-11-12 00:41:2754} // namespace gin