Skip to content

Commit aa5d82a

Browse files
author
Mihail Slavchev
committed
replace ASSERT_MESSAGE with V8 exception (issue #221)
1 parent ad612b3 commit aa5d82a

2 files changed

Lines changed: 77 additions & 22 deletions

File tree

src/jni/JsArgConverter.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,14 @@ bool JsArgConverter::ConvertArg(const Local<Value>& arg, int index)
6666
}
6767
else if (arg->IsArray())
6868
{
69-
ASSERT_MESSAGE(typeSignature[0] == '[', "Expected array signature, actual signature=%s", typeSignature.c_str());
69+
success = typeSignature[0] == '[';
7070

71-
auto jsArr = Local<Array>::Cast(arg);
71+
if (success)
72+
{
73+
auto jsArr = Local<Array>::Cast(arg);
7274

73-
success = ConvertJavaScriptArray(jsArr, index);
75+
success = ConvertJavaScriptArray(jsArr, index);
76+
}
7477

7578
if (!success)
7679
{

src/jni/NumericCasts.cpp

Lines changed: 71 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,19 @@ void NumericCasts::MarkedJsObjectWeakCallback(const v8::WeakCallbackData<Object,
7979

8080
void NumericCasts::MarkAsLongCallback(const v8::FunctionCallbackInfo<Value>& args)
8181
{
82-
ASSERT_MESSAGE(args.Length() == 1, "long(x) should be called with single parameter");
83-
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");
84-
8582
auto isolate = Isolate::GetCurrent();
8683

84+
if (args.Length() != 1)
85+
{
86+
isolate->ThrowException(ConvertToV8String("long(x) should be called with single parameter"));
87+
return;
88+
}
89+
if (!args[0]->IsString() && !args[0]->IsStringObject() && !args[0]->IsNumber() && !args[0]->IsNumberObject())
90+
{
91+
isolate->ThrowException(ConvertToV8String("long(x) should be called with single parameter containing a long number representation"));
92+
return;
93+
}
94+
8795
Local<Value> value;
8896
if (args[0]->IsInt32())
8997
{
@@ -109,11 +117,19 @@ void NumericCasts::MarkAsLongCallback(const v8::FunctionCallbackInfo<Value>& arg
109117

110118
void NumericCasts::MarkAsByteCallback(const v8::FunctionCallbackInfo<Value>& args)
111119
{
112-
ASSERT_MESSAGE(args.Length() == 1, "byte(x) should be called with single parameter");
113-
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");
114-
115120
auto isolate = Isolate::GetCurrent();
116121

122+
if (args.Length() != 1)
123+
{
124+
isolate->ThrowException(ConvertToV8String("byte(x) should be called with single parameter"));
125+
return;
126+
}
127+
if (!args[0]->IsString() && !args[0]->IsStringObject() && !args[0]->IsNumber() && !args[0]->IsNumberObject())
128+
{
129+
isolate->ThrowException(ConvertToV8String("byte(x) should be called with single parameter containing a byte number representation"));
130+
return;
131+
}
132+
117133
Local<Value> value;
118134
if (args[0]->IsInt32())
119135
{
@@ -139,11 +155,19 @@ void NumericCasts::MarkAsByteCallback(const v8::FunctionCallbackInfo<Value>& arg
139155

140156
void NumericCasts::MarkAsShortCallback(const v8::FunctionCallbackInfo<Value>& args)
141157
{
142-
ASSERT_MESSAGE(args.Length() == 1, "short(x) should be called with single parameter");
143-
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");
144-
145158
auto isolate = Isolate::GetCurrent();
146159

160+
if (args.Length() != 1)
161+
{
162+
isolate->ThrowException(ConvertToV8String("short(x) should be called with single parameter"));
163+
return;
164+
}
165+
if (!args[0]->IsString() && !args[0]->IsStringObject() && !args[0]->IsNumber() && !args[0]->IsNumberObject())
166+
{
167+
isolate->ThrowException(ConvertToV8String("short(x) should be called with single parameter containing a short number representation"));
168+
return;
169+
}
170+
147171
Local<Value> value;
148172
if (args[0]->IsInt32())
149173
{
@@ -169,13 +193,25 @@ void NumericCasts::MarkAsShortCallback(const v8::FunctionCallbackInfo<Value>& ar
169193

170194
void NumericCasts::MarkAsCharCallback(const v8::FunctionCallbackInfo<Value>& args)
171195
{
172-
ASSERT_MESSAGE(args.Length() == 1, "char(x) should be called with single parameter");
173-
ASSERT_MESSAGE(args[0]->IsString(), "char(x) should be called with single parameter containing a char representation");
174-
175196
auto isolate = Isolate::GetCurrent();
176197

198+
if (args.Length() != 1)
199+
{
200+
isolate->ThrowException(ConvertToV8String("char(x) should be called with single parameter"));
201+
return;
202+
}
203+
if (!args[0]->IsString())
204+
{
205+
isolate->ThrowException(ConvertToV8String("char(x) should be called with single parameter containing a char representation"));
206+
return;
207+
}
208+
177209
auto value = args[0]->ToString();
178-
ASSERT_MESSAGE(value->Length() == 1, "char(x) should be called with single parameter containing a single char");
210+
if (value->Length() != 1)
211+
{
212+
isolate->ThrowException(ConvertToV8String("char(x) should be called with single parameter containing a single char"));
213+
return;
214+
}
179215

180216
auto cast = Object::New(isolate);
181217

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

193229
void NumericCasts::MarkAsFloatCallback(const v8::FunctionCallbackInfo<Value>& args)
194230
{
195-
ASSERT_MESSAGE(args.Length() == 1, "float(x) should be called with single parameter");
196-
ASSERT_MESSAGE(args[0]->IsNumber(), "float(x) should be called with single parameter containing a float number representation");
197-
198231
auto isolate = Isolate::GetCurrent();
199232

233+
if (args.Length() != 1)
234+
{
235+
isolate->ThrowException(ConvertToV8String("float(x) should be called with single parameter"));
236+
return;
237+
}
238+
if (!args[0]->IsNumber())
239+
{
240+
isolate->ThrowException(ConvertToV8String("float(x) should be called with single parameter containing a float number representation"));
241+
return;
242+
}
243+
200244
auto value = args[0]->ToNumber();
201245
auto cast = Object::New(isolate);
202246

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

214258
void NumericCasts::MarkAsDoubleCallback(const v8::FunctionCallbackInfo<Value>& args)
215259
{
216-
ASSERT_MESSAGE(args.Length() == 1, "double(x) should be called with single parameter");
217-
ASSERT_MESSAGE(args[0]->IsNumber(), "double(x) should be called with single parameter containing a double number representation");
218-
219260
auto isolate = Isolate::GetCurrent();
220261

262+
if (args.Length() != 1)
263+
{
264+
isolate->ThrowException(ConvertToV8String("double(x) should be called with single parameter"));
265+
return;
266+
}
267+
if (!args[0]->IsNumber())
268+
{
269+
isolate->ThrowException(ConvertToV8String("double(x) should be called with single parameter containing a double number representation"));
270+
return;
271+
}
272+
221273
auto value = args[0]->ToNumber();
222274
auto cast = Object::New(isolate);
223275

0 commit comments

Comments
 (0)