2222if (!(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 ) \
4326size_t start; \
4427size_t end; \
@@ -448,7 +431,7 @@ void StringSlice(const FunctionCallbackInfo<Value>& args){
448431 Isolate* isolate = env->isolate ();
449432
450433THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
451- SPREAD_ARG (args.This (), ts_obj);
434+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
452435
453436if (ts_obj_length == 0 )
454437return args.GetReturnValue ().SetEmptyString ();
@@ -465,7 +448,7 @@ void StringSlice<UCS2>(const FunctionCallbackInfo<Value>& args){
465448 Environment* env = Environment::GetCurrent (args);
466449
467450THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
468- SPREAD_ARG (args.This (), ts_obj);
451+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
469452
470453if (ts_obj_length == 0 )
471454return args.GetReturnValue ().SetEmptyString ();
@@ -543,8 +526,8 @@ void Copy(const FunctionCallbackInfo<Value> &args){
543526THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
544527THROW_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
549532size_t target_start;
550533size_t source_start;
@@ -577,7 +560,7 @@ void Fill(const FunctionCallbackInfo<Value>& args){
577560 Environment* env = Environment::GetCurrent (args);
578561
579562THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
580- SPREAD_ARG (args[0 ], ts_obj);
563+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
581564
582565size_t start = args[2 ]->Uint32Value ();
583566size_t end = args[3 ]->Uint32Value ();
@@ -590,7 +573,7 @@ void Fill(const FunctionCallbackInfo<Value>& args){
590573
591574// First check if Buffer has been passed.
592575if (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;
595578memcpy (ts_obj_data + start, fill_obj_data, MIN (str_length, fill_length));
596579goto start_fill;
@@ -669,7 +652,7 @@ void StringWrite(const FunctionCallbackInfo<Value>& args){
669652 Environment* env = Environment::GetCurrent (args);
670653
671654THROW_AND_RETURN_UNLESS_BUFFER (env, args.This ());
672- SPREAD_ARG (args.This (), ts_obj);
655+ SPREAD_BUFFER_ARG (args.This (), ts_obj);
673656
674657if (!args[0 ]->IsString ())
675658return 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){
749732THROW_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
752735uint32_t offset = args[1 ]->Uint32Value ();
753736CHECK_LE (offset + sizeof (T), ts_obj_length);
@@ -881,8 +864,8 @@ void CompareOffset(const FunctionCallbackInfo<Value> &args){
881864
882865THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
883866THROW_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
887870size_t target_start;
888871size_t source_start;
@@ -921,8 +904,8 @@ void Compare(const FunctionCallbackInfo<Value> &args){
921904
922905THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
923906THROW_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
927910size_t cmp_length = MIN (obj_a_length, obj_b_length);
928911
@@ -977,7 +960,7 @@ void IndexOfString(const FunctionCallbackInfo<Value>& args){
977960 UTF8);
978961
979962THROW_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>();
983966int64_t offset_i64 = args[2 ]->IntegerValue ();
@@ -1084,8 +1067,8 @@ void IndexOfBuffer(const FunctionCallbackInfo<Value>& args){
10841067
10851068THROW_AND_RETURN_UNLESS_BUFFER (Environment::GetCurrent (args), args[0 ]);
10861069THROW_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);
10891072int64_t offset_i64 = args[2 ]->IntegerValue ();
10901073bool is_forward = args[4 ]->IsTrue ();
10911074
@@ -1143,7 +1126,7 @@ void IndexOfNumber(const FunctionCallbackInfo<Value>& args){
11431126ASSERT (args[3 ]->IsBoolean ());
11441127
11451128THROW_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
11481131uint32_t needle = args[1 ]->Uint32Value ();
11491132int64_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);
11731156THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1174- SPREAD_ARG (args[0 ], ts_obj);
1157+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11751158SwapBytes16 (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);
11821165THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1183- SPREAD_ARG (args[0 ], ts_obj);
1166+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11841167SwapBytes32 (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);
11911174THROW_AND_RETURN_UNLESS_BUFFER (env, args[0 ]);
1192- SPREAD_ARG (args[0 ], ts_obj);
1175+ SPREAD_BUFFER_ARG (args[0 ], ts_obj);
11931176SwapBytes64 (ts_obj_data, ts_obj_length);
11941177 args.GetReturnValue ().Set (args[0 ]);
11951178}
0 commit comments