2222 if (!(r)) return env->ThrowRangeError (" out of range index" ); \
2323 } while (0 )
2424
25- #define THROW_AND_RETURN_UNLESS_BUFFER (env, obj ) \
26- do { \
27- if (!HasInstance (obj)) \
28- return env->ThrowTypeError (" argument should be a Buffer" ); \
29- } while (0 )
30-
31- #define SPREAD_ARG (val, name ) \
32- CHECK ((val)->IsUint8Array()); \
33- Local<Uint8Array> name = (val).As<Uint8Array>(); \
34- ArrayBuffer::Contents name##_c = name->Buffer ()->GetContents(); \
35- const size_t name##_offset = name->ByteOffset (); \
36- const size_t name##_length = name->ByteLength (); \
37- char * const name##_data = \
38- static_cast <char *>(name##_c.Data()) + name##_offset; \
39- if (name##_length > 0 ) \
40- CHECK_NE (name##_data, nullptr );
41-
4225#define SLICE_START_END (start_arg, end_arg, end_max ) \
4326 size_t start; \
4427 size_t end; \
@@ -448,7 +431,7 @@ void StringSlice(const FunctionCallbackInfo<Value>& args) {
448431 Isolate* isolate = env->isolate ();
449432
450433 THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
451- SPREAD_ARG (args.This (), ts_obj);
434+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
452435
453436 if (ts_obj_length == 0 )
454437 return args.GetReturnValue ().SetEmptyString ();
@@ -465,7 +448,7 @@ void StringSlice<UCS2>(const FunctionCallbackInfo<Value>& args) {
465448 Environment* env = Environment::GetCurrent (args);
466449
467450 THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
468- SPREAD_ARG (args.This (), ts_obj);
451+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
469452
470453 if (ts_obj_length == 0 )
471454 return args.GetReturnValue ().SetEmptyString ();
@@ -543,8 +526,8 @@ void Copy(const FunctionCallbackInfo<Value> &args) {
543526 THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
544527 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
545528 Local<Object> target_obj = args[0 ].As <Object>();
546- SPREAD_ARG (args.This (), ts_obj);
547- SPREAD_ARG (target_obj, target);
529+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
530+ SPREAD_BUFFER_ARG (target_obj, target);
548531
549532 size_t target_start;
550533 size_t source_start;
@@ -577,7 +560,7 @@ void Fill(const FunctionCallbackInfo<Value>& args) {
577560 Environment* env = Environment::GetCurrent (args);
578561
579562 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
580- SPREAD_ARG (args[0 ], ts_obj);
563+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
581564
582565 size_t start = args[2 ]->Uint32Value ();
583566 size_t end = args[3 ]->Uint32Value ();
@@ -590,7 +573,7 @@ void Fill(const FunctionCallbackInfo<Value>& args) {
590573
591574 // First check if Buffer has been passed.
592575 if (Buffer::HasInstance (args[1 ])) {
593- SPREAD_ARG (args[1 ], fill_obj);
576+ SPREAD_BUFFER_ARG (args[1 ], fill_obj);
594577 str_length = fill_obj_length;
595578 memcpy (ts_obj_data + start, fill_obj_data, MIN (str_length, fill_length));
596579 goto start_fill;
@@ -669,7 +652,7 @@ void StringWrite(const FunctionCallbackInfo<Value>& args) {
669652 Environment* env = Environment::GetCurrent (args);
670653
671654 THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
672- SPREAD_ARG (args.This (), ts_obj);
655+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
673656
674657 if (!args[0 ]->IsString ())
675658 return env->ThrowTypeError (" Argument must be a string" );
@@ -747,7 +730,7 @@ static inline void Swizzle(char* start, unsigned int len) {
747730template <typename T, enum Endianness endianness>
748731void ReadFloatGeneric (const FunctionCallbackInfo<Value>& args) {
749732 THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
750- SPREAD_ARG (args[0 ], ts_obj);
733+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
751734
752735 uint32_t offset = args[1 ]->Uint32Value ();
753736 CHECK_LE (offset + sizeof (T), ts_obj_length);
@@ -881,8 +864,8 @@ void CompareOffset(const FunctionCallbackInfo<Value> &args) {
881864
882865 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
883866 THROW_AND_RETURN_UNLESS_BUFFER (env, args[1 ]);
884- SPREAD_ARG (args[0 ], ts_obj);
885- SPREAD_ARG (args[1 ], target);
867+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
868+ SPREAD_BUFFER_ARG (args[1 ], target);
886869
887870 size_t target_start;
888871 size_t source_start;
@@ -921,8 +904,8 @@ void Compare(const FunctionCallbackInfo<Value> &args) {
921904
922905 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
923906 THROW_AND_RETURN_UNLESS_BUFFER (env, args[1 ]);
924- SPREAD_ARG (args[0 ], obj_a);
925- SPREAD_ARG (args[1 ], obj_b);
907+ SPREAD_BUFFER_ARG (args[0 ], obj_a);
908+ SPREAD_BUFFER_ARG (args[1 ], obj_b);
926909
927910 size_t cmp_length = MIN (obj_a_length, obj_b_length);
928911
@@ -977,7 +960,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args) {
977960 UTF8);
978961
979962 THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
980- SPREAD_ARG (args[0 ], ts_obj);
963+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
981964
982965 Local<String> needle = args[1 ].As <String>();
983966 int64_t offset_i64 = args[2 ]->IntegerValue ();
@@ -1084,8 +1067,8 @@ void IndexOfBuffer(const FunctionCallbackInfo<Value>& args) {
10841067
10851068 THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
10861069 THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[1 ]);
1087- SPREAD_ARG (args[0 ], ts_obj);
1088- SPREAD_ARG (args[1 ], buf);
1070+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
1071+ SPREAD_BUFFER_ARG (args[1 ], buf);
10891072 int64_t offset_i64 = args[2 ]->IntegerValue ();
10901073 bool is_forward = args[4 ]->IsTrue ();
10911074
@@ -1143,7 +1126,7 @@ void IndexOfNumber(const FunctionCallbackInfo<Value>& args) {
11431126 ASSERT (args[3 ]->IsBoolean ());
11441127
11451128 THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
1146- SPREAD_ARG (args[0 ], ts_obj);
1129+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11471130
11481131 uint32_t needle = args[1 ]->Uint32Value ();
11491132 int64_t offset_i64 = args[2 ]->IntegerValue ();
@@ -1171,7 +1154,7 @@ void IndexOfNumber(const FunctionCallbackInfo<Value>& args) {
11711154void Swap16 (const FunctionCallbackInfo<Value>& args) {
11721155 Environment* env = Environment::GetCurrent (args);
11731156 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1174- SPREAD_ARG (args[0 ], ts_obj);
1157+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11751158 SwapBytes16 (ts_obj_data, ts_obj_length);
11761159 args.GetReturnValue ().Set (args[0 ]);
11771160}
@@ -1180,7 +1163,7 @@ void Swap16(const FunctionCallbackInfo<Value>& args) {
11801163void Swap32 (const FunctionCallbackInfo<Value>& args) {
11811164 Environment* env = Environment::GetCurrent (args);
11821165 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1183- SPREAD_ARG (args[0 ], ts_obj);
1166+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11841167 SwapBytes32 (ts_obj_data, ts_obj_length);
11851168 args.GetReturnValue ().Set (args[0 ]);
11861169}
@@ -1189,7 +1172,7 @@ void Swap32(const FunctionCallbackInfo<Value>& args) {
11891172void Swap64 (const FunctionCallbackInfo<Value>& args) {
11901173 Environment* env = Environment::GetCurrent (args);
11911174 THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1192- SPREAD_ARG (args[0 ], ts_obj);
1175+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11931176 SwapBytes64 (ts_obj_data, ts_obj_length);
11941177 args.GetReturnValue ().Set (args[0 ]);
11951178}
0 commit comments