Skip to content
This repository was archived by the owner on Oct 18, 2023. It is now read-only.

Commit e9f1e2c

Browse files
Merge pull request justadudewhohacks#450 from oyyd/constructor
cc: assert constructor call in Class::New functions
2 parents 3d26db0 + 60df9e6 commit e9f1e2c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+169
-90
lines changed

cc/core/Mat.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ void Mat::setNativeProps(cv::Mat mat) {
115115
};
116116

117117
NAN_METHOD(Mat::New) {
118+
FF_ASSERT_CONSTRUCT_CALL(Mat);
118119
Mat* self = new Mat();
119120
/* from channels */
120121
if (info.Length() == 1 && info[0]->IsArray()) {

cc/core/Point.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ NAN_MODULE_INIT(Point::Init) {
3434
};
3535

3636
NAN_METHOD(Point::New) {
37+
FF_ASSERT_CONSTRUCT_CALL(Point);
3738
if (info.Length() < 2) {
3839
return Nan::ThrowError("Point::New - expected arguments x, y, (z)");
3940
}
@@ -51,4 +52,4 @@ NAN_METHOD(Point::New) {
5152
Nan::ObjectWrap::Unwrap<Point2>(jsPoint)->pt = cv::Point2d(x, y);
5253
}
5354
info.GetReturnValue().Set(jsPoint);
54-
}
55+
}

cc/core/Rect.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ NAN_MODULE_INIT(Rect::Init) {
2626
};
2727

2828
NAN_METHOD(Rect::New) {
29+
FF_ASSERT_CONSTRUCT_CALL(Rect);
2930
Rect* self = new Rect();
3031
if (info.Length() == 0) {
3132
self->rect = cv::Rect2d();

cc/core/RotatedRect.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ NAN_MODULE_INIT(RotatedRect::Init) {
1717
};
1818

1919
NAN_METHOD(RotatedRect::New) {
20+
FF_ASSERT_CONSTRUCT_CALL(RotatedRect);
2021
RotatedRect* self = new RotatedRect();
2122
if (info.Length() == 0) {
2223
self->rect = cv::RotatedRect();
@@ -40,4 +41,4 @@ NAN_METHOD(RotatedRect::New) {
4041
}
4142
self->Wrap(info.Holder());
4243
info.GetReturnValue().Set(info.Holder());
43-
}
44+
}

cc/core/Size.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ NAN_MODULE_INIT(Size::Init) {
1414
};
1515

1616
NAN_METHOD(Size::New) {
17+
FF_ASSERT_CONSTRUCT_CALL(Size);
1718
Size* self = new Size();
1819
if (info.Length() > 0) {
1920
if (info.Length() < 2) {
@@ -25,4 +26,4 @@ NAN_METHOD(Size::New) {
2526
}
2627
self->Wrap(info.Holder());
2728
info.GetReturnValue().Set(info.Holder());
28-
}
29+
}

cc/core/TermCriteria.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ NAN_MODULE_INIT(TermCriteria::Init) {
1515
};
1616

1717
NAN_METHOD(TermCriteria::New) {
18+
FF_ASSERT_CONSTRUCT_CALL(TermCriteria);
1819
FF_METHOD_CONTEXT("TermCriteria::New");
1920
TermCriteria* self = new TermCriteria();
2021
if (info.Length() > 0) {
@@ -25,4 +26,4 @@ NAN_METHOD(TermCriteria::New) {
2526
}
2627
self->Wrap(info.Holder());
2728
info.GetReturnValue().Set(info.Holder());
28-
}
29+
}

cc/core/Vec.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ NAN_MODULE_INIT(Vec::Init) {
4949
};
5050

5151
NAN_METHOD(Vec::New) {
52+
FF_ASSERT_CONSTRUCT_CALL(Vec);
5253
if (info.Length() < 2) {
5354
return Nan::ThrowError("Vec::New - expected arguments (w), x, y, (z)");
5455
}
@@ -57,9 +58,9 @@ NAN_METHOD(Vec::New) {
5758
v8::Local<v8::Function> ct = Nan::New(Vec4::constructor)->GetFunction();
5859
jsVec = Nan::NewInstance(ct).ToLocalChecked();
5960
Nan::ObjectWrap::Unwrap<Vec4>(jsVec)->vec = cv::Vec4d(
60-
info[0]->NumberValue(),
61-
info[1]->NumberValue(),
62-
info[2]->NumberValue(),
61+
info[0]->NumberValue(),
62+
info[1]->NumberValue(),
63+
info[2]->NumberValue(),
6364
info[3]->NumberValue()
6465
);
6566
} else {
@@ -77,4 +78,4 @@ NAN_METHOD(Vec::New) {
7778
}
7879
}
7980
info.GetReturnValue().Set(jsVec);
80-
}
81+
}

cc/macros.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ static FF_FUNC_TYPE ff_func = FF_FUNC_TYPE();
8888

8989
#define FF_ARG_IS_OBJECT(argN) FF_HAS_ARG(argN) && info[argN]->IsObject() && !info[argN]->IsArray() && !info[argN]->IsFunction()
9090

91+
#define FF_ASSERT_CONSTRUCT_CALL(ctor) \
92+
if (!info.IsConstructCall()) { \
93+
return Nan::ThrowError(FF_NEW_STRING(std::string(#ctor) \
94+
+ "::New - expect to be called with \"new\"")); \
95+
}
96+
9197
/* for setters */
9298
#define FF_REQUIRE_VALUE(ff_value, ff_type) \
9399
if (!ff_type.checkType(ff_value)) { \

cc/modules/dnn/Net.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ NAN_MODULE_INIT(Net::Init) {
2525
};
2626

2727
NAN_METHOD(Net::New) {
28+
FF_ASSERT_CONSTRUCT_CALL(Net);
2829
Net* self = new Net();
2930
self->Wrap(info.Holder());
3031
info.GetReturnValue().Set(info.Holder());
@@ -62,4 +63,4 @@ NAN_METHOD(Net::ForwardAsync) {
6263
);
6364
}
6465

65-
#endif
66+
#endif

cc/modules/face/EigenFaceRecognizer.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ NAN_MODULE_INIT(EigenFaceRecognizer::Init) {
1818
};
1919

2020
NAN_METHOD(EigenFaceRecognizer::New) {
21+
FF_ASSERT_CONSTRUCT_CALL(EigenFaceRecognizer);
2122
FF::TryCatch tryCatch;
2223
FaceRecognizerBindings::NewWorker worker;
2324

@@ -37,4 +38,4 @@ NAN_METHOD(EigenFaceRecognizer::New) {
3738
FF_RETURN(info.Holder());
3839
};
3940

40-
#endif
41+
#endif

0 commit comments

Comments
 (0)