blob: 8bd9930e4b68ad9513c94d4e75f6ee056a09c516 [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
deepak.sfaaa1b62015-04-30 07:30:4829v8::Local<v8::Value> Arguments::PeekNext() const {
[email protected]7618ebbb2013-11-27 03:38:2630 if (next_ >= info_->Length())
deepak.sfaaa1b62015-04-30 07:30:4831 return v8::Local<v8::Value>();
[email protected]7618ebbb2013-11-27 03:38:2632 return (*info_)[next_];
[email protected]97f21ca2013-11-17 17:46:0733}
34
deepak.sfaaa1b62015-04-30 07:30:4835std::string V8TypeAsString(v8::Local<v8::Value> value) {
eseidel2584930f2014-12-15 22:06:4436 if (value.IsEmpty())
37 return "<empty handle>";
38 if (value->IsUndefined())
39 return "undefined";
40 if (value->IsNull())
41 return "null";
42 std::string result;
43 if (!ConvertFromV8(NULL, value, &result))
44 return std::string();
45 return result;
46}
47
[email protected]481d2492013-12-13 23:55:2548void Arguments::ThrowError() const {
[email protected]e87f3122013-11-12 00:41:2749 if (insufficient_arguments_)
50 return ThrowTypeError("Insufficient number of arguments.");
51
eseidel2584930f2014-12-15 22:06:4452 return ThrowTypeError(base::StringPrintf(
53 "Error processing argument at index %d, conversion failure from %s",
54 next_ - 1, V8TypeAsString((*info_)[next_ - 1]).c_str()));
[email protected]e87f3122013-11-12 00:41:2755}
56
[email protected]481d2492013-12-13 23:55:2557void Arguments::ThrowTypeError(const std::string& message) const {
[email protected]e87f3122013-11-12 00:41:2758 isolate_->ThrowException(v8::Exception::TypeError(
59 StringToV8(isolate_, message)));
60}
61
[email protected]744a4942014-07-18 16:46:1462bool Arguments::IsConstructCall() const {
63 return info_->IsConstructCall();
64}
65
[email protected]e87f3122013-11-12 00:41:2766} // namespace gin