@@ -884,15 +884,15 @@ NAN_METHOD(ArrayWrapper::At)
884
884
885
885
Guard ();
886
886
887
- if (args.Length () < 2 )
887
+ if (args.Length () == 1 )
888
888
{
889
889
NanReturnValue (New (GetArray (args.This ())->operator ()(ToIndex (args[0 ]))));
890
890
}
891
- else if (args.Length () < 3 )
891
+ else if (args.Length () == 2 )
892
892
{
893
893
NanReturnValue (New (GetArray (args.This ())->operator ()(ToIndex (args[0 ]), ToIndex (args[1 ]))));
894
894
}
895
- else if (args.Length () < 4 )
895
+ else if (args.Length () == 3 )
896
896
{
897
897
NanReturnValue (New (GetArray (args.This ())->operator ()(ToIndex (args[0 ]), ToIndex (args[1 ]), ToIndex (args[2 ]))));
898
898
}
@@ -963,55 +963,268 @@ NAN_METHOD(ArrayWrapper::F)\
963
963
try \
964
964
{\
965
965
auto pArray = GetArray (args.This ());\
966
- auto & Array = *pArray;\
967
- bool isDouble = NeedsDouble (Array );\
966
+ auto & array = *pArray;\
967
+ bool isDouble = NeedsDouble (array );\
968
968
ARGS_LEN (1 )\
969
- auto value = args[0 ];\
970
- auto pOtherArray = TryGetArray (value);\
971
- Guard ();\
972
- if (pOtherArray)\
969
+ if (args.Length () == 1 )\
973
970
{\
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
+ }\
976
1018
}\
977
- else if (value-> IsNumber () )\
1019
+ else if (args. Length () == 2 )\
978
1020
{\
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)\
981
1026
{\
982
- Array Op value->Int32Value ();\
1027
+ auto & otherArray = *pOtherArray;\
1028
+ array (idx0) Op otherArray;\
983
1029
}\
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 ())\
985
1047
{\
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;\
987
1064
}\
988
1065
else \
989
1066
{\
990
- Array Op ( float )v ;\
1067
+ return NAN_THROW_INVALID_ARGS () ;\
991
1068
}\
992
1069
}\
993
- else if (value-> IsObject () )\
1070
+ else if (args. Length () == 3 )\
994
1071
{\
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)\
996
1078
{\
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;\
999
1116
}\
1000
1117
else \
1001
1118
{\
1002
- auto v = ToFComplex (value);\
1003
- Array Op v;\
1119
+ return NAN_THROW_INVALID_ARGS ();\
1004
1120
}\
1005
1121
}\
1006
- else if (value-> IsString () )\
1122
+ else if (args. Length () == 4 )\
1007
1123
{\
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
+ }\
1011
1174
}\
1012
1175
else \
1013
1176
{\
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
+ }\
1015
1228
}\
1016
1229
\
1017
1230
NanReturnValue (args.This ());\
0 commit comments