| OLD | NEW | 
|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 | 6 | 
| 7 #include "test/cctest/test-api.h" | 7 #include "test/cctest/test-api.h" | 
| 8 | 8 | 
| 9 #include "include/v8-util.h" | 9 #include "include/v8-util.h" | 
| 10 #include "src/api.h" | 10 #include "src/api.h" | 
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 232 | 232 | 
| 233 void CheckThisNamedPropertyHandler( | 233 void CheckThisNamedPropertyHandler( | 
| 234     Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { | 234     Local<Name> name, const v8::PropertyCallbackInfo<v8::Value>& info) { | 
| 235   CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyHandler)); | 235   CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyHandler)); | 
| 236   ApiTestFuzzer::Fuzz(); | 236   ApiTestFuzzer::Fuzz(); | 
| 237   CHECK(info.This() | 237   CHECK(info.This() | 
| 238             ->Equals(info.GetIsolate()->GetCurrentContext(), bottom) | 238             ->Equals(info.GetIsolate()->GetCurrentContext(), bottom) | 
| 239             .FromJust()); | 239             .FromJust()); | 
| 240 } | 240 } | 
| 241 | 241 | 
|  | 242 void CheckThisIndexedPropertyDefiner( | 
|  | 243     uint32_t index, const v8::PropertyDescriptor& desc, | 
|  | 244     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 245   CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertyDefiner)); | 
|  | 246   ApiTestFuzzer::Fuzz(); | 
|  | 247   CHECK(info.This() | 
|  | 248             ->Equals(info.GetIsolate()->GetCurrentContext(), bottom) | 
|  | 249             .FromJust()); | 
|  | 250 } | 
|  | 251 | 
|  | 252 void CheckThisNamedPropertyDefiner( | 
|  | 253     Local<Name> property, const v8::PropertyDescriptor& desc, | 
|  | 254     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 255   CheckReturnValue(info, FUNCTION_ADDR(CheckThisNamedPropertyDefiner)); | 
|  | 256   ApiTestFuzzer::Fuzz(); | 
|  | 257   CHECK(info.This() | 
|  | 258             ->Equals(info.GetIsolate()->GetCurrentContext(), bottom) | 
|  | 259             .FromJust()); | 
|  | 260 } | 
|  | 261 | 
| 242 void CheckThisIndexedPropertySetter( | 262 void CheckThisIndexedPropertySetter( | 
| 243     uint32_t index, Local<Value> value, | 263     uint32_t index, Local<Value> value, | 
| 244     const v8::PropertyCallbackInfo<v8::Value>& info) { | 264     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
| 245   CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertySetter)); | 265   CheckReturnValue(info, FUNCTION_ADDR(CheckThisIndexedPropertySetter)); | 
| 246   ApiTestFuzzer::Fuzz(); | 266   ApiTestFuzzer::Fuzz(); | 
| 247   CHECK(info.This() | 267   CHECK(info.This() | 
| 248             ->Equals(info.GetIsolate()->GetCurrentContext(), bottom) | 268             ->Equals(info.GetIsolate()->GetCurrentContext(), bottom) | 
| 249             .FromJust()); | 269             .FromJust()); | 
| 250 } | 270 } | 
| 251 | 271 | 
| (...skipping 844 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1096             .ToLocalChecked() | 1116             .ToLocalChecked() | 
| 1097             ->BooleanValue(env.local()) | 1117             ->BooleanValue(env.local()) | 
| 1098             .FromJust()); | 1118             .FromJust()); | 
| 1099   CHECK(v8_compile("delete obj.myProperty") | 1119   CHECK(v8_compile("delete obj.myProperty") | 
| 1100             ->Run(env.local()) | 1120             ->Run(env.local()) | 
| 1101             .ToLocalChecked() | 1121             .ToLocalChecked() | 
| 1102             ->BooleanValue(env.local()) | 1122             ->BooleanValue(env.local()) | 
| 1103             .FromJust()); | 1123             .FromJust()); | 
| 1104 } | 1124 } | 
| 1105 | 1125 | 
|  | 1126 namespace { | 
|  | 1127 void NotInterceptingPropertyDefineCallback( | 
|  | 1128     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1129     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1130   // Do not intercept by not calling info.GetReturnValue().Set() | 
|  | 1131 } | 
|  | 1132 | 
|  | 1133 void InterceptingPropertyDefineCallback( | 
|  | 1134     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1135     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1136   // intercept the callback by setting a non-empty handle | 
|  | 1137   info.GetReturnValue().Set(name); | 
|  | 1138 } | 
|  | 1139 }  // namespace | 
|  | 1140 THREADED_TEST(PropertyDefinerCallback) { | 
|  | 1141   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1142   LocalContext env; | 
|  | 1143 | 
|  | 1144   {  // Intercept defineProperty() | 
|  | 1145     v8::Local<v8::FunctionTemplate> templ = | 
|  | 1146         v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1147     templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1148         0, 0, 0, 0, 0, NotInterceptingPropertyDefineCallback)); | 
|  | 1149     env->Global() | 
|  | 1150         ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1151                                               .ToLocalChecked() | 
|  | 1152                                               ->NewInstance(env.local()) | 
|  | 1153                                               .ToLocalChecked()) | 
|  | 1154         .FromJust(); | 
|  | 1155     const char* code = | 
|  | 1156         "obj.x = 17; " | 
|  | 1157         "Object.defineProperty(obj, 'x', {value: 42});" | 
|  | 1158         "obj.x;"; | 
|  | 1159     CHECK_EQ(42, v8_compile(code) | 
|  | 1160                      ->Run(env.local()) | 
|  | 1161                      .ToLocalChecked() | 
|  | 1162                      ->Int32Value(env.local()) | 
|  | 1163                      .FromJust()); | 
|  | 1164   } | 
|  | 1165 | 
|  | 1166   {  // Do not intercept defineProperty() | 
|  | 1167     v8::Local<v8::FunctionTemplate> templ2 = | 
|  | 1168         v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1169     templ2->InstanceTemplate()->SetHandler( | 
|  | 1170         v8::NamedPropertyHandlerConfiguration( | 
|  | 1171             0, 0, 0, 0, 0, InterceptingPropertyDefineCallback)); | 
|  | 1172     env->Global() | 
|  | 1173         ->Set(env.local(), v8_str("obj2"), templ2->GetFunction(env.local()) | 
|  | 1174                                                .ToLocalChecked() | 
|  | 1175                                                ->NewInstance(env.local()) | 
|  | 1176                                                .ToLocalChecked()) | 
|  | 1177         .FromJust(); | 
|  | 1178 | 
|  | 1179     const char* code = | 
|  | 1180         "obj2.x = 17; " | 
|  | 1181         "Object.defineProperty(obj2, 'x', {value: 42});" | 
|  | 1182         "obj2.x;"; | 
|  | 1183     CHECK_EQ(17, v8_compile(code) | 
|  | 1184                      ->Run(env.local()) | 
|  | 1185                      .ToLocalChecked() | 
|  | 1186                      ->Int32Value(env.local()) | 
|  | 1187                      .FromJust()); | 
|  | 1188   } | 
|  | 1189 } | 
|  | 1190 | 
|  | 1191 // Test that freeze() is intercepted. | 
|  | 1192 THREADED_TEST(PropertyDefinerCallbackForFreeze) { | 
|  | 1193   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1194   LocalContext env; | 
|  | 1195   v8::Local<v8::FunctionTemplate> templ = | 
|  | 1196       v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1197   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1198       0, 0, 0, 0, 0, InterceptingPropertyDefineCallback)); | 
|  | 1199   env->Global() | 
|  | 1200       ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1201                                             .ToLocalChecked() | 
|  | 1202                                             ->NewInstance(env.local()) | 
|  | 1203                                             .ToLocalChecked()) | 
|  | 1204       .FromJust(); | 
|  | 1205   const char* code = | 
|  | 1206       "obj.x = 17; " | 
|  | 1207       "Object.freeze(obj.x); " | 
|  | 1208       "Object.isFrozen(obj.x);"; | 
|  | 1209 | 
|  | 1210   CHECK(v8_compile(code) | 
|  | 1211             ->Run(env.local()) | 
|  | 1212             .ToLocalChecked() | 
|  | 1213             ->BooleanValue(env.local()) | 
|  | 1214             .FromJust()); | 
|  | 1215 } | 
|  | 1216 | 
|  | 1217 // Check that the descriptor passed to the callback is enumerable. | 
|  | 1218 namespace { | 
|  | 1219 void CheckEnumerablePropertyDefineCallback( | 
|  | 1220     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1221     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1222   CHECK(desc.has_value()); | 
|  | 1223   CHECK_EQ(42, desc.value() | 
|  | 1224                    ->Int32Value(info.GetIsolate()->GetCurrentContext()) | 
|  | 1225                    .FromJust()); | 
|  | 1226   CHECK(desc.has_enumerable()); | 
|  | 1227   CHECK(desc.enumerable()); | 
|  | 1228   CHECK(!desc.has_writable()); | 
|  | 1229 | 
|  | 1230   // intercept the callback by setting a non-empty handle | 
|  | 1231   info.GetReturnValue().Set(name); | 
|  | 1232 } | 
|  | 1233 }  // namespace | 
|  | 1234 THREADED_TEST(PropertyDefinerCallbackEnumerable) { | 
|  | 1235   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1236   LocalContext env; | 
|  | 1237   v8::Local<v8::FunctionTemplate> templ = | 
|  | 1238       v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1239   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1240       0, 0, 0, 0, 0, CheckEnumerablePropertyDefineCallback)); | 
|  | 1241   env->Global() | 
|  | 1242       ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1243                                             .ToLocalChecked() | 
|  | 1244                                             ->NewInstance(env.local()) | 
|  | 1245                                             .ToLocalChecked()) | 
|  | 1246       .FromJust(); | 
|  | 1247   const char* code = | 
|  | 1248       "obj.x = 17; " | 
|  | 1249       "Object.defineProperty(obj, 'x', {value: 42, enumerable: true});" | 
|  | 1250       "obj.x;"; | 
|  | 1251   CHECK_EQ(17, v8_compile(code) | 
|  | 1252                    ->Run(env.local()) | 
|  | 1253                    .ToLocalChecked() | 
|  | 1254                    ->Int32Value(env.local()) | 
|  | 1255                    .FromJust()); | 
|  | 1256 } | 
|  | 1257 | 
|  | 1258 // Check that the descriptor passed to the callback is configurable. | 
|  | 1259 namespace { | 
|  | 1260 void CheckConfigurablePropertyDefineCallback( | 
|  | 1261     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1262     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1263   CHECK(desc.has_value()); | 
|  | 1264   CHECK_EQ(42, desc.value() | 
|  | 1265                    ->Int32Value(info.GetIsolate()->GetCurrentContext()) | 
|  | 1266                    .FromJust()); | 
|  | 1267   CHECK(desc.has_configurable()); | 
|  | 1268   CHECK(desc.configurable()); | 
|  | 1269 | 
|  | 1270   // intercept the callback by setting a non-empty handle | 
|  | 1271   info.GetReturnValue().Set(name); | 
|  | 1272 } | 
|  | 1273 }  // namespace | 
|  | 1274 THREADED_TEST(PropertyDefinerCallbackConfigurable) { | 
|  | 1275   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1276   LocalContext env; | 
|  | 1277   v8::Local<v8::FunctionTemplate> templ = | 
|  | 1278       v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1279   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1280       0, 0, 0, 0, 0, CheckConfigurablePropertyDefineCallback)); | 
|  | 1281   env->Global() | 
|  | 1282       ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1283                                             .ToLocalChecked() | 
|  | 1284                                             ->NewInstance(env.local()) | 
|  | 1285                                             .ToLocalChecked()) | 
|  | 1286       .FromJust(); | 
|  | 1287   const char* code = | 
|  | 1288       "obj.x = 17; " | 
|  | 1289       "Object.defineProperty(obj, 'x', {value: 42, configurable: true});" | 
|  | 1290       "obj.x;"; | 
|  | 1291   CHECK_EQ(17, v8_compile(code) | 
|  | 1292                    ->Run(env.local()) | 
|  | 1293                    .ToLocalChecked() | 
|  | 1294                    ->Int32Value(env.local()) | 
|  | 1295                    .FromJust()); | 
|  | 1296 } | 
|  | 1297 | 
|  | 1298 // Check that the descriptor passed to the callback is writable. | 
|  | 1299 namespace { | 
|  | 1300 void CheckWritablePropertyDefineCallback( | 
|  | 1301     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1302     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1303   CHECK(desc.has_writable()); | 
|  | 1304   CHECK(desc.writable()); | 
|  | 1305 | 
|  | 1306   // intercept the callback by setting a non-empty handle | 
|  | 1307   info.GetReturnValue().Set(name); | 
|  | 1308 } | 
|  | 1309 }  // namespace | 
|  | 1310 THREADED_TEST(PropertyDefinerCallbackWritable) { | 
|  | 1311   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1312   LocalContext env; | 
|  | 1313   v8::Local<v8::FunctionTemplate> templ = | 
|  | 1314       v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1315   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1316       0, 0, 0, 0, 0, CheckWritablePropertyDefineCallback)); | 
|  | 1317   env->Global() | 
|  | 1318       ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1319                                             .ToLocalChecked() | 
|  | 1320                                             ->NewInstance(env.local()) | 
|  | 1321                                             .ToLocalChecked()) | 
|  | 1322       .FromJust(); | 
|  | 1323   const char* code = | 
|  | 1324       "obj.x = 17; " | 
|  | 1325       "Object.defineProperty(obj, 'x', {value: 42, writable: true});" | 
|  | 1326       "obj.x;"; | 
|  | 1327   CHECK_EQ(17, v8_compile(code) | 
|  | 1328                    ->Run(env.local()) | 
|  | 1329                    .ToLocalChecked() | 
|  | 1330                    ->Int32Value(env.local()) | 
|  | 1331                    .FromJust()); | 
|  | 1332 } | 
|  | 1333 | 
|  | 1334 // Check that the descriptor passed to the callback has a getter. | 
|  | 1335 namespace { | 
|  | 1336 void CheckGetterPropertyDefineCallback( | 
|  | 1337     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1338     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1339   CHECK(desc.has_get()); | 
|  | 1340   CHECK(!desc.has_set()); | 
|  | 1341   // intercept the callback by setting a non-empty handle | 
|  | 1342   info.GetReturnValue().Set(name); | 
|  | 1343 } | 
|  | 1344 }  // namespace | 
|  | 1345 THREADED_TEST(PropertyDefinerCallbackWithGetter) { | 
|  | 1346   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1347   LocalContext env; | 
|  | 1348   v8::Local<v8::FunctionTemplate> templ = | 
|  | 1349       v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1350   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1351       0, 0, 0, 0, 0, CheckGetterPropertyDefineCallback)); | 
|  | 1352   env->Global() | 
|  | 1353       ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1354                                             .ToLocalChecked() | 
|  | 1355                                             ->NewInstance(env.local()) | 
|  | 1356                                             .ToLocalChecked()) | 
|  | 1357       .FromJust(); | 
|  | 1358   const char* code = | 
|  | 1359       "obj.x = 17;" | 
|  | 1360       "Object.defineProperty(obj, 'x', {get: function() {return 42;}});" | 
|  | 1361       "obj.x;"; | 
|  | 1362   CHECK_EQ(17, v8_compile(code) | 
|  | 1363                    ->Run(env.local()) | 
|  | 1364                    .ToLocalChecked() | 
|  | 1365                    ->Int32Value(env.local()) | 
|  | 1366                    .FromJust()); | 
|  | 1367 } | 
|  | 1368 | 
|  | 1369 // Check that the descriptor passed to the callback has a setter. | 
|  | 1370 namespace { | 
|  | 1371 void CheckSetterPropertyDefineCallback( | 
|  | 1372     Local<Name> name, const v8::PropertyDescriptor& desc, | 
|  | 1373     const v8::PropertyCallbackInfo<v8::Value>& info) { | 
|  | 1374   CHECK(desc.has_set()); | 
|  | 1375   CHECK(!desc.has_get()); | 
|  | 1376   // intercept the callback by setting a non-empty handle | 
|  | 1377   info.GetReturnValue().Set(name); | 
|  | 1378 } | 
|  | 1379 }  // namespace | 
|  | 1380 THREADED_TEST(PropertyDefinerCallbackWithSetter) { | 
|  | 1381   v8::HandleScope scope(CcTest::isolate()); | 
|  | 1382   LocalContext env; | 
|  | 1383   v8::Local<v8::FunctionTemplate> templ = | 
|  | 1384       v8::FunctionTemplate::New(CcTest::isolate()); | 
|  | 1385   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
|  | 1386       0, 0, 0, 0, 0, CheckSetterPropertyDefineCallback)); | 
|  | 1387   env->Global() | 
|  | 1388       ->Set(env.local(), v8_str("obj"), templ->GetFunction(env.local()) | 
|  | 1389                                             .ToLocalChecked() | 
|  | 1390                                             ->NewInstance(env.local()) | 
|  | 1391                                             .ToLocalChecked()) | 
|  | 1392       .FromJust(); | 
|  | 1393   const char* code = | 
|  | 1394       "Object.defineProperty(obj, 'x', {set: function() {return 42;}});" | 
|  | 1395       "obj.x = 17;"; | 
|  | 1396   CHECK_EQ(17, v8_compile(code) | 
|  | 1397                    ->Run(env.local()) | 
|  | 1398                    .ToLocalChecked() | 
|  | 1399                    ->Int32Value(env.local()) | 
|  | 1400                    .FromJust()); | 
|  | 1401 } | 
| 1106 | 1402 | 
| 1107 int echo_indexed_call_count = 0; | 1403 int echo_indexed_call_count = 0; | 
| 1108 | 1404 | 
| 1109 | 1405 | 
| 1110 static void EchoIndexedProperty( | 1406 static void EchoIndexedProperty( | 
| 1111     uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { | 1407     uint32_t index, const v8::PropertyCallbackInfo<v8::Value>& info) { | 
| 1112   ApiTestFuzzer::Fuzz(); | 1408   ApiTestFuzzer::Fuzz(); | 
| 1113   CHECK(v8_num(637) | 1409   CHECK(v8_num(637) | 
| 1114             ->Equals(info.GetIsolate()->GetCurrentContext(), info.Data()) | 1410             ->Equals(info.GetIsolate()->GetCurrentContext(), info.Data()) | 
| 1115             .FromJust()); | 1411             .FromJust()); | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 1143 THREADED_TEST(PropertyHandlerInPrototype) { | 1439 THREADED_TEST(PropertyHandlerInPrototype) { | 
| 1144   LocalContext env; | 1440   LocalContext env; | 
| 1145   v8::Isolate* isolate = env->GetIsolate(); | 1441   v8::Isolate* isolate = env->GetIsolate(); | 
| 1146   v8::HandleScope scope(isolate); | 1442   v8::HandleScope scope(isolate); | 
| 1147 | 1443 | 
| 1148   // Set up a prototype chain with three interceptors. | 1444   // Set up a prototype chain with three interceptors. | 
| 1149   v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate); | 1445   v8::Local<v8::FunctionTemplate> templ = v8::FunctionTemplate::New(isolate); | 
| 1150   templ->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration( | 1446   templ->InstanceTemplate()->SetHandler(v8::IndexedPropertyHandlerConfiguration( | 
| 1151       CheckThisIndexedPropertyHandler, CheckThisIndexedPropertySetter, | 1447       CheckThisIndexedPropertyHandler, CheckThisIndexedPropertySetter, | 
| 1152       CheckThisIndexedPropertyQuery, CheckThisIndexedPropertyDeleter, | 1448       CheckThisIndexedPropertyQuery, CheckThisIndexedPropertyDeleter, | 
| 1153       CheckThisIndexedPropertyEnumerator)); | 1449       CheckThisIndexedPropertyEnumerator, CheckThisIndexedPropertyDefiner)); | 
| 1154 | 1450 | 
| 1155   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 1451   templ->InstanceTemplate()->SetHandler(v8::NamedPropertyHandlerConfiguration( | 
| 1156       CheckThisNamedPropertyHandler, CheckThisNamedPropertySetter, | 1452       CheckThisNamedPropertyHandler, CheckThisNamedPropertySetter, | 
| 1157       CheckThisNamedPropertyQuery, CheckThisNamedPropertyDeleter, | 1453       CheckThisNamedPropertyQuery, CheckThisNamedPropertyDeleter, | 
| 1158       CheckThisNamedPropertyEnumerator)); | 1454       CheckThisNamedPropertyEnumerator, CheckThisNamedPropertyDefiner)); | 
| 1159 | 1455 | 
| 1160   bottom = templ->GetFunction(env.local()) | 1456   bottom = templ->GetFunction(env.local()) | 
| 1161                .ToLocalChecked() | 1457                .ToLocalChecked() | 
| 1162                ->NewInstance(env.local()) | 1458                ->NewInstance(env.local()) | 
| 1163                .ToLocalChecked(); | 1459                .ToLocalChecked(); | 
| 1164   Local<v8::Object> top = templ->GetFunction(env.local()) | 1460   Local<v8::Object> top = templ->GetFunction(env.local()) | 
| 1165                               .ToLocalChecked() | 1461                               .ToLocalChecked() | 
| 1166                               ->NewInstance(env.local()) | 1462                               ->NewInstance(env.local()) | 
| 1167                               .ToLocalChecked(); | 1463                               .ToLocalChecked(); | 
| 1168   Local<v8::Object> middle = templ->GetFunction(env.local()) | 1464   Local<v8::Object> middle = templ->GetFunction(env.local()) | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 1185   // Indexed and named query. | 1481   // Indexed and named query. | 
| 1186   CompileRun("0 in obj"); | 1482   CompileRun("0 in obj"); | 
| 1187   CompileRun("'x' in obj"); | 1483   CompileRun("'x' in obj"); | 
| 1188 | 1484 | 
| 1189   // Indexed and named deleter. | 1485   // Indexed and named deleter. | 
| 1190   CompileRun("delete obj[0]"); | 1486   CompileRun("delete obj[0]"); | 
| 1191   CompileRun("delete obj.x"); | 1487   CompileRun("delete obj.x"); | 
| 1192 | 1488 | 
| 1193   // Enumerators. | 1489   // Enumerators. | 
| 1194   CompileRun("for (var p in obj) ;"); | 1490   CompileRun("for (var p in obj) ;"); | 
|  | 1491 | 
|  | 1492   // Indexed and named definer. | 
|  | 1493   CompileRun("Object.defineProperty(obj, 2, {});"); | 
|  | 1494   CompileRun("Object.defineProperty(obj, 'z', {});"); | 
| 1195 } | 1495 } | 
| 1196 | 1496 | 
| 1197 | 1497 | 
| 1198 bool is_bootstrapping = false; | 1498 bool is_bootstrapping = false; | 
| 1199 static void PrePropertyHandlerGet( | 1499 static void PrePropertyHandlerGet( | 
| 1200     Local<Name> key, const v8::PropertyCallbackInfo<v8::Value>& info) { | 1500     Local<Name> key, const v8::PropertyCallbackInfo<v8::Value>& info) { | 
| 1201   ApiTestFuzzer::Fuzz(); | 1501   ApiTestFuzzer::Fuzz(); | 
| 1202   if (!is_bootstrapping && | 1502   if (!is_bootstrapping && | 
| 1203       v8_str("pre") | 1503       v8_str("pre") | 
| 1204           ->Equals(info.GetIsolate()->GetCurrentContext(), key) | 1504           ->Equals(info.GetIsolate()->GetCurrentContext(), key) | 
| (...skipping 2780 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3985             ->Set(env.local(), v8_str("Fun"), | 4285             ->Set(env.local(), v8_str("Fun"), | 
| 3986                   fun_templ->GetFunction(env.local()).ToLocalChecked()) | 4286                   fun_templ->GetFunction(env.local()).ToLocalChecked()) | 
| 3987             .FromJust()); | 4287             .FromJust()); | 
| 3988 | 4288 | 
| 3989   CompileRun( | 4289   CompileRun( | 
| 3990       "var f = new Fun();" | 4290       "var f = new Fun();" | 
| 3991       "Number.prototype.__proto__ = f;" | 4291       "Number.prototype.__proto__ = f;" | 
| 3992       "var a = 42;" | 4292       "var a = 42;" | 
| 3993       "for (var i = 0; i<3; i++) { a.foo; }"); | 4293       "for (var i = 0; i<3; i++) { a.foo; }"); | 
| 3994 } | 4294 } | 
| OLD | NEW | 
|---|