Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: src/runtime.cc

Issue 516913003: Do not expose termination exceptions to the Exception API. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: address comment Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/parser.cc ('k') | src/scopes.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <limits> 6 #include <limits>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 HandleScope scope(isolate); 842 HandleScope scope(isolate);
843 DCHECK(args.length() == 2); 843 DCHECK(args.length() == 2);
844 CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, holder, 0); 844 CONVERT_ARG_HANDLE_CHECKED(JSArrayBuffer, holder, 0);
845 CONVERT_NUMBER_ARG_HANDLE_CHECKED(byteLength, 1); 845 CONVERT_NUMBER_ARG_HANDLE_CHECKED(byteLength, 1);
846 if (!holder->byte_length()->IsUndefined()) { 846 if (!holder->byte_length()->IsUndefined()) {
847 // ArrayBuffer is already initialized; probably a fuzz test. 847 // ArrayBuffer is already initialized; probably a fuzz test.
848 return *holder; 848 return *holder;
849 } 849 }
850 size_t allocated_length = 0; 850 size_t allocated_length = 0;
851 if (!TryNumberToSize(isolate, *byteLength, &allocated_length)) { 851 if (!TryNumberToSize(isolate, *byteLength, &allocated_length)) {
852 return isolate->Throw( 852 THROW_NEW_ERROR_RETURN_FAILURE(
853 *isolate->factory()->NewRangeError("invalid_array_buffer_length", 853 isolate, NewRangeError("invalid_array_buffer_length",
854 HandleVector<Object>(NULL, 0))); 854 HandleVector<Object>(NULL, 0)));
855 } 855 }
856 if (!Runtime::SetupArrayBufferAllocatingData(isolate, 856 if (!Runtime::SetupArrayBufferAllocatingData(isolate,
857 holder, allocated_length)) { 857 holder, allocated_length)) {
858 return isolate->Throw( 858 THROW_NEW_ERROR_RETURN_FAILURE(
859 *isolate->factory()->NewRangeError("invalid_array_buffer_length", 859 isolate, NewRangeError("invalid_array_buffer_length",
860 HandleVector<Object>(NULL, 0))); 860 HandleVector<Object>(NULL, 0)));
861 } 861 }
862 return *holder; 862 return *holder;
863 } 863 }
864 864
865 865
866 RUNTIME_FUNCTION(Runtime_ArrayBufferGetByteLength) { 866 RUNTIME_FUNCTION(Runtime_ArrayBufferGetByteLength) {
867 SealHandleScope shs(isolate); 867 SealHandleScope shs(isolate);
868 DCHECK(args.length() == 1); 868 DCHECK(args.length() == 1);
869 CONVERT_ARG_CHECKED(JSArrayBuffer, holder, 0); 869 CONVERT_ARG_CHECKED(JSArrayBuffer, holder, 0);
870 return holder->byte_length(); 870 return holder->byte_length();
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 RUNTIME_ASSERT(byte_offset <= array_buffer_byte_length); 980 RUNTIME_ASSERT(byte_offset <= array_buffer_byte_length);
981 RUNTIME_ASSERT(array_buffer_byte_length - byte_offset >= byte_length); 981 RUNTIME_ASSERT(array_buffer_byte_length - byte_offset >= byte_length);
982 } else { 982 } else {
983 RUNTIME_ASSERT(maybe_buffer->IsNull()); 983 RUNTIME_ASSERT(maybe_buffer->IsNull());
984 } 984 }
985 985
986 RUNTIME_ASSERT(byte_length % element_size == 0); 986 RUNTIME_ASSERT(byte_length % element_size == 0);
987 size_t length = byte_length / element_size; 987 size_t length = byte_length / element_size;
988 988
989 if (length > static_cast<unsigned>(Smi::kMaxValue)) { 989 if (length > static_cast<unsigned>(Smi::kMaxValue)) {
990 return isolate->Throw( 990 THROW_NEW_ERROR_RETURN_FAILURE(
991 *isolate->factory()->NewRangeError("invalid_typed_array_length", 991 isolate, NewRangeError("invalid_typed_array_length",
992 HandleVector<Object>(NULL, 0))); 992 HandleVector<Object>(NULL, 0)));
993 } 993 }
994 994
995 // All checks are done, now we can modify objects. 995 // All checks are done, now we can modify objects.
996 996
997 DCHECK(holder->GetInternalFieldCount() == 997 DCHECK(holder->GetInternalFieldCount() ==
998 v8::ArrayBufferView::kInternalFieldCount); 998 v8::ArrayBufferView::kInternalFieldCount);
999 for (int i = 0; i < v8::ArrayBufferView::kInternalFieldCount; i++) { 999 for (int i = 0; i < v8::ArrayBufferView::kInternalFieldCount; i++) {
1000 holder->SetInternalField(i, Smi::FromInt(0)); 1000 holder->SetInternalField(i, Smi::FromInt(0));
1001 } 1001 }
1002 Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length); 1002 Handle<Object> length_obj = isolate->factory()->NewNumberFromSize(length);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer(); 1062 Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer();
1063 if (source->IsJSTypedArray() && 1063 if (source->IsJSTypedArray() &&
1064 JSTypedArray::cast(*source)->type() == array_type) { 1064 JSTypedArray::cast(*source)->type() == array_type) {
1065 length_obj = Handle<Object>(JSTypedArray::cast(*source)->length(), isolate); 1065 length_obj = Handle<Object>(JSTypedArray::cast(*source)->length(), isolate);
1066 } 1066 }
1067 size_t length = 0; 1067 size_t length = 0;
1068 RUNTIME_ASSERT(TryNumberToSize(isolate, *length_obj, &length)); 1068 RUNTIME_ASSERT(TryNumberToSize(isolate, *length_obj, &length));
1069 1069
1070 if ((length > static_cast<unsigned>(Smi::kMaxValue)) || 1070 if ((length > static_cast<unsigned>(Smi::kMaxValue)) ||
1071 (length > (kMaxInt / element_size))) { 1071 (length > (kMaxInt / element_size))) {
1072 return isolate->Throw(*isolate->factory()-> 1072 THROW_NEW_ERROR_RETURN_FAILURE(
1073 NewRangeError("invalid_typed_array_length", 1073 isolate, NewRangeError("invalid_typed_array_length",
1074 HandleVector<Object>(NULL, 0))); 1074 HandleVector<Object>(NULL, 0)));
1075 } 1075 }
1076 size_t byte_length = length * element_size; 1076 size_t byte_length = length * element_size;
1077 1077
1078 DCHECK(holder->GetInternalFieldCount() == 1078 DCHECK(holder->GetInternalFieldCount() ==
1079 v8::ArrayBufferView::kInternalFieldCount); 1079 v8::ArrayBufferView::kInternalFieldCount);
1080 for (int i = 0; i < v8::ArrayBufferView::kInternalFieldCount; i++) { 1080 for (int i = 0; i < v8::ArrayBufferView::kInternalFieldCount; i++) {
1081 holder->SetInternalField(i, Smi::FromInt(0)); 1081 holder->SetInternalField(i, Smi::FromInt(0));
1082 } 1082 }
1083 1083
1084 // NOTE: not initializing backing store. 1084 // NOTE: not initializing backing store.
1085 // We assume that the caller of this function will initialize holder 1085 // We assume that the caller of this function will initialize holder
1086 // with the loop 1086 // with the loop
1087 // for(i = 0; i < length; i++) { holder[i] = source[i]; } 1087 // for(i = 0; i < length; i++) { holder[i] = source[i]; }
1088 // We assume that the caller of this function is always a typed array 1088 // We assume that the caller of this function is always a typed array
1089 // constructor. 1089 // constructor.
1090 // If source is a typed array, this loop will always run to completion, 1090 // If source is a typed array, this loop will always run to completion,
1091 // so we are sure that the backing store will be initialized. 1091 // so we are sure that the backing store will be initialized.
1092 // Otherwise, the indexing operation might throw, so the loop will not 1092 // Otherwise, the indexing operation might throw, so the loop will not
1093 // run to completion and the typed array might remain partly initialized. 1093 // run to completion and the typed array might remain partly initialized.
1094 // However we further assume that the caller of this function is a typed array 1094 // However we further assume that the caller of this function is a typed array
1095 // constructor, and the exception will propagate out of the constructor, 1095 // constructor, and the exception will propagate out of the constructor,
1096 // therefore uninitialized memory will not be accessible by a user program. 1096 // therefore uninitialized memory will not be accessible by a user program.
1097 // 1097 //
1098 // TODO(dslomov): revise this once we support subclassing. 1098 // TODO(dslomov): revise this once we support subclassing.
1099 1099
1100 if (!Runtime::SetupArrayBufferAllocatingData( 1100 if (!Runtime::SetupArrayBufferAllocatingData(
1101 isolate, buffer, byte_length, false)) { 1101 isolate, buffer, byte_length, false)) {
1102 return isolate->Throw(*isolate->factory()-> 1102 THROW_NEW_ERROR_RETURN_FAILURE(
1103 NewRangeError("invalid_array_buffer_length", 1103 isolate, NewRangeError("invalid_array_buffer_length",
1104 HandleVector<Object>(NULL, 0))); 1104 HandleVector<Object>(NULL, 0)));
1105 } 1105 }
1106 1106
1107 holder->set_buffer(*buffer); 1107 holder->set_buffer(*buffer);
1108 holder->set_byte_offset(Smi::FromInt(0)); 1108 holder->set_byte_offset(Smi::FromInt(0));
1109 Handle<Object> byte_length_obj( 1109 Handle<Object> byte_length_obj(
1110 isolate->factory()->NewNumberFromSize(byte_length)); 1110 isolate->factory()->NewNumberFromSize(byte_length));
1111 holder->set_byte_length(*byte_length_obj); 1111 holder->set_byte_length(*byte_length_obj);
1112 holder->set_length(*length_obj); 1112 holder->set_length(*length_obj);
1113 holder->set_weak_next(buffer->weak_first_view()); 1113 holder->set_weak_next(buffer->weak_first_view());
1114 buffer->set_weak_first_view(*holder); 1114 buffer->set_weak_first_view(*holder);
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1176 // Set from typed array of the different type, non-overlapping. 1176 // Set from typed array of the different type, non-overlapping.
1177 TYPED_ARRAY_SET_TYPED_ARRAY_NONOVERLAPPING = 2, 1177 TYPED_ARRAY_SET_TYPED_ARRAY_NONOVERLAPPING = 2,
1178 // Set from non-typed array. 1178 // Set from non-typed array.
1179 TYPED_ARRAY_SET_NON_TYPED_ARRAY = 3 1179 TYPED_ARRAY_SET_NON_TYPED_ARRAY = 3
1180 }; 1180 };
1181 1181
1182 1182
1183 RUNTIME_FUNCTION(Runtime_TypedArraySetFastCases) { 1183 RUNTIME_FUNCTION(Runtime_TypedArraySetFastCases) {
1184 HandleScope scope(isolate); 1184 HandleScope scope(isolate);
1185 DCHECK(args.length() == 3); 1185 DCHECK(args.length() == 3);
1186 if (!args[0]->IsJSTypedArray()) 1186 if (!args[0]->IsJSTypedArray()) {
1187 return isolate->Throw(*isolate->factory()->NewTypeError( 1187 THROW_NEW_ERROR_RETURN_FAILURE(
1188 "not_typed_array", HandleVector<Object>(NULL, 0))); 1188 isolate,
1189 NewTypeError("not_typed_array", HandleVector<Object>(NULL, 0)));
1190 }
1189 1191
1190 if (!args[1]->IsJSTypedArray()) 1192 if (!args[1]->IsJSTypedArray())
1191 return Smi::FromInt(TYPED_ARRAY_SET_NON_TYPED_ARRAY); 1193 return Smi::FromInt(TYPED_ARRAY_SET_NON_TYPED_ARRAY);
1192 1194
1193 CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, target_obj, 0); 1195 CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, target_obj, 0);
1194 CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, source_obj, 1); 1196 CONVERT_ARG_HANDLE_CHECKED(JSTypedArray, source_obj, 1);
1195 CONVERT_NUMBER_ARG_HANDLE_CHECKED(offset_obj, 2); 1197 CONVERT_NUMBER_ARG_HANDLE_CHECKED(offset_obj, 2);
1196 1198
1197 Handle<JSTypedArray> target(JSTypedArray::cast(*target_obj)); 1199 Handle<JSTypedArray> target(JSTypedArray::cast(*target_obj));
1198 Handle<JSTypedArray> source(JSTypedArray::cast(*source_obj)); 1200 Handle<JSTypedArray> source(JSTypedArray::cast(*source_obj));
1199 size_t offset = 0; 1201 size_t offset = 0;
1200 RUNTIME_ASSERT(TryNumberToSize(isolate, *offset_obj, &offset)); 1202 RUNTIME_ASSERT(TryNumberToSize(isolate, *offset_obj, &offset));
1201 size_t target_length = NumberToSize(isolate, target->length()); 1203 size_t target_length = NumberToSize(isolate, target->length());
1202 size_t source_length = NumberToSize(isolate, source->length()); 1204 size_t source_length = NumberToSize(isolate, source->length());
1203 size_t target_byte_length = NumberToSize(isolate, target->byte_length()); 1205 size_t target_byte_length = NumberToSize(isolate, target->byte_length());
1204 size_t source_byte_length = NumberToSize(isolate, source->byte_length()); 1206 size_t source_byte_length = NumberToSize(isolate, source->byte_length());
1205 if (offset > target_length || 1207 if (offset > target_length || offset + source_length > target_length ||
1206 offset + source_length > target_length || 1208 offset + source_length < offset) { // overflow
1207 offset + source_length < offset) // overflow 1209 THROW_NEW_ERROR_RETURN_FAILURE(
1208 return isolate->Throw(*isolate->factory()->NewRangeError( 1210 isolate, NewRangeError("typed_array_set_source_too_large",
1209 "typed_array_set_source_too_large", HandleVector<Object>(NULL, 0))); 1211 HandleVector<Object>(NULL, 0)));
1212 }
1210 1213
1211 size_t target_offset = NumberToSize(isolate, target->byte_offset()); 1214 size_t target_offset = NumberToSize(isolate, target->byte_offset());
1212 size_t source_offset = NumberToSize(isolate, source->byte_offset()); 1215 size_t source_offset = NumberToSize(isolate, source->byte_offset());
1213 uint8_t* target_base = 1216 uint8_t* target_base =
1214 static_cast<uint8_t*>( 1217 static_cast<uint8_t*>(
1215 target->GetBuffer()->backing_store()) + target_offset; 1218 target->GetBuffer()->backing_store()) + target_offset;
1216 uint8_t* source_base = 1219 uint8_t* source_base =
1217 static_cast<uint8_t*>( 1220 static_cast<uint8_t*>(
1218 source->GetBuffer()->backing_store()) + source_offset; 1221 source->GetBuffer()->backing_store()) + source_offset;
1219 1222
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1394 static_cast<uint8_t*>(buffer->backing_store()) + buffer_offset; 1397 static_cast<uint8_t*>(buffer->backing_store()) + buffer_offset;
1395 if (NeedToFlipBytes(is_little_endian)) { 1398 if (NeedToFlipBytes(is_little_endian)) {
1396 FlipBytes<sizeof(T)>(target, value.bytes); 1399 FlipBytes<sizeof(T)>(target, value.bytes);
1397 } else { 1400 } else {
1398 CopyBytes<sizeof(T)>(target, value.bytes); 1401 CopyBytes<sizeof(T)>(target, value.bytes);
1399 } 1402 }
1400 return true; 1403 return true;
1401 } 1404 }
1402 1405
1403 1406
1404 #define DATA_VIEW_GETTER(TypeName, Type, Converter) \ 1407 #define DATA_VIEW_GETTER(TypeName, Type, Converter) \
1405 RUNTIME_FUNCTION(Runtime_DataViewGet##TypeName) { \ 1408 RUNTIME_FUNCTION(Runtime_DataViewGet##TypeName) { \
1406 HandleScope scope(isolate); \ 1409 HandleScope scope(isolate); \
1407 DCHECK(args.length() == 3); \ 1410 DCHECK(args.length() == 3); \
1408 CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); \ 1411 CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); \
1409 CONVERT_NUMBER_ARG_HANDLE_CHECKED(offset, 1); \ 1412 CONVERT_NUMBER_ARG_HANDLE_CHECKED(offset, 1); \
1410 CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 2); \ 1413 CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 2); \
1411 Type result; \ 1414 Type result; \
1412 if (DataViewGetValue( \ 1415 if (DataViewGetValue(isolate, holder, offset, is_little_endian, \
1413 isolate, holder, offset, is_little_endian, &result)) { \ 1416 &result)) { \
1414 return *isolate->factory()->Converter(result); \ 1417 return *isolate->factory()->Converter(result); \
1415 } else { \ 1418 } else { \
1416 return isolate->Throw(*isolate->factory()->NewRangeError( \ 1419 THROW_NEW_ERROR_RETURN_FAILURE( \
1417 "invalid_data_view_accessor_offset", \ 1420 isolate, NewRangeError("invalid_data_view_accessor_offset", \
1418 HandleVector<Object>(NULL, 0))); \ 1421 HandleVector<Object>(NULL, 0))); \
1419 } \ 1422 } \
1420 } 1423 }
1421 1424
1422 DATA_VIEW_GETTER(Uint8, uint8_t, NewNumberFromUint) 1425 DATA_VIEW_GETTER(Uint8, uint8_t, NewNumberFromUint)
1423 DATA_VIEW_GETTER(Int8, int8_t, NewNumberFromInt) 1426 DATA_VIEW_GETTER(Int8, int8_t, NewNumberFromInt)
1424 DATA_VIEW_GETTER(Uint16, uint16_t, NewNumberFromUint) 1427 DATA_VIEW_GETTER(Uint16, uint16_t, NewNumberFromUint)
1425 DATA_VIEW_GETTER(Int16, int16_t, NewNumberFromInt) 1428 DATA_VIEW_GETTER(Int16, int16_t, NewNumberFromInt)
1426 DATA_VIEW_GETTER(Uint32, uint32_t, NewNumberFromUint) 1429 DATA_VIEW_GETTER(Uint32, uint32_t, NewNumberFromUint)
1427 DATA_VIEW_GETTER(Int32, int32_t, NewNumberFromInt) 1430 DATA_VIEW_GETTER(Int32, int32_t, NewNumberFromInt)
1428 DATA_VIEW_GETTER(Float32, float, NewNumber) 1431 DATA_VIEW_GETTER(Float32, float, NewNumber)
1429 DATA_VIEW_GETTER(Float64, double, NewNumber) 1432 DATA_VIEW_GETTER(Float64, double, NewNumber)
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1476 return static_cast<float>(value); 1479 return static_cast<float>(value);
1477 } 1480 }
1478 1481
1479 1482
1480 template <> 1483 template <>
1481 double DataViewConvertValue<double>(double value) { 1484 double DataViewConvertValue<double>(double value) {
1482 return value; 1485 return value;
1483 } 1486 }
1484 1487
1485 1488
1486 #define DATA_VIEW_SETTER(TypeName, Type) \ 1489 #define DATA_VIEW_SETTER(TypeName, Type) \
1487 RUNTIME_FUNCTION(Runtime_DataViewSet##TypeName) { \ 1490 RUNTIME_FUNCTION(Runtime_DataViewSet##TypeName) { \
1488 HandleScope scope(isolate); \ 1491 HandleScope scope(isolate); \
1489 DCHECK(args.length() == 4); \ 1492 DCHECK(args.length() == 4); \
1490 CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); \ 1493 CONVERT_ARG_HANDLE_CHECKED(JSDataView, holder, 0); \
1491 CONVERT_NUMBER_ARG_HANDLE_CHECKED(offset, 1); \ 1494 CONVERT_NUMBER_ARG_HANDLE_CHECKED(offset, 1); \
1492 CONVERT_NUMBER_ARG_HANDLE_CHECKED(value, 2); \ 1495 CONVERT_NUMBER_ARG_HANDLE_CHECKED(value, 2); \
1493 CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 3); \ 1496 CONVERT_BOOLEAN_ARG_CHECKED(is_little_endian, 3); \
1494 Type v = DataViewConvertValue<Type>(value->Number()); \ 1497 Type v = DataViewConvertValue<Type>(value->Number()); \
1495 if (DataViewSetValue( \ 1498 if (DataViewSetValue(isolate, holder, offset, is_little_endian, v)) { \
1496 isolate, holder, offset, is_little_endian, v)) { \ 1499 return isolate->heap()->undefined_value(); \
1497 return isolate->heap()->undefined_value(); \ 1500 } else { \
1498 } else { \ 1501 THROW_NEW_ERROR_RETURN_FAILURE( \
1499 return isolate->Throw(*isolate->factory()->NewRangeError( \ 1502 isolate, NewRangeError("invalid_data_view_accessor_offset", \
1500 "invalid_data_view_accessor_offset", \ 1503 HandleVector<Object>(NULL, 0))); \
1501 HandleVector<Object>(NULL, 0))); \ 1504 } \
1502 } \
1503 } 1505 }
1504 1506
1505 DATA_VIEW_SETTER(Uint8, uint8_t) 1507 DATA_VIEW_SETTER(Uint8, uint8_t)
1506 DATA_VIEW_SETTER(Int8, int8_t) 1508 DATA_VIEW_SETTER(Int8, int8_t)
1507 DATA_VIEW_SETTER(Uint16, uint16_t) 1509 DATA_VIEW_SETTER(Uint16, uint16_t)
1508 DATA_VIEW_SETTER(Int16, int16_t) 1510 DATA_VIEW_SETTER(Int16, int16_t)
1509 DATA_VIEW_SETTER(Uint32, uint32_t) 1511 DATA_VIEW_SETTER(Uint32, uint32_t)
1510 DATA_VIEW_SETTER(Int32, int32_t) 1512 DATA_VIEW_SETTER(Int32, int32_t)
1511 DATA_VIEW_SETTER(Float32, float) 1513 DATA_VIEW_SETTER(Float32, float)
1512 DATA_VIEW_SETTER(Float64, double) 1514 DATA_VIEW_SETTER(Float64, double)
(...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after
2160 Handle<Map> new_map = Map::Copy(old_map); 2162 Handle<Map> new_map = Map::Copy(old_map);
2161 new_map->set_is_access_check_needed(true); 2163 new_map->set_is_access_check_needed(true);
2162 JSObject::MigrateToMap(object, new_map); 2164 JSObject::MigrateToMap(object, new_map);
2163 return isolate->heap()->undefined_value(); 2165 return isolate->heap()->undefined_value();
2164 } 2166 }
2165 2167
2166 2168
2167 static Object* ThrowRedeclarationError(Isolate* isolate, Handle<String> name) { 2169 static Object* ThrowRedeclarationError(Isolate* isolate, Handle<String> name) {
2168 HandleScope scope(isolate); 2170 HandleScope scope(isolate);
2169 Handle<Object> args[1] = { name }; 2171 Handle<Object> args[1] = { name };
2170 Handle<Object> error = isolate->factory()->NewTypeError( 2172 THROW_NEW_ERROR_RETURN_FAILURE(
2171 "var_redeclaration", HandleVector(args, 1)); 2173 isolate, NewTypeError("var_redeclaration", HandleVector(args, 1)));
2172 return isolate->Throw(*error);
2173 } 2174 }
2174 2175
2175 2176
2176 // May throw a RedeclarationError. 2177 // May throw a RedeclarationError.
2177 static Object* DeclareGlobals(Isolate* isolate, Handle<GlobalObject> global, 2178 static Object* DeclareGlobals(Isolate* isolate, Handle<GlobalObject> global,
2178 Handle<String> name, Handle<Object> value, 2179 Handle<String> name, Handle<Object> value,
2179 PropertyAttributes attr, bool is_var, 2180 PropertyAttributes attr, bool is_var,
2180 bool is_const, bool is_function) { 2181 bool is_const, bool is_function) {
2181 // Do the lookup own properties only, see ES5 erratum. 2182 // Do the lookup own properties only, see ES5 erratum.
2182 LookupIterator it(global, name, LookupIterator::HIDDEN_PROPERTY); 2183 LookupIterator it(global, name, LookupIterator::HIDDEN_PROPERTY);
(...skipping 885 matching lines...) Expand 10 before | Expand all | Expand 10 after
3068 3069
3069 3070
3070 RUNTIME_FUNCTION(Runtime_ThrowGeneratorStateError) { 3071 RUNTIME_FUNCTION(Runtime_ThrowGeneratorStateError) {
3071 HandleScope scope(isolate); 3072 HandleScope scope(isolate);
3072 DCHECK(args.length() == 1); 3073 DCHECK(args.length() == 1);
3073 CONVERT_ARG_HANDLE_CHECKED(JSGeneratorObject, generator, 0); 3074 CONVERT_ARG_HANDLE_CHECKED(JSGeneratorObject, generator, 0);
3074 int continuation = generator->continuation(); 3075 int continuation = generator->continuation();
3075 const char* message = continuation == JSGeneratorObject::kGeneratorClosed ? 3076 const char* message = continuation == JSGeneratorObject::kGeneratorClosed ?
3076 "generator_finished" : "generator_running"; 3077 "generator_finished" : "generator_running";
3077 Vector< Handle<Object> > argv = HandleVector<Object>(NULL, 0); 3078 Vector< Handle<Object> > argv = HandleVector<Object>(NULL, 0);
3078 Handle<Object> error = isolate->factory()->NewError(message, argv); 3079 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewError(message, argv));
3079 return isolate->Throw(*error);
3080 } 3080 }
3081 3081
3082 3082
3083 RUNTIME_FUNCTION(Runtime_ObjectFreeze) { 3083 RUNTIME_FUNCTION(Runtime_ObjectFreeze) {
3084 HandleScope scope(isolate); 3084 HandleScope scope(isolate);
3085 DCHECK(args.length() == 1); 3085 DCHECK(args.length() == 1);
3086 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0); 3086 CONVERT_ARG_HANDLE_CHECKED(JSObject, object, 0);
3087 3087
3088 // %ObjectFreeze is a fast path and these cases are handled elsewhere. 3088 // %ObjectFreeze is a fast path and these cases are handled elsewhere.
3089 RUNTIME_ASSERT(!object->HasSloppyArgumentsElements() && 3089 RUNTIME_ASSERT(!object->HasSloppyArgumentsElements() &&
(...skipping 1716 matching lines...) Expand 10 before | Expand all | Expand 10 after
4806 if (!maybe.has_value) return MaybeHandle<Object>(); 4806 if (!maybe.has_value) return MaybeHandle<Object>();
4807 return isolate->factory()->ToBoolean(maybe.value); 4807 return isolate->factory()->ToBoolean(maybe.value);
4808 } 4808 }
4809 4809
4810 4810
4811 MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate, 4811 MaybeHandle<Object> Runtime::GetObjectProperty(Isolate* isolate,
4812 Handle<Object> object, 4812 Handle<Object> object,
4813 Handle<Object> key) { 4813 Handle<Object> key) {
4814 if (object->IsUndefined() || object->IsNull()) { 4814 if (object->IsUndefined() || object->IsNull()) {
4815 Handle<Object> args[2] = { key, object }; 4815 Handle<Object> args[2] = { key, object };
4816 return isolate->Throw<Object>( 4816 THROW_NEW_ERROR(isolate, NewTypeError("non_object_property_load",
4817 isolate->factory()->NewTypeError("non_object_property_load", 4817 HandleVector(args, 2)),
4818 HandleVector(args, 2))); 4818 Object);
4819 } 4819 }
4820 4820
4821 // Check if the given key is an array index. 4821 // Check if the given key is an array index.
4822 uint32_t index; 4822 uint32_t index;
4823 if (key->ToArrayIndex(&index)) { 4823 if (key->ToArrayIndex(&index)) {
4824 return GetElementOrCharAt(isolate, object, index); 4824 return GetElementOrCharAt(isolate, object, index);
4825 } 4825 }
4826 4826
4827 // Convert the key to a name - possibly by calling back into JavaScript. 4827 // Convert the key to a name - possibly by calling back into JavaScript.
4828 Handle<Name> name; 4828 Handle<Name> name;
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
5081 } 5081 }
5082 5082
5083 5083
5084 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate, 5084 MaybeHandle<Object> Runtime::SetObjectProperty(Isolate* isolate,
5085 Handle<Object> object, 5085 Handle<Object> object,
5086 Handle<Object> key, 5086 Handle<Object> key,
5087 Handle<Object> value, 5087 Handle<Object> value,
5088 StrictMode strict_mode) { 5088 StrictMode strict_mode) {
5089 if (object->IsUndefined() || object->IsNull()) { 5089 if (object->IsUndefined() || object->IsNull()) {
5090 Handle<Object> args[2] = { key, object }; 5090 Handle<Object> args[2] = { key, object };
5091 Handle<Object> error = 5091 THROW_NEW_ERROR(isolate, NewTypeError("non_object_property_store",
5092 isolate->factory()->NewTypeError("non_object_property_store", 5092 HandleVector(args, 2)),
5093 HandleVector(args, 2)); 5093 Object);
5094 return isolate->Throw<Object>(error);
5095 } 5094 }
5096 5095
5097 if (object->IsJSProxy()) { 5096 if (object->IsJSProxy()) {
5098 Handle<Object> name_object; 5097 Handle<Object> name_object;
5099 if (key->IsSymbol()) { 5098 if (key->IsSymbol()) {
5100 name_object = key; 5099 name_object = key;
5101 } else { 5100 } else {
5102 ASSIGN_RETURN_ON_EXCEPTION( 5101 ASSIGN_RETURN_ON_EXCEPTION(
5103 isolate, name_object, Execution::ToString(isolate, key), Object); 5102 isolate, name_object, Execution::ToString(isolate, key), Object);
5104 } 5103 }
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
5332 duplicate = it.IsFound(); 5331 duplicate = it.IsFound();
5333 } else { 5332 } else {
5334 uint32_t index = 0; 5333 uint32_t index = 0;
5335 RUNTIME_ASSERT(key->ToArrayIndex(&index)); 5334 RUNTIME_ASSERT(key->ToArrayIndex(&index));
5336 Maybe<bool> maybe = JSReceiver::HasOwnElement(object, index); 5335 Maybe<bool> maybe = JSReceiver::HasOwnElement(object, index);
5337 if (!maybe.has_value) return isolate->heap()->exception(); 5336 if (!maybe.has_value) return isolate->heap()->exception();
5338 duplicate = maybe.value; 5337 duplicate = maybe.value;
5339 } 5338 }
5340 if (duplicate) { 5339 if (duplicate) {
5341 Handle<Object> args[1] = { key }; 5340 Handle<Object> args[1] = { key };
5342 Handle<Object> error = isolate->factory()->NewTypeError( 5341 THROW_NEW_ERROR_RETURN_FAILURE(
5343 "duplicate_template_property", HandleVector(args, 1)); 5342 isolate,
5344 return isolate->Throw(*error); 5343 NewTypeError("duplicate_template_property", HandleVector(args, 1)));
5345 } 5344 }
5346 #endif 5345 #endif
5347 5346
5348 Handle<Object> result; 5347 Handle<Object> result;
5349 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 5348 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
5350 isolate, result, 5349 isolate, result,
5351 Runtime::DefineObjectProperty(object, key, value, attributes)); 5350 Runtime::DefineObjectProperty(object, key, value, attributes));
5352 return *result; 5351 return *result;
5353 } 5352 }
5354 5353
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
6044 } 6043 }
6045 } 6044 }
6046 6045
6047 // Handle special arguments properties. 6046 // Handle special arguments properties.
6048 if (String::Equals(isolate->factory()->length_string(), key)) { 6047 if (String::Equals(isolate->factory()->length_string(), key)) {
6049 return Smi::FromInt(n); 6048 return Smi::FromInt(n);
6050 } 6049 }
6051 if (String::Equals(isolate->factory()->callee_string(), key)) { 6050 if (String::Equals(isolate->factory()->callee_string(), key)) {
6052 JSFunction* function = frame->function(); 6051 JSFunction* function = frame->function();
6053 if (function->shared()->strict_mode() == STRICT) { 6052 if (function->shared()->strict_mode() == STRICT) {
6054 return isolate->Throw(*isolate->factory()->NewTypeError( 6053 THROW_NEW_ERROR_RETURN_FAILURE(
6055 "strict_arguments_callee", HandleVector<Object>(NULL, 0))); 6054 isolate, NewTypeError("strict_arguments_callee",
6055 HandleVector<Object>(NULL, 0)));
6056 } 6056 }
6057 return function; 6057 return function;
6058 } 6058 }
6059 6059
6060 // Lookup in the initial Object.prototype object. 6060 // Lookup in the initial Object.prototype object.
6061 Handle<Object> result; 6061 Handle<Object> result;
6062 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 6062 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
6063 isolate, result, 6063 isolate, result,
6064 Object::GetProperty(isolate->initial_object_prototype(), key)); 6064 Object::GetProperty(isolate->initial_object_prototype(), key));
6065 return *result; 6065 return *result;
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
6441 overflows |= ToUpperOverflows(current); 6441 overflows |= ToUpperOverflows(current);
6442 // NOTE: we use 0 as the next character here because, while 6442 // NOTE: we use 0 as the next character here because, while
6443 // the next character may affect what a character converts to, 6443 // the next character may affect what a character converts to,
6444 // it does not in any case affect the length of what it convert 6444 // it does not in any case affect the length of what it convert
6445 // to. 6445 // to.
6446 int char_length = mapping->get(current, 0, chars); 6446 int char_length = mapping->get(current, 0, chars);
6447 if (char_length == 0) char_length = 1; 6447 if (char_length == 0) char_length = 1;
6448 current_length += char_length; 6448 current_length += char_length;
6449 if (current_length > String::kMaxLength) { 6449 if (current_length > String::kMaxLength) {
6450 AllowHeapAllocation allocate_error_and_return; 6450 AllowHeapAllocation allocate_error_and_return;
6451 return isolate->ThrowInvalidStringLength(); 6451 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
6452 NewInvalidStringLengthError());
6452 } 6453 }
6453 } 6454 }
6454 // Try again with the real length. Return signed if we need 6455 // Try again with the real length. Return signed if we need
6455 // to allocate a two-byte string for to uppercase. 6456 // to allocate a two-byte string for to uppercase.
6456 return (overflows && !ignore_overflow) ? Smi::FromInt(-current_length) 6457 return (overflows && !ignore_overflow) ? Smi::FromInt(-current_length)
6457 : Smi::FromInt(current_length); 6458 : Smi::FromInt(current_length);
6458 } else { 6459 } else {
6459 for (int j = 0; j < char_length; j++) { 6460 for (int j = 0; j < char_length; j++) {
6460 result->Set(i, chars[j]); 6461 result->Set(i, chars[j]);
6461 i++; 6462 i++;
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after
7156 position += increment; 7157 position += increment;
7157 } 7158 }
7158 return position; 7159 return position;
7159 } 7160 }
7160 7161
7161 7162
7162 RUNTIME_FUNCTION(Runtime_StringBuilderConcat) { 7163 RUNTIME_FUNCTION(Runtime_StringBuilderConcat) {
7163 HandleScope scope(isolate); 7164 HandleScope scope(isolate);
7164 DCHECK(args.length() == 3); 7165 DCHECK(args.length() == 3);
7165 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); 7166 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0);
7166 if (!args[1]->IsSmi()) return isolate->ThrowInvalidStringLength(); 7167 if (!args[1]->IsSmi()) {
7168 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError());
7169 }
7167 CONVERT_SMI_ARG_CHECKED(array_length, 1); 7170 CONVERT_SMI_ARG_CHECKED(array_length, 1);
7168 CONVERT_ARG_HANDLE_CHECKED(String, special, 2); 7171 CONVERT_ARG_HANDLE_CHECKED(String, special, 2);
7169 7172
7170 size_t actual_array_length = 0; 7173 size_t actual_array_length = 0;
7171 RUNTIME_ASSERT( 7174 RUNTIME_ASSERT(
7172 TryNumberToSize(isolate, array->length(), &actual_array_length)); 7175 TryNumberToSize(isolate, array->length(), &actual_array_length));
7173 RUNTIME_ASSERT(array_length >= 0); 7176 RUNTIME_ASSERT(array_length >= 0);
7174 RUNTIME_ASSERT(static_cast<size_t>(array_length) <= actual_array_length); 7177 RUNTIME_ASSERT(static_cast<size_t>(array_length) <= actual_array_length);
7175 7178
7176 // This assumption is used by the slice encoding in one or two smis. 7179 // This assumption is used by the slice encoding in one or two smis.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
7228 array_length); 7231 array_length);
7229 return *answer; 7232 return *answer;
7230 } 7233 }
7231 } 7234 }
7232 7235
7233 7236
7234 RUNTIME_FUNCTION(Runtime_StringBuilderJoin) { 7237 RUNTIME_FUNCTION(Runtime_StringBuilderJoin) {
7235 HandleScope scope(isolate); 7238 HandleScope scope(isolate);
7236 DCHECK(args.length() == 3); 7239 DCHECK(args.length() == 3);
7237 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0); 7240 CONVERT_ARG_HANDLE_CHECKED(JSArray, array, 0);
7238 if (!args[1]->IsSmi()) return isolate->ThrowInvalidStringLength(); 7241 if (!args[1]->IsSmi()) {
7242 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError());
7243 }
7239 CONVERT_SMI_ARG_CHECKED(array_length, 1); 7244 CONVERT_SMI_ARG_CHECKED(array_length, 1);
7240 CONVERT_ARG_HANDLE_CHECKED(String, separator, 2); 7245 CONVERT_ARG_HANDLE_CHECKED(String, separator, 2);
7241 RUNTIME_ASSERT(array->HasFastObjectElements()); 7246 RUNTIME_ASSERT(array->HasFastObjectElements());
7242 RUNTIME_ASSERT(array_length >= 0); 7247 RUNTIME_ASSERT(array_length >= 0);
7243 7248
7244 Handle<FixedArray> fixed_array(FixedArray::cast(array->elements())); 7249 Handle<FixedArray> fixed_array(FixedArray::cast(array->elements()));
7245 if (fixed_array->length() < array_length) { 7250 if (fixed_array->length() < array_length) {
7246 array_length = fixed_array->length(); 7251 array_length = fixed_array->length();
7247 } 7252 }
7248 7253
7249 if (array_length == 0) { 7254 if (array_length == 0) {
7250 return isolate->heap()->empty_string(); 7255 return isolate->heap()->empty_string();
7251 } else if (array_length == 1) { 7256 } else if (array_length == 1) {
7252 Object* first = fixed_array->get(0); 7257 Object* first = fixed_array->get(0);
7253 RUNTIME_ASSERT(first->IsString()); 7258 RUNTIME_ASSERT(first->IsString());
7254 return first; 7259 return first;
7255 } 7260 }
7256 7261
7257 int separator_length = separator->length(); 7262 int separator_length = separator->length();
7258 RUNTIME_ASSERT(separator_length > 0); 7263 RUNTIME_ASSERT(separator_length > 0);
7259 int max_nof_separators = 7264 int max_nof_separators =
7260 (String::kMaxLength + separator_length - 1) / separator_length; 7265 (String::kMaxLength + separator_length - 1) / separator_length;
7261 if (max_nof_separators < (array_length - 1)) { 7266 if (max_nof_separators < (array_length - 1)) {
7262 return isolate->ThrowInvalidStringLength(); 7267 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError());
7263 } 7268 }
7264 int length = (array_length - 1) * separator_length; 7269 int length = (array_length - 1) * separator_length;
7265 for (int i = 0; i < array_length; i++) { 7270 for (int i = 0; i < array_length; i++) {
7266 Object* element_obj = fixed_array->get(i); 7271 Object* element_obj = fixed_array->get(i);
7267 RUNTIME_ASSERT(element_obj->IsString()); 7272 RUNTIME_ASSERT(element_obj->IsString());
7268 String* element = String::cast(element_obj); 7273 String* element = String::cast(element_obj);
7269 int increment = element->length(); 7274 int increment = element->length();
7270 if (increment > String::kMaxLength - length) { 7275 if (increment > String::kMaxLength - length) {
7271 STATIC_ASSERT(String::kMaxLength < kMaxInt); 7276 STATIC_ASSERT(String::kMaxLength < kMaxInt);
7272 length = kMaxInt; // Provoke exception; 7277 length = kMaxInt; // Provoke exception;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
7414 // Nonempty separator and at least 2^31-1 separators necessary 7419 // Nonempty separator and at least 2^31-1 separators necessary
7415 // means that the string is too large to create. 7420 // means that the string is too large to create.
7416 STATIC_ASSERT(String::kMaxLength < 0x7fffffff); 7421 STATIC_ASSERT(String::kMaxLength < 0x7fffffff);
7417 overflow = true; 7422 overflow = true;
7418 } 7423 }
7419 } 7424 }
7420 if (overflow) { 7425 if (overflow) {
7421 // Throw an exception if the resulting string is too large. See 7426 // Throw an exception if the resulting string is too large. See
7422 // https://code.google.com/p/chromium/issues/detail?id=336820 7427 // https://code.google.com/p/chromium/issues/detail?id=336820
7423 // for details. 7428 // for details.
7424 return isolate->ThrowInvalidStringLength(); 7429 THROW_NEW_ERROR_RETURN_FAILURE(isolate, NewInvalidStringLengthError());
7425 } 7430 }
7426 7431
7427 if (is_ascii) { 7432 if (is_ascii) {
7428 Handle<SeqOneByteString> result = isolate->factory()->NewRawOneByteString( 7433 Handle<SeqOneByteString> result = isolate->factory()->NewRawOneByteString(
7429 string_length).ToHandleChecked(); 7434 string_length).ToHandleChecked();
7430 JoinSparseArrayWithSeparator<uint8_t>( 7435 JoinSparseArrayWithSeparator<uint8_t>(
7431 FixedArray::cast(elements_array->elements()), 7436 FixedArray::cast(elements_array->elements()),
7432 elements_length, 7437 elements_length,
7433 array_length, 7438 array_length,
7434 *separator, 7439 *separator,
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
8319 return *result; 8324 return *result;
8320 } 8325 }
8321 8326
8322 8327
8323 static Object* Runtime_NewObjectHelper(Isolate* isolate, 8328 static Object* Runtime_NewObjectHelper(Isolate* isolate,
8324 Handle<Object> constructor, 8329 Handle<Object> constructor,
8325 Handle<AllocationSite> site) { 8330 Handle<AllocationSite> site) {
8326 // If the constructor isn't a proper function we throw a type error. 8331 // If the constructor isn't a proper function we throw a type error.
8327 if (!constructor->IsJSFunction()) { 8332 if (!constructor->IsJSFunction()) {
8328 Vector< Handle<Object> > arguments = HandleVector(&constructor, 1); 8333 Vector< Handle<Object> > arguments = HandleVector(&constructor, 1);
8329 Handle<Object> type_error = 8334 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
8330 isolate->factory()->NewTypeError("not_constructor", arguments); 8335 NewTypeError("not_constructor", arguments));
8331 return isolate->Throw(*type_error);
8332 } 8336 }
8333 8337
8334 Handle<JSFunction> function = Handle<JSFunction>::cast(constructor); 8338 Handle<JSFunction> function = Handle<JSFunction>::cast(constructor);
8335 8339
8336 // If function should not have prototype, construction is not allowed. In this 8340 // If function should not have prototype, construction is not allowed. In this
8337 // case generated code bailouts here, since function has no initial_map. 8341 // case generated code bailouts here, since function has no initial_map.
8338 if (!function->should_have_prototype() && !function->shared()->bound()) { 8342 if (!function->should_have_prototype() && !function->shared()->bound()) {
8339 Vector< Handle<Object> > arguments = HandleVector(&constructor, 1); 8343 Vector< Handle<Object> > arguments = HandleVector(&constructor, 1);
8340 Handle<Object> type_error = 8344 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
8341 isolate->factory()->NewTypeError("not_constructor", arguments); 8345 NewTypeError("not_constructor", arguments));
8342 return isolate->Throw(*type_error);
8343 } 8346 }
8344 8347
8345 Debug* debug = isolate->debug(); 8348 Debug* debug = isolate->debug();
8346 // Handle stepping into constructors if step into is active. 8349 // Handle stepping into constructors if step into is active.
8347 if (debug->StepInActive()) { 8350 if (debug->StepInActive()) {
8348 debug->HandleStepIn(function, Handle<Object>::null(), 0, true); 8351 debug->HandleStepIn(function, Handle<Object>::null(), 0, true);
8349 } 8352 }
8350 8353
8351 if (function->has_initial_map()) { 8354 if (function->has_initial_map()) {
8352 if (function->initial_map()->instance_type() == JS_FUNCTION_TYPE) { 8355 if (function->initial_map()->instance_type() == JS_FUNCTION_TYPE) {
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
9026 DCHECK(args.length() == 2); 9029 DCHECK(args.length() == 2);
9027 Handle<JSReceiver> extension_object; 9030 Handle<JSReceiver> extension_object;
9028 if (args[0]->IsJSReceiver()) { 9031 if (args[0]->IsJSReceiver()) {
9029 extension_object = args.at<JSReceiver>(0); 9032 extension_object = args.at<JSReceiver>(0);
9030 } else { 9033 } else {
9031 // Try to convert the object to a proper JavaScript object. 9034 // Try to convert the object to a proper JavaScript object.
9032 MaybeHandle<JSReceiver> maybe_object = 9035 MaybeHandle<JSReceiver> maybe_object =
9033 Object::ToObject(isolate, args.at<Object>(0)); 9036 Object::ToObject(isolate, args.at<Object>(0));
9034 if (!maybe_object.ToHandle(&extension_object)) { 9037 if (!maybe_object.ToHandle(&extension_object)) {
9035 Handle<Object> handle = args.at<Object>(0); 9038 Handle<Object> handle = args.at<Object>(0);
9036 Handle<Object> result = 9039 THROW_NEW_ERROR_RETURN_FAILURE(
9037 isolate->factory()->NewTypeError("with_expression", 9040 isolate, NewTypeError("with_expression", HandleVector(&handle, 1)));
9038 HandleVector(&handle, 1));
9039 return isolate->Throw(*result);
9040 } 9041 }
9041 } 9042 }
9042 9043
9043 Handle<JSFunction> function; 9044 Handle<JSFunction> function;
9044 if (args[1]->IsSmi()) { 9045 if (args[1]->IsSmi()) {
9045 // A smi sentinel indicates a context nested inside global code rather 9046 // A smi sentinel indicates a context nested inside global code rather
9046 // than some function. There is a canonical empty function that can be 9047 // than some function. There is a canonical empty function that can be
9047 // gotten from the native context. 9048 // gotten from the native context.
9048 function = handle(isolate->native_context()->closure()); 9049 function = handle(isolate->native_context()->closure());
9049 } else { 9050 } else {
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
9341 DCHECK(holder->IsContext()); 9342 DCHECK(holder->IsContext());
9342 // If the "property" we were looking for is a local variable, the 9343 // If the "property" we were looking for is a local variable, the
9343 // receiver is the global object; see ECMA-262, 3rd., 10.1.6 and 10.2.3. 9344 // receiver is the global object; see ECMA-262, 3rd., 10.1.6 and 10.2.3.
9344 Handle<Object> receiver = isolate->factory()->undefined_value(); 9345 Handle<Object> receiver = isolate->factory()->undefined_value();
9345 Object* value = Context::cast(*holder)->get(index); 9346 Object* value = Context::cast(*holder)->get(index);
9346 // Check for uninitialized bindings. 9347 // Check for uninitialized bindings.
9347 switch (binding_flags) { 9348 switch (binding_flags) {
9348 case MUTABLE_CHECK_INITIALIZED: 9349 case MUTABLE_CHECK_INITIALIZED:
9349 case IMMUTABLE_CHECK_INITIALIZED_HARMONY: 9350 case IMMUTABLE_CHECK_INITIALIZED_HARMONY:
9350 if (value->IsTheHole()) { 9351 if (value->IsTheHole()) {
9351 Handle<Object> reference_error = 9352 Handle<Object> error;
9353 MaybeHandle<Object> maybe_error =
9352 isolate->factory()->NewReferenceError("not_defined", 9354 isolate->factory()->NewReferenceError("not_defined",
9353 HandleVector(&name, 1)); 9355 HandleVector(&name, 1));
9354 return MakePair(isolate->Throw(*reference_error), NULL); 9356 if (maybe_error.ToHandle(&error)) isolate->Throw(*error);
9357 return MakePair(isolate->heap()->exception(), NULL);
9355 } 9358 }
9356 // FALLTHROUGH 9359 // FALLTHROUGH
9357 case MUTABLE_IS_INITIALIZED: 9360 case MUTABLE_IS_INITIALIZED:
9358 case IMMUTABLE_IS_INITIALIZED: 9361 case IMMUTABLE_IS_INITIALIZED:
9359 case IMMUTABLE_IS_INITIALIZED_HARMONY: 9362 case IMMUTABLE_IS_INITIALIZED_HARMONY:
9360 DCHECK(!value->IsTheHole()); 9363 DCHECK(!value->IsTheHole());
9361 return MakePair(value, *receiver); 9364 return MakePair(value, *receiver);
9362 case IMMUTABLE_CHECK_INITIALIZED: 9365 case IMMUTABLE_CHECK_INITIALIZED:
9363 if (value->IsTheHole()) { 9366 if (value->IsTheHole()) {
9364 DCHECK((attributes & READ_ONLY) != 0); 9367 DCHECK((attributes & READ_ONLY) != 0);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
9396 Handle<Object> value; 9399 Handle<Object> value;
9397 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 9400 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
9398 isolate, value, 9401 isolate, value,
9399 Object::GetProperty(object, name), 9402 Object::GetProperty(object, name),
9400 MakePair(isolate->heap()->exception(), NULL)); 9403 MakePair(isolate->heap()->exception(), NULL));
9401 return MakePair(*value, *receiver_handle); 9404 return MakePair(*value, *receiver_handle);
9402 } 9405 }
9403 9406
9404 if (throw_error) { 9407 if (throw_error) {
9405 // The property doesn't exist - throw exception. 9408 // The property doesn't exist - throw exception.
9406 Handle<Object> reference_error = 9409 Handle<Object> error;
9407 isolate->factory()->NewReferenceError("not_defined", 9410 MaybeHandle<Object> maybe_error = isolate->factory()->NewReferenceError(
9408 HandleVector(&name, 1)); 9411 "not_defined", HandleVector(&name, 1));
9409 return MakePair(isolate->Throw(*reference_error), NULL); 9412 if (maybe_error.ToHandle(&error)) isolate->Throw(*error);
9413 return MakePair(isolate->heap()->exception(), NULL);
9410 } else { 9414 } else {
9411 // The property doesn't exist - return undefined. 9415 // The property doesn't exist - return undefined.
9412 return MakePair(isolate->heap()->undefined_value(), 9416 return MakePair(isolate->heap()->undefined_value(),
9413 isolate->heap()->undefined_value()); 9417 isolate->heap()->undefined_value());
9414 } 9418 }
9415 } 9419 }
9416 9420
9417 9421
9418 RUNTIME_FUNCTION_RETURN_PAIR(Runtime_LoadLookupSlot) { 9422 RUNTIME_FUNCTION_RETURN_PAIR(Runtime_LoadLookupSlot) {
9419 return LoadLookupSlotHelper(args, isolate, true); 9423 return LoadLookupSlotHelper(args, isolate, true);
(...skipping 25 matching lines...) Expand all
9445 &binding_flags); 9449 &binding_flags);
9446 // In case of JSProxy, an exception might have been thrown. 9450 // In case of JSProxy, an exception might have been thrown.
9447 if (isolate->has_pending_exception()) return isolate->heap()->exception(); 9451 if (isolate->has_pending_exception()) return isolate->heap()->exception();
9448 9452
9449 // The property was found in a context slot. 9453 // The property was found in a context slot.
9450 if (index >= 0) { 9454 if (index >= 0) {
9451 if ((attributes & READ_ONLY) == 0) { 9455 if ((attributes & READ_ONLY) == 0) {
9452 Handle<Context>::cast(holder)->set(index, *value); 9456 Handle<Context>::cast(holder)->set(index, *value);
9453 } else if (strict_mode == STRICT) { 9457 } else if (strict_mode == STRICT) {
9454 // Setting read only property in strict mode. 9458 // Setting read only property in strict mode.
9455 Handle<Object> error = 9459 THROW_NEW_ERROR_RETURN_FAILURE(
9456 isolate->factory()->NewTypeError("strict_cannot_assign", 9460 isolate,
9457 HandleVector(&name, 1)); 9461 NewTypeError("strict_cannot_assign", HandleVector(&name, 1)));
9458 return isolate->Throw(*error);
9459 } 9462 }
9460 return *value; 9463 return *value;
9461 } 9464 }
9462 9465
9463 // Slow case: The property is not in a context slot. It is either in a 9466 // Slow case: The property is not in a context slot. It is either in a
9464 // context extension object, a property of the subject of a with, or a 9467 // context extension object, a property of the subject of a with, or a
9465 // property of the global object. 9468 // property of the global object.
9466 Handle<JSReceiver> object; 9469 Handle<JSReceiver> object;
9467 if (attributes != ABSENT) { 9470 if (attributes != ABSENT) {
9468 // The property exists on the holder. 9471 // The property exists on the holder.
9469 object = Handle<JSReceiver>::cast(holder); 9472 object = Handle<JSReceiver>::cast(holder);
9470 } else if (strict_mode == STRICT) { 9473 } else if (strict_mode == STRICT) {
9471 // If absent in strict mode: throw. 9474 // If absent in strict mode: throw.
9472 Handle<Object> error = isolate->factory()->NewReferenceError( 9475 THROW_NEW_ERROR_RETURN_FAILURE(
9473 "not_defined", HandleVector(&name, 1)); 9476 isolate, NewReferenceError("not_defined", HandleVector(&name, 1)));
9474 return isolate->Throw(*error);
9475 } else { 9477 } else {
9476 // If absent in sloppy mode: add the property to the global object. 9478 // If absent in sloppy mode: add the property to the global object.
9477 object = Handle<JSReceiver>(context->global_object()); 9479 object = Handle<JSReceiver>(context->global_object());
9478 } 9480 }
9479 9481
9480 RETURN_FAILURE_ON_EXCEPTION( 9482 RETURN_FAILURE_ON_EXCEPTION(
9481 isolate, Object::SetProperty(object, name, value, strict_mode)); 9483 isolate, Object::SetProperty(object, name, value, strict_mode));
9482 9484
9483 return *value; 9485 return *value;
9484 } 9486 }
(...skipping 19 matching lines...) Expand all
9504 SealHandleScope shs(isolate); 9506 SealHandleScope shs(isolate);
9505 DCHECK(args.length() == 0); 9507 DCHECK(args.length() == 0);
9506 return isolate->PromoteScheduledException(); 9508 return isolate->PromoteScheduledException();
9507 } 9509 }
9508 9510
9509 9511
9510 RUNTIME_FUNCTION(Runtime_ThrowReferenceError) { 9512 RUNTIME_FUNCTION(Runtime_ThrowReferenceError) {
9511 HandleScope scope(isolate); 9513 HandleScope scope(isolate);
9512 DCHECK(args.length() == 1); 9514 DCHECK(args.length() == 1);
9513 CONVERT_ARG_HANDLE_CHECKED(Object, name, 0); 9515 CONVERT_ARG_HANDLE_CHECKED(Object, name, 0);
9514 Handle<Object> reference_error = 9516 THROW_NEW_ERROR_RETURN_FAILURE(
9515 isolate->factory()->NewReferenceError("not_defined", 9517 isolate, NewReferenceError("not_defined", HandleVector(&name, 1)));
9516 HandleVector(&name, 1));
9517 return isolate->Throw(*reference_error);
9518 } 9518 }
9519 9519
9520 9520
9521 RUNTIME_FUNCTION(Runtime_ThrowNotDateError) { 9521 RUNTIME_FUNCTION(Runtime_ThrowNotDateError) {
9522 HandleScope scope(isolate); 9522 HandleScope scope(isolate);
9523 DCHECK(args.length() == 0); 9523 DCHECK(args.length() == 0);
9524 return isolate->Throw(*isolate->factory()->NewTypeError( 9524 THROW_NEW_ERROR_RETURN_FAILURE(
9525 "not_date_object", HandleVector<Object>(NULL, 0))); 9525 isolate, NewTypeError("not_date_object", HandleVector<Object>(NULL, 0)));
9526 } 9526 }
9527 9527
9528 9528
9529 RUNTIME_FUNCTION(Runtime_StackGuard) { 9529 RUNTIME_FUNCTION(Runtime_StackGuard) {
9530 SealHandleScope shs(isolate); 9530 SealHandleScope shs(isolate);
9531 DCHECK(args.length() == 0); 9531 DCHECK(args.length() == 0);
9532 9532
9533 // First check if this is a real stack overflow. 9533 // First check if this is a real stack overflow.
9534 StackLimitCheck check(isolate); 9534 StackLimitCheck check(isolate);
9535 if (check.JsHasOverflowed()) { 9535 if (check.JsHasOverflowed()) {
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
9873 if (!TokensMatchForCompileString(isolate)) { 9873 if (!TokensMatchForCompileString(isolate)) {
9874 return isolate->heap()->undefined_value(); 9874 return isolate->heap()->undefined_value();
9875 } 9875 }
9876 9876
9877 // Check if native context allows code generation from 9877 // Check if native context allows code generation from
9878 // strings. Throw an exception if it doesn't. 9878 // strings. Throw an exception if it doesn't.
9879 if (context->allow_code_gen_from_strings()->IsFalse() && 9879 if (context->allow_code_gen_from_strings()->IsFalse() &&
9880 !CodeGenerationFromStringsAllowed(isolate, context)) { 9880 !CodeGenerationFromStringsAllowed(isolate, context)) {
9881 Handle<Object> error_message = 9881 Handle<Object> error_message =
9882 context->ErrorMessageForCodeGenerationFromStrings(); 9882 context->ErrorMessageForCodeGenerationFromStrings();
9883 return isolate->Throw(*isolate->factory()->NewEvalError( 9883 THROW_NEW_ERROR_RETURN_FAILURE(
9884 "code_gen_from_strings", HandleVector<Object>(&error_message, 1))); 9884 isolate, NewEvalError("code_gen_from_strings",
9885 HandleVector<Object>(&error_message, 1)));
9885 } 9886 }
9886 9887
9887 // Compile source string in the native context. 9888 // Compile source string in the native context.
9888 ParseRestriction restriction = function_literal_only 9889 ParseRestriction restriction = function_literal_only
9889 ? ONLY_SINGLE_FUNCTION_LITERAL : NO_PARSE_RESTRICTION; 9890 ? ONLY_SINGLE_FUNCTION_LITERAL : NO_PARSE_RESTRICTION;
9890 Handle<JSFunction> fun; 9891 Handle<JSFunction> fun;
9891 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 9892 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
9892 isolate, fun, 9893 isolate, fun,
9893 Compiler::GetFunctionFromEval( 9894 Compiler::GetFunctionFromEval(
9894 source, context, SLOPPY, restriction, RelocInfo::kNoPosition)); 9895 source, context, SLOPPY, restriction, RelocInfo::kNoPosition));
9895 return *fun; 9896 return *fun;
9896 } 9897 }
9897 9898
9898 9899
9899 static ObjectPair CompileGlobalEval(Isolate* isolate, 9900 static ObjectPair CompileGlobalEval(Isolate* isolate,
9900 Handle<String> source, 9901 Handle<String> source,
9901 Handle<Object> receiver, 9902 Handle<Object> receiver,
9902 StrictMode strict_mode, 9903 StrictMode strict_mode,
9903 int scope_position) { 9904 int scope_position) {
9904 Handle<Context> context = Handle<Context>(isolate->context()); 9905 Handle<Context> context = Handle<Context>(isolate->context());
9905 Handle<Context> native_context = Handle<Context>(context->native_context()); 9906 Handle<Context> native_context = Handle<Context>(context->native_context());
9906 9907
9907 // Check if native context allows code generation from 9908 // Check if native context allows code generation from
9908 // strings. Throw an exception if it doesn't. 9909 // strings. Throw an exception if it doesn't.
9909 if (native_context->allow_code_gen_from_strings()->IsFalse() && 9910 if (native_context->allow_code_gen_from_strings()->IsFalse() &&
9910 !CodeGenerationFromStringsAllowed(isolate, native_context)) { 9911 !CodeGenerationFromStringsAllowed(isolate, native_context)) {
9911 Handle<Object> error_message = 9912 Handle<Object> error_message =
9912 native_context->ErrorMessageForCodeGenerationFromStrings(); 9913 native_context->ErrorMessageForCodeGenerationFromStrings();
9913 isolate->Throw(*isolate->factory()->NewEvalError( 9914 Handle<Object> error;
9914 "code_gen_from_strings", HandleVector<Object>(&error_message, 1))); 9915 MaybeHandle<Object> maybe_error = isolate->factory()->NewEvalError(
9916 "code_gen_from_strings", HandleVector<Object>(&error_message, 1));
9917 if (maybe_error.ToHandle(&error)) isolate->Throw(*error);
9915 return MakePair(isolate->heap()->exception(), NULL); 9918 return MakePair(isolate->heap()->exception(), NULL);
9916 } 9919 }
9917 9920
9918 // Deal with a normal eval call with a string argument. Compile it 9921 // Deal with a normal eval call with a string argument. Compile it
9919 // and return the compiled function bound in the local context. 9922 // and return the compiled function bound in the local context.
9920 static const ParseRestriction restriction = NO_PARSE_RESTRICTION; 9923 static const ParseRestriction restriction = NO_PARSE_RESTRICTION;
9921 Handle<JSFunction> compiled; 9924 Handle<JSFunction> compiled;
9922 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 9925 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
9923 isolate, compiled, 9926 isolate, compiled,
9924 Compiler::GetFunctionFromEval( 9927 Compiler::GetFunctionFromEval(
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
10682 if (!IterateElements(isolate, array, &visitor)) { 10685 if (!IterateElements(isolate, array, &visitor)) {
10683 return isolate->heap()->exception(); 10686 return isolate->heap()->exception();
10684 } 10687 }
10685 } else { 10688 } else {
10686 visitor.visit(0, obj); 10689 visitor.visit(0, obj);
10687 visitor.increase_index_offset(1); 10690 visitor.increase_index_offset(1);
10688 } 10691 }
10689 } 10692 }
10690 10693
10691 if (visitor.exceeds_array_limit()) { 10694 if (visitor.exceeds_array_limit()) {
10692 return isolate->Throw( 10695 THROW_NEW_ERROR_RETURN_FAILURE(
10693 *isolate->factory()->NewRangeError("invalid_array_length", 10696 isolate,
10694 HandleVector<Object>(NULL, 0))); 10697 NewRangeError("invalid_array_length", HandleVector<Object>(NULL, 0)));
10695 } 10698 }
10696 return *visitor.ToArray(); 10699 return *visitor.ToArray();
10697 } 10700 }
10698 10701
10699 10702
10700 // This will not allocate (flatten the string), but it may run 10703 // This will not allocate (flatten the string), but it may run
10701 // very slowly for very deeply nested ConsStrings. For debugging use only. 10704 // very slowly for very deeply nested ConsStrings. For debugging use only.
10702 RUNTIME_FUNCTION(Runtime_GlobalPrint) { 10705 RUNTIME_FUNCTION(Runtime_GlobalPrint) {
10703 SealHandleScope shs(isolate); 10706 SealHandleScope shs(isolate);
10704 DCHECK(args.length() == 1); 10707 DCHECK(args.length() == 1);
(...skipping 3324 matching lines...) Expand 10 before | Expand all | Expand 10 after
14029 14032
14030 RUNTIME_FUNCTION(Runtime_GetImplFromInitializedIntlObject) { 14033 RUNTIME_FUNCTION(Runtime_GetImplFromInitializedIntlObject) {
14031 HandleScope scope(isolate); 14034 HandleScope scope(isolate);
14032 14035
14033 DCHECK(args.length() == 1); 14036 DCHECK(args.length() == 1);
14034 14037
14035 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0); 14038 CONVERT_ARG_HANDLE_CHECKED(Object, input, 0);
14036 14039
14037 if (!input->IsJSObject()) { 14040 if (!input->IsJSObject()) {
14038 Vector< Handle<Object> > arguments = HandleVector(&input, 1); 14041 Vector< Handle<Object> > arguments = HandleVector(&input, 1);
14039 Handle<Object> type_error = 14042 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
14040 isolate->factory()->NewTypeError("not_intl_object", arguments); 14043 NewTypeError("not_intl_object", arguments));
14041 return isolate->Throw(*type_error);
14042 } 14044 }
14043 14045
14044 Handle<JSObject> obj = Handle<JSObject>::cast(input); 14046 Handle<JSObject> obj = Handle<JSObject>::cast(input);
14045 14047
14046 Handle<String> marker = isolate->factory()->intl_impl_object_string(); 14048 Handle<String> marker = isolate->factory()->intl_impl_object_string();
14047 Handle<Object> impl(obj->GetHiddenProperty(marker), isolate); 14049 Handle<Object> impl(obj->GetHiddenProperty(marker), isolate);
14048 if (impl->IsTheHole()) { 14050 if (impl->IsTheHole()) {
14049 Vector< Handle<Object> > arguments = HandleVector(&obj, 1); 14051 Vector< Handle<Object> > arguments = HandleVector(&obj, 1);
14050 Handle<Object> type_error = 14052 THROW_NEW_ERROR_RETURN_FAILURE(isolate,
14051 isolate->factory()->NewTypeError("not_intl_object", arguments); 14053 NewTypeError("not_intl_object", arguments));
14052 return isolate->Throw(*type_error);
14053 } 14054 }
14054 return *impl; 14055 return *impl;
14055 } 14056 }
14056 14057
14057 14058
14058 RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { 14059 RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) {
14059 HandleScope scope(isolate); 14060 HandleScope scope(isolate);
14060 14061
14061 DCHECK(args.length() == 3); 14062 DCHECK(args.length() == 3);
14062 14063
(...skipping 1301 matching lines...) Expand 10 before | Expand all | Expand 10 after
15364 } 15365 }
15365 15366
15366 15367
15367 RUNTIME_FUNCTION(RuntimeReference_DateField) { 15368 RUNTIME_FUNCTION(RuntimeReference_DateField) {
15368 SealHandleScope shs(isolate); 15369 SealHandleScope shs(isolate);
15369 DCHECK(args.length() == 2); 15370 DCHECK(args.length() == 2);
15370 CONVERT_ARG_CHECKED(Object, obj, 0); 15371 CONVERT_ARG_CHECKED(Object, obj, 0);
15371 CONVERT_SMI_ARG_CHECKED(index, 1); 15372 CONVERT_SMI_ARG_CHECKED(index, 1);
15372 if (!obj->IsJSDate()) { 15373 if (!obj->IsJSDate()) {
15373 HandleScope scope(isolate); 15374 HandleScope scope(isolate);
15374 return isolate->Throw(*isolate->factory()->NewTypeError( 15375 THROW_NEW_ERROR_RETURN_FAILURE(
15375 "not_date_object", HandleVector<Object>(NULL, 0))); 15376 isolate,
15377 NewTypeError("not_date_object", HandleVector<Object>(NULL, 0)));
15376 } 15378 }
15377 JSDate* date = JSDate::cast(obj); 15379 JSDate* date = JSDate::cast(obj);
15378 if (index == 0) return date->value(); 15380 if (index == 0) return date->value();
15379 return JSDate::GetField(date, Smi::FromInt(index)); 15381 return JSDate::GetField(date, Smi::FromInt(index));
15380 } 15382 }
15381 15383
15382 15384
15383 RUNTIME_FUNCTION(RuntimeReference_StringCharFromCode) { 15385 RUNTIME_FUNCTION(RuntimeReference_StringCharFromCode) {
15384 SealHandleScope shs(isolate); 15386 SealHandleScope shs(isolate);
15385 return __RT_impl_Runtime_CharFromCode(args, isolate); 15387 return __RT_impl_Runtime_CharFromCode(args, isolate);
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
15652 } 15654 }
15653 return NULL; 15655 return NULL;
15654 } 15656 }
15655 15657
15656 15658
15657 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) { 15659 const Runtime::Function* Runtime::FunctionForId(Runtime::FunctionId id) {
15658 return &(kIntrinsicFunctions[static_cast<int>(id)]); 15660 return &(kIntrinsicFunctions[static_cast<int>(id)]);
15659 } 15661 }
15660 15662
15661 } } // namespace v8::internal 15663 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/scopes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698