@@ -884,15 +884,15 @@ NAN_METHOD(ArrayWrapper::At)
884884
885885 Guard ();
886886
887- if (args.Length () < 2 )
887+ if (args.Length () == 1 )
888888 {
889889 NanReturnValue (New (GetArray (args.This ())->operator ()(ToIndex (args[0 ]))));
890890 }
891- else if (args.Length () < 3 )
891+ else if (args.Length () == 2 )
892892 {
893893 NanReturnValue (New (GetArray (args.This ())->operator ()(ToIndex (args[0 ]), ToIndex (args[1 ]))));
894894 }
895- else if (args.Length () < 4 )
895+ else if (args.Length () == 3 )
896896 {
897897 NanReturnValue (New (GetArray (args.This ())->operator ()(ToIndex (args[0 ]), ToIndex (args[1 ]), ToIndex (args[2 ]))));
898898 }
@@ -963,55 +963,268 @@ NAN_METHOD(ArrayWrapper::F)\
963963 try \
964964 {\
965965 auto pArray = GetArray (args.This ());\
966- auto & Array = *pArray;\
967- bool isDouble = NeedsDouble (Array );\
966+ auto & array = *pArray;\
967+ bool isDouble = NeedsDouble (array );\
968968 ARGS_LEN (1 )\
969- auto value = args[0 ];\
970- auto pOtherArray = TryGetArray (value);\
971- Guard ();\
972- if (pOtherArray)\
969+ if (args.Length () == 1 )\
973970 {\
974- auto & otherArray = *pOtherArray;\
975- Array Op otherArray;\
971+ auto value = args[0 ];\
972+ auto pOtherArray = TryGetArray (value);\
973+ Guard ();\
974+ if (pOtherArray)\
975+ {\
976+ auto & otherArray = *pOtherArray;\
977+ array Op otherArray;\
978+ }\
979+ else if (value->IsNumber ())\
980+ {\
981+ double v = value->NumberValue ();\
982+ if (floor (v) == v)\
983+ {\
984+ array Op value->Int32Value ();\
985+ }\
986+ else if (isDouble)\
987+ {\
988+ array Op v;\
989+ }\
990+ else \
991+ {\
992+ array Op (float )v;\
993+ }\
994+ }\
995+ else if (value->IsObject ())\
996+ {\
997+ if (isDouble)\
998+ {\
999+ auto v = ToDComplex (value);\
1000+ array Op v;\
1001+ }\
1002+ else \
1003+ {\
1004+ auto v = ToFComplex (value);\
1005+ array Op v;\
1006+ }\
1007+ }\
1008+ else if (value->IsString ())\
1009+ {\
1010+ String::Utf8Value str (value);\
1011+ long long v = strtoll (*str, nullptr , 10 );\
1012+ array Op v;\
1013+ }\
1014+ else \
1015+ {\
1016+ return NAN_THROW_INVALID_ARGS ();\
1017+ }\
9761018 }\
977- else if (value-> IsNumber () )\
1019+ else if (args. Length () == 2 )\
9781020 {\
979- double v = value->NumberValue ();\
980- if (floor (v) == v)\
1021+ auto idx0 = ToIndex (args[0 ]);\
1022+ auto value = args[1 ];\
1023+ auto pOtherArray = TryGetArray (value);\
1024+ Guard ();\
1025+ if (pOtherArray)\
9811026 {\
982- Array Op value->Int32Value ();\
1027+ auto & otherArray = *pOtherArray;\
1028+ array (idx0) Op otherArray;\
9831029 }\
984- else if (isDouble)\
1030+ else if (value->IsNumber ())\
1031+ {\
1032+ double v = value->NumberValue ();\
1033+ if (floor (v) == v)\
1034+ {\
1035+ array (idx0) Op value->Int32Value ();\
1036+ }\
1037+ else if (isDouble)\
1038+ {\
1039+ array (idx0) Op v;\
1040+ }\
1041+ else \
1042+ {\
1043+ array (idx0) Op (float )v;\
1044+ }\
1045+ }\
1046+ else if (value->IsObject ())\
9851047 {\
986- Array Op v;\
1048+ if (isDouble)\
1049+ {\
1050+ auto v = ToDComplex (value);\
1051+ array (idx0) Op v;\
1052+ }\
1053+ else \
1054+ {\
1055+ auto v = ToFComplex (value);\
1056+ array (idx0) Op v;\
1057+ }\
1058+ }\
1059+ else if (value->IsString ())\
1060+ {\
1061+ String::Utf8Value str (value);\
1062+ long long v = strtoll (*str, nullptr , 10 );\
1063+ array (idx0) Op v;\
9871064 }\
9881065 else \
9891066 {\
990- Array Op ( float )v ;\
1067+ return NAN_THROW_INVALID_ARGS () ;\
9911068 }\
9921069 }\
993- else if (value-> IsObject () )\
1070+ else if (args. Length () == 3 )\
9941071 {\
995- if (isDouble)\
1072+ auto idx0 = ToIndex (args[0 ]);\
1073+ auto idx1 = ToIndex (args[1 ]);\
1074+ auto value = args[2 ];\
1075+ auto pOtherArray = TryGetArray (value);\
1076+ Guard ();\
1077+ if (pOtherArray)\
9961078 {\
997- auto v = ToDComplex (value);\
998- Array Op v;\
1079+ auto & otherArray = *pOtherArray;\
1080+ array (idx0, idx1) Op otherArray;\
1081+ }\
1082+ else if (value->IsNumber ())\
1083+ {\
1084+ double v = value->NumberValue ();\
1085+ if (floor (v) == v)\
1086+ {\
1087+ array (idx0, idx1) Op value->Int32Value ();\
1088+ }\
1089+ else if (isDouble)\
1090+ {\
1091+ array (idx0, idx1) Op v;\
1092+ }\
1093+ else \
1094+ {\
1095+ array (idx0, idx1) Op (float )v;\
1096+ }\
1097+ }\
1098+ else if (value->IsObject ())\
1099+ {\
1100+ if (isDouble)\
1101+ {\
1102+ auto v = ToDComplex (value);\
1103+ array (idx0, idx1) Op v;\
1104+ }\
1105+ else \
1106+ {\
1107+ auto v = ToFComplex (value);\
1108+ array (idx0, idx1) Op v;\
1109+ }\
1110+ }\
1111+ else if (value->IsString ())\
1112+ {\
1113+ String::Utf8Value str (value);\
1114+ long long v = strtoll (*str, nullptr , 10 );\
1115+ array (idx0, idx1) Op v;\
9991116 }\
10001117 else \
10011118 {\
1002- auto v = ToFComplex (value);\
1003- Array Op v;\
1119+ return NAN_THROW_INVALID_ARGS ();\
10041120 }\
10051121 }\
1006- else if (value-> IsString () )\
1122+ else if (args. Length () == 4 )\
10071123 {\
1008- String::Utf8Value str (value);\
1009- long long v = strtoll (*str, nullptr , 10 );\
1010- Array Op v;\
1124+ auto idx0 = ToIndex (args[0 ]);\
1125+ auto idx1 = ToIndex (args[1 ]);\
1126+ auto idx2 = ToIndex (args[2 ]);\
1127+ auto value = args[3 ];\
1128+ auto pOtherArray = TryGetArray (value);\
1129+ Guard ();\
1130+ if (pOtherArray)\
1131+ {\
1132+ auto & otherArray = *pOtherArray;\
1133+ array (idx0, idx1, idx2) Op otherArray;\
1134+ }\
1135+ else if (value->IsNumber ())\
1136+ {\
1137+ double v = value->NumberValue ();\
1138+ if (floor (v) == v)\
1139+ {\
1140+ array (idx0, idx1, idx2) Op value->Int32Value ();\
1141+ }\
1142+ else if (isDouble)\
1143+ {\
1144+ array (idx0, idx1, idx2) Op v;\
1145+ }\
1146+ else \
1147+ {\
1148+ array (idx0, idx1, idx2) Op (float )v;\
1149+ }\
1150+ }\
1151+ else if (value->IsObject ())\
1152+ {\
1153+ if (isDouble)\
1154+ {\
1155+ auto v = ToDComplex (value);\
1156+ array (idx0, idx1, idx2) Op v;\
1157+ }\
1158+ else \
1159+ {\
1160+ auto v = ToFComplex (value);\
1161+ array (idx0, idx1, idx2) Op v;\
1162+ }\
1163+ }\
1164+ else if (value->IsString ())\
1165+ {\
1166+ String::Utf8Value str (value);\
1167+ long long v = strtoll (*str, nullptr , 10 );\
1168+ array (idx0, idx1, idx2) Op v;\
1169+ }\
1170+ else \
1171+ {\
1172+ return NAN_THROW_INVALID_ARGS ();\
1173+ }\
10111174 }\
10121175 else \
10131176 {\
1014- return NAN_THROW_INVALID_ARGS ();\
1177+ auto idx0 = ToIndex (args[0 ]);\
1178+ auto idx1 = ToIndex (args[1 ]);\
1179+ auto idx2 = ToIndex (args[2 ]);\
1180+ auto idx3 = ToIndex (args[3 ]);\
1181+ auto value = args[4 ];\
1182+ auto pOtherArray = TryGetArray (value);\
1183+ Guard ();\
1184+ if (pOtherArray)\
1185+ {\
1186+ auto & otherArray = *pOtherArray;\
1187+ array (idx0, idx1, idx2, idx3) Op otherArray;\
1188+ }\
1189+ else if (value->IsNumber ())\
1190+ {\
1191+ double v = value->NumberValue ();\
1192+ if (floor (v) == v)\
1193+ {\
1194+ array (idx0, idx1, idx2, idx3) Op value->Int32Value ();\
1195+ }\
1196+ else if (isDouble)\
1197+ {\
1198+ array (idx0, idx1, idx2, idx3) Op v;\
1199+ }\
1200+ else \
1201+ {\
1202+ array (idx0, idx1, idx2, idx3) Op (float )v;\
1203+ }\
1204+ }\
1205+ else if (value->IsObject ())\
1206+ {\
1207+ if (isDouble)\
1208+ {\
1209+ auto v = ToDComplex (value);\
1210+ array (idx0, idx1, idx2, idx3) Op v;\
1211+ }\
1212+ else \
1213+ {\
1214+ auto v = ToFComplex (value);\
1215+ array (idx0, idx1, idx2, idx3) Op v;\
1216+ }\
1217+ }\
1218+ else if (value->IsString ())\
1219+ {\
1220+ String::Utf8Value str (value);\
1221+ long long v = strtoll (*str, nullptr , 10 );\
1222+ array (idx0, idx1, idx2, idx3) Op v;\
1223+ }\
1224+ else \
1225+ {\
1226+ return NAN_THROW_INVALID_ARGS ();\
1227+ }\
10151228 }\
10161229 \
10171230 NanReturnValue (args.This ());\
0 commit comments