OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1209 DATA_VIEW_GETTER(Int8, int8_t, NumberFromInt32) | 1209 DATA_VIEW_GETTER(Int8, int8_t, NumberFromInt32) |
1210 DATA_VIEW_GETTER(Uint16, uint16_t, NumberFromUint32) | 1210 DATA_VIEW_GETTER(Uint16, uint16_t, NumberFromUint32) |
1211 DATA_VIEW_GETTER(Int16, int16_t, NumberFromInt32) | 1211 DATA_VIEW_GETTER(Int16, int16_t, NumberFromInt32) |
1212 DATA_VIEW_GETTER(Uint32, uint32_t, NumberFromUint32) | 1212 DATA_VIEW_GETTER(Uint32, uint32_t, NumberFromUint32) |
1213 DATA_VIEW_GETTER(Int32, int32_t, NumberFromInt32) | 1213 DATA_VIEW_GETTER(Int32, int32_t, NumberFromInt32) |
1214 DATA_VIEW_GETTER(Float32, float, NumberFromDouble) | 1214 DATA_VIEW_GETTER(Float32, float, NumberFromDouble) |
1215 DATA_VIEW_GETTER(Float64, double, NumberFromDouble) | 1215 DATA_VIEW_GETTER(Float64, double, NumberFromDouble) |
1216 | 1216 |
1217 #undef DATA_VIEW_GETTER | 1217 #undef DATA_VIEW_GETTER |
1218 | 1218 |
| 1219 |
| 1220 template <typename T> |
| 1221 static T DataViewConvertValue(double value); |
| 1222 |
| 1223 |
| 1224 template <> |
| 1225 int8_t DataViewConvertValue<int8_t>(double value) { |
| 1226 return static_cast<int8_t>(DoubleToInt32(value)); |
| 1227 } |
| 1228 |
| 1229 |
| 1230 template <> |
| 1231 int16_t DataViewConvertValue<int16_t>(double value) { |
| 1232 return static_cast<int16_t>(DoubleToInt32(value)); |
| 1233 } |
| 1234 |
| 1235 |
| 1236 template <> |
| 1237 int32_t DataViewConvertValue<int32_t>(double value) { |
| 1238 return DoubleToInt32(value); |
| 1239 } |
| 1240 |
| 1241 |
| 1242 template <> |
| 1243 uint8_t DataViewConvertValue<uint8_t>(double value) { |
| 1244 return static_cast<uint8_t>(DoubleToUint32(value)); |
| 1245 } |
| 1246 |
| 1247 |
| 1248 template <> |
| 1249 uint16_t DataViewConvertValue<uint16_t>(double value) { |
| 1250 return static_cast<uint16_t>(DoubleToUint32(value)); |
| 1251 } |
| 1252 |
| 1253 |
| 1254 template <> |
| 1255 uint32_t DataViewConvertValue<uint32_t>(double value) { |
| 1256 return DoubleToUint32(value); |
| 1257 } |
| 1258 |
| 1259 |
| 1260 template <> |
| 1261 float DataViewConvertValue<float>(double value) { |
| 1262 return static_cast<float>(value); |
| 1263 } |
| 1264 |
| 1265 |
| 1266 template <> |
| 1267 double DataViewConvertValue<double>(double value) { |
| 1268 return value; |
| 1269 } |
| 1270 |
| 1271 |
1219 #define DATA_VIEW_SETTER(TypeName, Type) \ | 1272 #define DATA_VIEW_SETTER(TypeName, Type) \ |
1220 RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSet##TypeName) { \ | 1273 RUNTIME_FUNCTION(MaybeObject*, Runtime_DataViewSet##TypeName) { \ |
1221 HandleScope scope(isolate); \ | 1274 HandleScope scope(isolate); \ |
1222 ASSERT(args.length() == 4); \ | 1275 ASSERT(args.length() == 4); \ |
1223 CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); \ | 1276 CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); \ |
1224 CONVERT_ARG_HANDLE_CHECKED(Object, offset, 1); \ | 1277 CONVERT_ARG_HANDLE_CHECKED(Object, offset, 1); \ |
1225 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); \ | 1278 CONVERT_ARG_HANDLE_CHECKED(Object, value, 2); \ |
1226 CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 3); \ | 1279 CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 3); \ |
1227 Type v = static_cast<Type>(value->Number()); \ | 1280 Type v = DataViewConvertValue<Type>(value->Number()); \ |
1228 if (DataViewSetValue( \ | 1281 if (DataViewSetValue( \ |
1229 isolate, holder, offset, is_little_endian, v)) { \ | 1282 isolate, holder, offset, is_little_endian, v)) { \ |
1230 return isolate->heap()->undefined_value(); \ | 1283 return isolate->heap()->undefined_value(); \ |
1231 } else { \ | 1284 } else { \ |
1232 return isolate->Throw(*isolate->factory()->NewRangeError( \ | 1285 return isolate->Throw(*isolate->factory()->NewRangeError( \ |
1233 "invalid_data_view_accessor_offset", \ | 1286 "invalid_data_view_accessor_offset", \ |
1234 HandleVector<Object>(NULL, 0))); \ | 1287 HandleVector<Object>(NULL, 0))); \ |
1235 } \ | 1288 } \ |
1236 } | 1289 } |
1237 | 1290 |
(...skipping 12800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14038 // Handle last resort GC and make sure to allow future allocations | 14091 // Handle last resort GC and make sure to allow future allocations |
14039 // to grow the heap without causing GCs (if possible). | 14092 // to grow the heap without causing GCs (if possible). |
14040 isolate->counters()->gc_last_resort_from_js()->Increment(); | 14093 isolate->counters()->gc_last_resort_from_js()->Increment(); |
14041 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 14094 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
14042 "Runtime::PerformGC"); | 14095 "Runtime::PerformGC"); |
14043 } | 14096 } |
14044 } | 14097 } |
14045 | 14098 |
14046 | 14099 |
14047 } } // namespace v8::internal | 14100 } } // namespace v8::internal |
OLD | NEW |