Skip to content

Commit

Permalink
replace ASSERT_MESSAGE with V8 exception (issue #221)
Browse files Browse the repository at this point in the history
  • Loading branch information
Mihail Slavchev committed Nov 6, 2015
1 parent ad612b3 commit aa5d82a
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 22 deletions.
9 changes: 6 additions & 3 deletions src/jni/JsArgConverter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,14 @@ bool JsArgConverter::ConvertArg(const Local<Value>& arg, int index)
}
else if (arg->IsArray())
{
ASSERT_MESSAGE(typeSignature[0] == '[', "Expected array signature, actual signature=%s", typeSignature.c_str());
success = typeSignature[0] == '[';

auto jsArr = Local<Array>::Cast(arg);
if (success)
{
auto jsArr = Local<Array>::Cast(arg);

success = ConvertJavaScriptArray(jsArr, index);
success = ConvertJavaScriptArray(jsArr, index);
}

if (!success)
{
Expand Down
90 changes: 71 additions & 19 deletions src/jni/NumericCasts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,19 @@ void NumericCasts::MarkedJsObjectWeakCallback(const v8::WeakCallbackData<Object,

void NumericCasts::MarkAsLongCallback(const v8::FunctionCallbackInfo<Value>& args)
{
ASSERT_MESSAGE(args.Length() == 1, "long(x) should be called with single parameter");
ASSERT_MESSAGE(args[0]->IsString() || args[0]->IsStringObject() || args[0]->IsNumber() || args[0]->IsNumberObject(), "long(x) should be called with single parameter containing a long number representation");

auto isolate = Isolate::GetCurrent();

if (args.Length() != 1)
{
isolate->ThrowException(ConvertToV8String("long(x) should be called with single parameter"));
return;
}
if (!args[0]->IsString() && !args[0]->IsStringObject() && !args[0]->IsNumber() && !args[0]->IsNumberObject())
{
isolate->ThrowException(ConvertToV8String("long(x) should be called with single parameter containing a long number representation"));
return;
}

Local<Value> value;
if (args[0]->IsInt32())
{
Expand All @@ -109,11 +117,19 @@ void NumericCasts::MarkAsLongCallback(const v8::FunctionCallbackInfo<Value>& arg

void NumericCasts::MarkAsByteCallback(const v8::FunctionCallbackInfo<Value>& args)
{
ASSERT_MESSAGE(args.Length() == 1, "byte(x) should be called with single parameter");
ASSERT_MESSAGE(args[0]->IsString() || args[0]->IsStringObject() || args[0]->IsInt32() || args[0]->IsNumberObject(), "byte(x) should be called with single parameter containing a byte number representation");

auto isolate = Isolate::GetCurrent();

if (args.Length() != 1)
{
isolate->ThrowException(ConvertToV8String("byte(x) should be called with single parameter"));
return;
}
if (!args[0]->IsString() && !args[0]->IsStringObject() && !args[0]->IsNumber() && !args[0]->IsNumberObject())
{
isolate->ThrowException(ConvertToV8String("byte(x) should be called with single parameter containing a byte number representation"));
return;
}

Local<Value> value;
if (args[0]->IsInt32())
{
Expand All @@ -139,11 +155,19 @@ void NumericCasts::MarkAsByteCallback(const v8::FunctionCallbackInfo<Value>& arg

void NumericCasts::MarkAsShortCallback(const v8::FunctionCallbackInfo<Value>& args)
{
ASSERT_MESSAGE(args.Length() == 1, "short(x) should be called with single parameter");
ASSERT_MESSAGE(args[0]->IsString() || args[0]->IsStringObject() || args[0]->IsInt32() || args[0]->IsNumberObject(), "short(x) should be called with single parameter containing a short number representation");

auto isolate = Isolate::GetCurrent();

if (args.Length() != 1)
{
isolate->ThrowException(ConvertToV8String("short(x) should be called with single parameter"));
return;
}
if (!args[0]->IsString() && !args[0]->IsStringObject() && !args[0]->IsNumber() && !args[0]->IsNumberObject())
{
isolate->ThrowException(ConvertToV8String("short(x) should be called with single parameter containing a short number representation"));
return;
}

Local<Value> value;
if (args[0]->IsInt32())
{
Expand All @@ -169,13 +193,25 @@ void NumericCasts::MarkAsShortCallback(const v8::FunctionCallbackInfo<Value>& ar

void NumericCasts::MarkAsCharCallback(const v8::FunctionCallbackInfo<Value>& args)
{
ASSERT_MESSAGE(args.Length() == 1, "char(x) should be called with single parameter");
ASSERT_MESSAGE(args[0]->IsString(), "char(x) should be called with single parameter containing a char representation");

auto isolate = Isolate::GetCurrent();

if (args.Length() != 1)
{
isolate->ThrowException(ConvertToV8String("char(x) should be called with single parameter"));
return;
}
if (!args[0]->IsString())
{
isolate->ThrowException(ConvertToV8String("char(x) should be called with single parameter containing a char representation"));
return;
}

auto value = args[0]->ToString();
ASSERT_MESSAGE(value->Length() == 1, "char(x) should be called with single parameter containing a single char");
if (value->Length() != 1)
{
isolate->ThrowException(ConvertToV8String("char(x) should be called with single parameter containing a single char"));
return;
}

auto cast = Object::New(isolate);

Expand All @@ -192,11 +228,19 @@ void NumericCasts::MarkAsCharCallback(const v8::FunctionCallbackInfo<Value>& arg

void NumericCasts::MarkAsFloatCallback(const v8::FunctionCallbackInfo<Value>& args)
{
ASSERT_MESSAGE(args.Length() == 1, "float(x) should be called with single parameter");
ASSERT_MESSAGE(args[0]->IsNumber(), "float(x) should be called with single parameter containing a float number representation");

auto isolate = Isolate::GetCurrent();

if (args.Length() != 1)
{
isolate->ThrowException(ConvertToV8String("float(x) should be called with single parameter"));
return;
}
if (!args[0]->IsNumber())
{
isolate->ThrowException(ConvertToV8String("float(x) should be called with single parameter containing a float number representation"));
return;
}

auto value = args[0]->ToNumber();
auto cast = Object::New(isolate);

Expand All @@ -213,11 +257,19 @@ void NumericCasts::MarkAsFloatCallback(const v8::FunctionCallbackInfo<Value>& ar

void NumericCasts::MarkAsDoubleCallback(const v8::FunctionCallbackInfo<Value>& args)
{
ASSERT_MESSAGE(args.Length() == 1, "double(x) should be called with single parameter");
ASSERT_MESSAGE(args[0]->IsNumber(), "double(x) should be called with single parameter containing a double number representation");

auto isolate = Isolate::GetCurrent();

if (args.Length() != 1)
{
isolate->ThrowException(ConvertToV8String("double(x) should be called with single parameter"));
return;
}
if (!args[0]->IsNumber())
{
isolate->ThrowException(ConvertToV8String("double(x) should be called with single parameter containing a double number representation"));
return;
}

auto value = args[0]->ToNumber();
auto cast = Object::New(isolate);

Expand Down

0 comments on commit aa5d82a

Please sign in to comment.