| OLD | NEW |
| 1 // Copyright 2007-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2008 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 static inline bool IsDeadCheck(const char* location) { | 167 static inline bool IsDeadCheck(const char* location) { |
| 168 return has_shut_down ? ReportV8Dead(location) : false; | 168 return has_shut_down ? ReportV8Dead(location) : false; |
| 169 } | 169 } |
| 170 | 170 |
| 171 | 171 |
| 172 static inline bool EmptyCheck(const char* location, v8::Handle<v8::Data> obj) { | 172 static inline bool EmptyCheck(const char* location, v8::Handle<v8::Data> obj) { |
| 173 return obj.IsEmpty() ? ReportEmptyHandle(location) : false; | 173 return obj.IsEmpty() ? ReportEmptyHandle(location) : false; |
| 174 } | 174 } |
| 175 | 175 |
| 176 | 176 |
| 177 static inline bool EmptyCheck(const char* location, v8::Data* obj) { | 177 static inline bool EmptyCheck(const char* location, const v8::Data* obj) { |
| 178 return (obj == 0) ? ReportEmptyHandle(location) : false; | 178 return (obj == 0) ? ReportEmptyHandle(location) : false; |
| 179 } | 179 } |
| 180 | 180 |
| 181 // --- S t a t i c s --- | 181 // --- S t a t i c s --- |
| 182 | 182 |
| 183 | 183 |
| 184 static i::StringInputBuffer write_input_buffer; | 184 static i::StringInputBuffer write_input_buffer; |
| 185 | 185 |
| 186 | 186 |
| 187 static void EnsureInitialized(const char* location) { | 187 static void EnsureInitialized(const char* location) { |
| (...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 | 1130 |
| 1131 | 1131 |
| 1132 void v8::TryCatch::SetCaptureMessage(bool value) { | 1132 void v8::TryCatch::SetCaptureMessage(bool value) { |
| 1133 capture_message_ = value; | 1133 capture_message_ = value; |
| 1134 } | 1134 } |
| 1135 | 1135 |
| 1136 | 1136 |
| 1137 // --- M e s s a g e --- | 1137 // --- M e s s a g e --- |
| 1138 | 1138 |
| 1139 | 1139 |
| 1140 Local<String> Message::Get() { | 1140 Local<String> Message::Get() const { |
| 1141 ON_BAILOUT("v8::Message::Get()", return Local<String>()); | 1141 ON_BAILOUT("v8::Message::Get()", return Local<String>()); |
| 1142 HandleScope scope; | 1142 HandleScope scope; |
| 1143 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1143 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1144 i::Handle<i::String> raw_result = i::MessageHandler::GetMessage(obj); | 1144 i::Handle<i::String> raw_result = i::MessageHandler::GetMessage(obj); |
| 1145 Local<String> result = Utils::ToLocal(raw_result); | 1145 Local<String> result = Utils::ToLocal(raw_result); |
| 1146 return scope.Close(result); | 1146 return scope.Close(result); |
| 1147 } | 1147 } |
| 1148 | 1148 |
| 1149 | 1149 |
| 1150 v8::Handle<Value> Message::GetScriptResourceName() { | 1150 v8::Handle<Value> Message::GetScriptResourceName() const { |
| 1151 if (IsDeadCheck("v8::Message::GetScriptResourceName()")) { | 1151 if (IsDeadCheck("v8::Message::GetScriptResourceName()")) { |
| 1152 return Local<String>(); | 1152 return Local<String>(); |
| 1153 } | 1153 } |
| 1154 HandleScope scope; | 1154 HandleScope scope; |
| 1155 i::Handle<i::JSObject> obj = | 1155 i::Handle<i::JSObject> obj = |
| 1156 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); | 1156 i::Handle<i::JSObject>::cast(Utils::OpenHandle(this)); |
| 1157 // Return this.script.name. | 1157 // Return this.script.name. |
| 1158 i::Handle<i::JSValue> script = | 1158 i::Handle<i::JSValue> script = |
| 1159 i::Handle<i::JSValue>::cast(GetProperty(obj, "script")); | 1159 i::Handle<i::JSValue>::cast(GetProperty(obj, "script")); |
| 1160 i::Handle<i::Object> resource_name(i::Script::cast(script->value())->name()); | 1160 i::Handle<i::Object> resource_name(i::Script::cast(script->value())->name()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1182 bool* has_pending_exception) { | 1182 bool* has_pending_exception) { |
| 1183 i::Object** argv[1] = { data.location() }; | 1183 i::Object** argv[1] = { data.location() }; |
| 1184 return CallV8HeapFunction(name, | 1184 return CallV8HeapFunction(name, |
| 1185 i::Top::builtins(), | 1185 i::Top::builtins(), |
| 1186 1, | 1186 1, |
| 1187 argv, | 1187 argv, |
| 1188 has_pending_exception); | 1188 has_pending_exception); |
| 1189 } | 1189 } |
| 1190 | 1190 |
| 1191 | 1191 |
| 1192 int Message::GetLineNumber() { | 1192 int Message::GetLineNumber() const { |
| 1193 ON_BAILOUT("v8::Message::GetLineNumber()", return -1); | 1193 ON_BAILOUT("v8::Message::GetLineNumber()", return -1); |
| 1194 HandleScope scope; | 1194 HandleScope scope; |
| 1195 EXCEPTION_PREAMBLE(); | 1195 EXCEPTION_PREAMBLE(); |
| 1196 i::Handle<i::Object> result = CallV8HeapFunction("GetLineNumber", | 1196 i::Handle<i::Object> result = CallV8HeapFunction("GetLineNumber", |
| 1197 Utils::OpenHandle(this), | 1197 Utils::OpenHandle(this), |
| 1198 &has_pending_exception); | 1198 &has_pending_exception); |
| 1199 EXCEPTION_BAILOUT_CHECK(0); | 1199 EXCEPTION_BAILOUT_CHECK(0); |
| 1200 return static_cast<int>(result->Number()); | 1200 return static_cast<int>(result->Number()); |
| 1201 } | 1201 } |
| 1202 | 1202 |
| 1203 | 1203 |
| 1204 int Message::GetStartPosition() { | 1204 int Message::GetStartPosition() const { |
| 1205 if (IsDeadCheck("v8::Message::GetStartPosition()")) return 0; | 1205 if (IsDeadCheck("v8::Message::GetStartPosition()")) return 0; |
| 1206 HandleScope scope; | 1206 HandleScope scope; |
| 1207 | 1207 |
| 1208 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1208 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
| 1209 return static_cast<int>(GetProperty(data_obj, "startPos")->Number()); | 1209 return static_cast<int>(GetProperty(data_obj, "startPos")->Number()); |
| 1210 } | 1210 } |
| 1211 | 1211 |
| 1212 | 1212 |
| 1213 int Message::GetEndPosition() { | 1213 int Message::GetEndPosition() const { |
| 1214 if (IsDeadCheck("v8::Message::GetEndPosition()")) return 0; | 1214 if (IsDeadCheck("v8::Message::GetEndPosition()")) return 0; |
| 1215 HandleScope scope; | 1215 HandleScope scope; |
| 1216 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1216 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
| 1217 return static_cast<int>(GetProperty(data_obj, "endPos")->Number()); | 1217 return static_cast<int>(GetProperty(data_obj, "endPos")->Number()); |
| 1218 } | 1218 } |
| 1219 | 1219 |
| 1220 | 1220 |
| 1221 int Message::GetStartColumn() { | 1221 int Message::GetStartColumn() const { |
| 1222 if (IsDeadCheck("v8::Message::GetStartColumn()")) return 0; | 1222 if (IsDeadCheck("v8::Message::GetStartColumn()")) return 0; |
| 1223 HandleScope scope; | 1223 HandleScope scope; |
| 1224 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1224 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
| 1225 EXCEPTION_PREAMBLE(); | 1225 EXCEPTION_PREAMBLE(); |
| 1226 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( | 1226 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( |
| 1227 "GetPositionInLine", | 1227 "GetPositionInLine", |
| 1228 data_obj, | 1228 data_obj, |
| 1229 &has_pending_exception); | 1229 &has_pending_exception); |
| 1230 EXCEPTION_BAILOUT_CHECK(0); | 1230 EXCEPTION_BAILOUT_CHECK(0); |
| 1231 return static_cast<int>(start_col_obj->Number()); | 1231 return static_cast<int>(start_col_obj->Number()); |
| 1232 } | 1232 } |
| 1233 | 1233 |
| 1234 | 1234 |
| 1235 int Message::GetEndColumn() { | 1235 int Message::GetEndColumn() const { |
| 1236 if (IsDeadCheck("v8::Message::GetEndColumn()")) return 0; | 1236 if (IsDeadCheck("v8::Message::GetEndColumn()")) return 0; |
| 1237 HandleScope scope; | 1237 HandleScope scope; |
| 1238 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1238 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
| 1239 EXCEPTION_PREAMBLE(); | 1239 EXCEPTION_PREAMBLE(); |
| 1240 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( | 1240 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( |
| 1241 "GetPositionInLine", | 1241 "GetPositionInLine", |
| 1242 data_obj, | 1242 data_obj, |
| 1243 &has_pending_exception); | 1243 &has_pending_exception); |
| 1244 EXCEPTION_BAILOUT_CHECK(0); | 1244 EXCEPTION_BAILOUT_CHECK(0); |
| 1245 int start = static_cast<int>(GetProperty(data_obj, "startPos")->Number()); | 1245 int start = static_cast<int>(GetProperty(data_obj, "startPos")->Number()); |
| 1246 int end = static_cast<int>(GetProperty(data_obj, "endPos")->Number()); | 1246 int end = static_cast<int>(GetProperty(data_obj, "endPos")->Number()); |
| 1247 return static_cast<int>(start_col_obj->Number()) + (end - start); | 1247 return static_cast<int>(start_col_obj->Number()) + (end - start); |
| 1248 } | 1248 } |
| 1249 | 1249 |
| 1250 | 1250 |
| 1251 Local<String> Message::GetSourceLine() { | 1251 Local<String> Message::GetSourceLine() const { |
| 1252 ON_BAILOUT("v8::Message::GetSourceLine()", return Local<String>()); | 1252 ON_BAILOUT("v8::Message::GetSourceLine()", return Local<String>()); |
| 1253 HandleScope scope; | 1253 HandleScope scope; |
| 1254 EXCEPTION_PREAMBLE(); | 1254 EXCEPTION_PREAMBLE(); |
| 1255 i::Handle<i::Object> result = CallV8HeapFunction("GetSourceLine", | 1255 i::Handle<i::Object> result = CallV8HeapFunction("GetSourceLine", |
| 1256 Utils::OpenHandle(this), | 1256 Utils::OpenHandle(this), |
| 1257 &has_pending_exception); | 1257 &has_pending_exception); |
| 1258 EXCEPTION_BAILOUT_CHECK(Local<v8::String>()); | 1258 EXCEPTION_BAILOUT_CHECK(Local<v8::String>()); |
| 1259 if (result->IsString()) { | 1259 if (result->IsString()) { |
| 1260 return scope.Close(Utils::ToLocal(i::Handle<i::String>::cast(result))); | 1260 return scope.Close(Utils::ToLocal(i::Handle<i::String>::cast(result))); |
| 1261 } else { | 1261 } else { |
| 1262 return Local<String>(); | 1262 return Local<String>(); |
| 1263 } | 1263 } |
| 1264 } | 1264 } |
| 1265 | 1265 |
| 1266 | 1266 |
| 1267 void Message::PrintCurrentStackTrace(FILE* out) { | 1267 void Message::PrintCurrentStackTrace(FILE* out) { |
| 1268 if (IsDeadCheck("v8::Message::PrintCurrentStackTrace()")) return; | 1268 if (IsDeadCheck("v8::Message::PrintCurrentStackTrace()")) return; |
| 1269 i::Top::PrintCurrentStackTrace(out); | 1269 i::Top::PrintCurrentStackTrace(out); |
| 1270 } | 1270 } |
| 1271 | 1271 |
| 1272 | 1272 |
| 1273 // --- D a t a --- | 1273 // --- D a t a --- |
| 1274 | 1274 |
| 1275 bool Value::IsUndefined() { | 1275 bool Value::IsUndefined() const { |
| 1276 if (IsDeadCheck("v8::Value::IsUndefined()")) return false; | 1276 if (IsDeadCheck("v8::Value::IsUndefined()")) return false; |
| 1277 return Utils::OpenHandle(this)->IsUndefined(); | 1277 return Utils::OpenHandle(this)->IsUndefined(); |
| 1278 } | 1278 } |
| 1279 | 1279 |
| 1280 | 1280 |
| 1281 bool Value::IsNull() { | 1281 bool Value::IsNull() const { |
| 1282 if (IsDeadCheck("v8::Value::IsNull()")) return false; | 1282 if (IsDeadCheck("v8::Value::IsNull()")) return false; |
| 1283 return Utils::OpenHandle(this)->IsNull(); | 1283 return Utils::OpenHandle(this)->IsNull(); |
| 1284 } | 1284 } |
| 1285 | 1285 |
| 1286 | 1286 |
| 1287 bool Value::IsTrue() { | 1287 bool Value::IsTrue() const { |
| 1288 if (IsDeadCheck("v8::Value::IsTrue()")) return false; | 1288 if (IsDeadCheck("v8::Value::IsTrue()")) return false; |
| 1289 return Utils::OpenHandle(this)->IsTrue(); | 1289 return Utils::OpenHandle(this)->IsTrue(); |
| 1290 } | 1290 } |
| 1291 | 1291 |
| 1292 | 1292 |
| 1293 bool Value::IsFalse() { | 1293 bool Value::IsFalse() const { |
| 1294 if (IsDeadCheck("v8::Value::IsFalse()")) return false; | 1294 if (IsDeadCheck("v8::Value::IsFalse()")) return false; |
| 1295 return Utils::OpenHandle(this)->IsFalse(); | 1295 return Utils::OpenHandle(this)->IsFalse(); |
| 1296 } | 1296 } |
| 1297 | 1297 |
| 1298 | 1298 |
| 1299 bool Value::IsFunction() { | 1299 bool Value::IsFunction() const { |
| 1300 if (IsDeadCheck("v8::Value::IsFunction()")) return false; | 1300 if (IsDeadCheck("v8::Value::IsFunction()")) return false; |
| 1301 return Utils::OpenHandle(this)->IsJSFunction(); | 1301 return Utils::OpenHandle(this)->IsJSFunction(); |
| 1302 } | 1302 } |
| 1303 | 1303 |
| 1304 | 1304 |
| 1305 bool Value::IsString() { | 1305 bool Value::IsString() const { |
| 1306 if (IsDeadCheck("v8::Value::IsString()")) return false; | 1306 if (IsDeadCheck("v8::Value::IsString()")) return false; |
| 1307 return Utils::OpenHandle(this)->IsString(); | 1307 return Utils::OpenHandle(this)->IsString(); |
| 1308 } | 1308 } |
| 1309 | 1309 |
| 1310 | 1310 |
| 1311 bool Value::IsArray() { | 1311 bool Value::IsArray() const { |
| 1312 if (IsDeadCheck("v8::Value::IsArray()")) return false; | 1312 if (IsDeadCheck("v8::Value::IsArray()")) return false; |
| 1313 return Utils::OpenHandle(this)->IsJSArray(); | 1313 return Utils::OpenHandle(this)->IsJSArray(); |
| 1314 } | 1314 } |
| 1315 | 1315 |
| 1316 | 1316 |
| 1317 bool Value::IsObject() { | 1317 bool Value::IsObject() const { |
| 1318 if (IsDeadCheck("v8::Value::IsObject()")) return false; | 1318 if (IsDeadCheck("v8::Value::IsObject()")) return false; |
| 1319 return Utils::OpenHandle(this)->IsJSObject(); | 1319 return Utils::OpenHandle(this)->IsJSObject(); |
| 1320 } | 1320 } |
| 1321 | 1321 |
| 1322 | 1322 |
| 1323 bool Value::IsNumber() { | 1323 bool Value::IsNumber() const { |
| 1324 if (IsDeadCheck("v8::Value::IsNumber()")) return false; | 1324 if (IsDeadCheck("v8::Value::IsNumber()")) return false; |
| 1325 return Utils::OpenHandle(this)->IsNumber(); | 1325 return Utils::OpenHandle(this)->IsNumber(); |
| 1326 } | 1326 } |
| 1327 | 1327 |
| 1328 | 1328 |
| 1329 bool Value::IsBoolean() { | 1329 bool Value::IsBoolean() const { |
| 1330 if (IsDeadCheck("v8::Value::IsBoolean()")) return false; | 1330 if (IsDeadCheck("v8::Value::IsBoolean()")) return false; |
| 1331 return Utils::OpenHandle(this)->IsBoolean(); | 1331 return Utils::OpenHandle(this)->IsBoolean(); |
| 1332 } | 1332 } |
| 1333 | 1333 |
| 1334 | 1334 |
| 1335 bool Value::IsExternal() { | 1335 bool Value::IsExternal() const { |
| 1336 if (IsDeadCheck("v8::Value::IsExternal()")) return false; | 1336 if (IsDeadCheck("v8::Value::IsExternal()")) return false; |
| 1337 return Utils::OpenHandle(this)->IsProxy(); | 1337 return Utils::OpenHandle(this)->IsProxy(); |
| 1338 } | 1338 } |
| 1339 | 1339 |
| 1340 | 1340 |
| 1341 bool Value::IsInt32() { | 1341 bool Value::IsInt32() const { |
| 1342 if (IsDeadCheck("v8::Value::IsInt32()")) return false; | 1342 if (IsDeadCheck("v8::Value::IsInt32()")) return false; |
| 1343 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1343 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1344 if (obj->IsSmi()) return true; | 1344 if (obj->IsSmi()) return true; |
| 1345 if (obj->IsNumber()) { | 1345 if (obj->IsNumber()) { |
| 1346 double value = obj->Number(); | 1346 double value = obj->Number(); |
| 1347 return i::FastI2D(i::FastD2I(value)) == value; | 1347 return i::FastI2D(i::FastD2I(value)) == value; |
| 1348 } | 1348 } |
| 1349 return false; | 1349 return false; |
| 1350 } | 1350 } |
| 1351 | 1351 |
| 1352 | 1352 |
| 1353 bool Value::IsDate() { | 1353 bool Value::IsDate() const { |
| 1354 if (IsDeadCheck("v8::Value::IsDate()")) return false; | 1354 if (IsDeadCheck("v8::Value::IsDate()")) return false; |
| 1355 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1355 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1356 return obj->HasSpecificClassOf(i::Heap::Date_symbol()); | 1356 return obj->HasSpecificClassOf(i::Heap::Date_symbol()); |
| 1357 } | 1357 } |
| 1358 | 1358 |
| 1359 | 1359 |
| 1360 Local<String> Value::ToString() { | 1360 Local<String> Value::ToString() const { |
| 1361 if (IsDeadCheck("v8::Value::ToString()")) return Local<String>(); | 1361 if (IsDeadCheck("v8::Value::ToString()")) return Local<String>(); |
| 1362 LOG_API("ToString"); | 1362 LOG_API("ToString"); |
| 1363 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1363 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1364 i::Handle<i::Object> str; | 1364 i::Handle<i::Object> str; |
| 1365 if (obj->IsString()) { | 1365 if (obj->IsString()) { |
| 1366 str = obj; | 1366 str = obj; |
| 1367 } else { | 1367 } else { |
| 1368 EXCEPTION_PREAMBLE(); | 1368 EXCEPTION_PREAMBLE(); |
| 1369 str = i::Execution::ToString(obj, &has_pending_exception); | 1369 str = i::Execution::ToString(obj, &has_pending_exception); |
| 1370 EXCEPTION_BAILOUT_CHECK(Local<String>()); | 1370 EXCEPTION_BAILOUT_CHECK(Local<String>()); |
| 1371 } | 1371 } |
| 1372 return Local<String>(ToApi<String>(str)); | 1372 return Local<String>(ToApi<String>(str)); |
| 1373 } | 1373 } |
| 1374 | 1374 |
| 1375 | 1375 |
| 1376 Local<String> Value::ToDetailString() { | 1376 Local<String> Value::ToDetailString() const { |
| 1377 if (IsDeadCheck("v8::Value::ToDetailString()")) return Local<String>(); | 1377 if (IsDeadCheck("v8::Value::ToDetailString()")) return Local<String>(); |
| 1378 LOG_API("ToDetailString"); | 1378 LOG_API("ToDetailString"); |
| 1379 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1379 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1380 i::Handle<i::Object> str; | 1380 i::Handle<i::Object> str; |
| 1381 if (obj->IsString()) { | 1381 if (obj->IsString()) { |
| 1382 str = obj; | 1382 str = obj; |
| 1383 } else { | 1383 } else { |
| 1384 EXCEPTION_PREAMBLE(); | 1384 EXCEPTION_PREAMBLE(); |
| 1385 str = i::Execution::ToDetailString(obj, &has_pending_exception); | 1385 str = i::Execution::ToDetailString(obj, &has_pending_exception); |
| 1386 EXCEPTION_BAILOUT_CHECK(Local<String>()); | 1386 EXCEPTION_BAILOUT_CHECK(Local<String>()); |
| 1387 } | 1387 } |
| 1388 return Local<String>(ToApi<String>(str)); | 1388 return Local<String>(ToApi<String>(str)); |
| 1389 } | 1389 } |
| 1390 | 1390 |
| 1391 | 1391 |
| 1392 Local<v8::Object> Value::ToObject() { | 1392 Local<v8::Object> Value::ToObject() const { |
| 1393 if (IsDeadCheck("v8::Value::ToObject()")) return Local<v8::Object>(); | 1393 if (IsDeadCheck("v8::Value::ToObject()")) return Local<v8::Object>(); |
| 1394 LOG_API("ToObject"); | 1394 LOG_API("ToObject"); |
| 1395 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1395 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1396 i::Handle<i::Object> val; | 1396 i::Handle<i::Object> val; |
| 1397 if (obj->IsJSObject()) { | 1397 if (obj->IsJSObject()) { |
| 1398 val = obj; | 1398 val = obj; |
| 1399 } else { | 1399 } else { |
| 1400 EXCEPTION_PREAMBLE(); | 1400 EXCEPTION_PREAMBLE(); |
| 1401 val = i::Execution::ToObject(obj, &has_pending_exception); | 1401 val = i::Execution::ToObject(obj, &has_pending_exception); |
| 1402 EXCEPTION_BAILOUT_CHECK(Local<v8::Object>()); | 1402 EXCEPTION_BAILOUT_CHECK(Local<v8::Object>()); |
| 1403 } | 1403 } |
| 1404 return Local<v8::Object>(ToApi<Object>(val)); | 1404 return Local<v8::Object>(ToApi<Object>(val)); |
| 1405 } | 1405 } |
| 1406 | 1406 |
| 1407 | 1407 |
| 1408 Local<Boolean> Value::ToBoolean() { | 1408 Local<Boolean> Value::ToBoolean() const { |
| 1409 if (IsDeadCheck("v8::Value::ToBoolean()")) return Local<Boolean>(); | 1409 if (IsDeadCheck("v8::Value::ToBoolean()")) return Local<Boolean>(); |
| 1410 LOG_API("ToBoolean"); | 1410 LOG_API("ToBoolean"); |
| 1411 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1411 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1412 i::Handle<i::Object> val = | 1412 i::Handle<i::Object> val = |
| 1413 obj->IsBoolean() ? obj : i::Execution::ToBoolean(obj); | 1413 obj->IsBoolean() ? obj : i::Execution::ToBoolean(obj); |
| 1414 return Local<Boolean>(ToApi<Boolean>(val)); | 1414 return Local<Boolean>(ToApi<Boolean>(val)); |
| 1415 } | 1415 } |
| 1416 | 1416 |
| 1417 | 1417 |
| 1418 Local<Number> Value::ToNumber() { | 1418 Local<Number> Value::ToNumber() const { |
| 1419 if (IsDeadCheck("v8::Value::ToNumber()")) return Local<Number>(); | 1419 if (IsDeadCheck("v8::Value::ToNumber()")) return Local<Number>(); |
| 1420 LOG_API("ToNumber"); | 1420 LOG_API("ToNumber"); |
| 1421 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1421 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1422 i::Handle<i::Object> num; | 1422 i::Handle<i::Object> num; |
| 1423 if (obj->IsNumber()) { | 1423 if (obj->IsNumber()) { |
| 1424 num = obj; | 1424 num = obj; |
| 1425 } else { | 1425 } else { |
| 1426 EXCEPTION_PREAMBLE(); | 1426 EXCEPTION_PREAMBLE(); |
| 1427 num = i::Execution::ToNumber(obj, &has_pending_exception); | 1427 num = i::Execution::ToNumber(obj, &has_pending_exception); |
| 1428 EXCEPTION_BAILOUT_CHECK(Local<Number>()); | 1428 EXCEPTION_BAILOUT_CHECK(Local<Number>()); |
| 1429 } | 1429 } |
| 1430 return Local<Number>(ToApi<Number>(num)); | 1430 return Local<Number>(ToApi<Number>(num)); |
| 1431 } | 1431 } |
| 1432 | 1432 |
| 1433 | 1433 |
| 1434 Local<Integer> Value::ToInteger() { | 1434 Local<Integer> Value::ToInteger() const { |
| 1435 if (IsDeadCheck("v8::Value::ToInteger()")) return Local<Integer>(); | 1435 if (IsDeadCheck("v8::Value::ToInteger()")) return Local<Integer>(); |
| 1436 LOG_API("ToInteger"); | 1436 LOG_API("ToInteger"); |
| 1437 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1437 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1438 i::Handle<i::Object> num; | 1438 i::Handle<i::Object> num; |
| 1439 if (obj->IsSmi()) { | 1439 if (obj->IsSmi()) { |
| 1440 num = obj; | 1440 num = obj; |
| 1441 } else { | 1441 } else { |
| 1442 EXCEPTION_PREAMBLE(); | 1442 EXCEPTION_PREAMBLE(); |
| 1443 num = i::Execution::ToInteger(obj, &has_pending_exception); | 1443 num = i::Execution::ToInteger(obj, &has_pending_exception); |
| 1444 EXCEPTION_BAILOUT_CHECK(Local<Integer>()); | 1444 EXCEPTION_BAILOUT_CHECK(Local<Integer>()); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 v8::Date* v8::Date::Cast(v8::Value* that) { | 1520 v8::Date* v8::Date::Cast(v8::Value* that) { |
| 1521 if (IsDeadCheck("v8::Date::Cast()")) return 0; | 1521 if (IsDeadCheck("v8::Date::Cast()")) return 0; |
| 1522 i::Handle<i::Object> obj = Utils::OpenHandle(that); | 1522 i::Handle<i::Object> obj = Utils::OpenHandle(that); |
| 1523 ApiCheck(obj->HasSpecificClassOf(i::Heap::Date_symbol()), | 1523 ApiCheck(obj->HasSpecificClassOf(i::Heap::Date_symbol()), |
| 1524 "v8::Date::Cast()", | 1524 "v8::Date::Cast()", |
| 1525 "Could not convert to date"); | 1525 "Could not convert to date"); |
| 1526 return static_cast<v8::Date*>(that); | 1526 return static_cast<v8::Date*>(that); |
| 1527 } | 1527 } |
| 1528 | 1528 |
| 1529 | 1529 |
| 1530 bool Value::BooleanValue() { | 1530 bool Value::BooleanValue() const { |
| 1531 if (IsDeadCheck("v8::Value::BooleanValue()")) return false; | 1531 if (IsDeadCheck("v8::Value::BooleanValue()")) return false; |
| 1532 LOG_API("BooleanValue"); | 1532 LOG_API("BooleanValue"); |
| 1533 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1533 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1534 i::Handle<i::Object> value = | 1534 i::Handle<i::Object> value = |
| 1535 obj->IsBoolean() ? obj : i::Execution::ToBoolean(obj); | 1535 obj->IsBoolean() ? obj : i::Execution::ToBoolean(obj); |
| 1536 return value->IsTrue(); | 1536 return value->IsTrue(); |
| 1537 } | 1537 } |
| 1538 | 1538 |
| 1539 | 1539 |
| 1540 double Value::NumberValue() { | 1540 double Value::NumberValue() const { |
| 1541 if (IsDeadCheck("v8::Value::NumberValue()")) return i::OS::nan_value(); | 1541 if (IsDeadCheck("v8::Value::NumberValue()")) return i::OS::nan_value(); |
| 1542 LOG_API("NumberValue"); | 1542 LOG_API("NumberValue"); |
| 1543 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1543 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1544 i::Handle<i::Object> num; | 1544 i::Handle<i::Object> num; |
| 1545 if (obj->IsNumber()) { | 1545 if (obj->IsNumber()) { |
| 1546 num = obj; | 1546 num = obj; |
| 1547 } else { | 1547 } else { |
| 1548 EXCEPTION_PREAMBLE(); | 1548 EXCEPTION_PREAMBLE(); |
| 1549 num = i::Execution::ToNumber(obj, &has_pending_exception); | 1549 num = i::Execution::ToNumber(obj, &has_pending_exception); |
| 1550 EXCEPTION_BAILOUT_CHECK(i::OS::nan_value()); | 1550 EXCEPTION_BAILOUT_CHECK(i::OS::nan_value()); |
| 1551 } | 1551 } |
| 1552 return num->Number(); | 1552 return num->Number(); |
| 1553 } | 1553 } |
| 1554 | 1554 |
| 1555 | 1555 |
| 1556 int64_t Value::IntegerValue() { | 1556 int64_t Value::IntegerValue() const { |
| 1557 if (IsDeadCheck("v8::Value::IntegerValue()")) return 0; | 1557 if (IsDeadCheck("v8::Value::IntegerValue()")) return 0; |
| 1558 LOG_API("IntegerValue"); | 1558 LOG_API("IntegerValue"); |
| 1559 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1559 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1560 i::Handle<i::Object> num; | 1560 i::Handle<i::Object> num; |
| 1561 if (obj->IsNumber()) { | 1561 if (obj->IsNumber()) { |
| 1562 num = obj; | 1562 num = obj; |
| 1563 } else { | 1563 } else { |
| 1564 EXCEPTION_PREAMBLE(); | 1564 EXCEPTION_PREAMBLE(); |
| 1565 num = i::Execution::ToInteger(obj, &has_pending_exception); | 1565 num = i::Execution::ToInteger(obj, &has_pending_exception); |
| 1566 EXCEPTION_BAILOUT_CHECK(0); | 1566 EXCEPTION_BAILOUT_CHECK(0); |
| 1567 } | 1567 } |
| 1568 if (num->IsSmi()) { | 1568 if (num->IsSmi()) { |
| 1569 return i::Smi::cast(*num)->value(); | 1569 return i::Smi::cast(*num)->value(); |
| 1570 } else { | 1570 } else { |
| 1571 return static_cast<int64_t>(num->Number()); | 1571 return static_cast<int64_t>(num->Number()); |
| 1572 } | 1572 } |
| 1573 } | 1573 } |
| 1574 | 1574 |
| 1575 | 1575 |
| 1576 Local<Int32> Value::ToInt32() { | 1576 Local<Int32> Value::ToInt32() const { |
| 1577 if (IsDeadCheck("v8::Value::ToInt32()")) return Local<Int32>(); | 1577 if (IsDeadCheck("v8::Value::ToInt32()")) return Local<Int32>(); |
| 1578 LOG_API("ToInt32"); | 1578 LOG_API("ToInt32"); |
| 1579 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1579 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1580 i::Handle<i::Object> num; | 1580 i::Handle<i::Object> num; |
| 1581 if (obj->IsSmi()) { | 1581 if (obj->IsSmi()) { |
| 1582 num = obj; | 1582 num = obj; |
| 1583 } else { | 1583 } else { |
| 1584 EXCEPTION_PREAMBLE(); | 1584 EXCEPTION_PREAMBLE(); |
| 1585 num = i::Execution::ToInt32(obj, &has_pending_exception); | 1585 num = i::Execution::ToInt32(obj, &has_pending_exception); |
| 1586 EXCEPTION_BAILOUT_CHECK(Local<Int32>()); | 1586 EXCEPTION_BAILOUT_CHECK(Local<Int32>()); |
| 1587 } | 1587 } |
| 1588 return Local<Int32>(ToApi<Int32>(num)); | 1588 return Local<Int32>(ToApi<Int32>(num)); |
| 1589 } | 1589 } |
| 1590 | 1590 |
| 1591 | 1591 |
| 1592 Local<Uint32> Value::ToUint32() { | 1592 Local<Uint32> Value::ToUint32() const { |
| 1593 if (IsDeadCheck("v8::Value::ToUint32()")) return Local<Uint32>(); | 1593 if (IsDeadCheck("v8::Value::ToUint32()")) return Local<Uint32>(); |
| 1594 LOG_API("ToUInt32"); | 1594 LOG_API("ToUInt32"); |
| 1595 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1595 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1596 i::Handle<i::Object> num; | 1596 i::Handle<i::Object> num; |
| 1597 if (obj->IsSmi()) { | 1597 if (obj->IsSmi()) { |
| 1598 num = obj; | 1598 num = obj; |
| 1599 } else { | 1599 } else { |
| 1600 EXCEPTION_PREAMBLE(); | 1600 EXCEPTION_PREAMBLE(); |
| 1601 num = i::Execution::ToUint32(obj, &has_pending_exception); | 1601 num = i::Execution::ToUint32(obj, &has_pending_exception); |
| 1602 EXCEPTION_BAILOUT_CHECK(Local<Uint32>()); | 1602 EXCEPTION_BAILOUT_CHECK(Local<Uint32>()); |
| 1603 } | 1603 } |
| 1604 return Local<Uint32>(ToApi<Uint32>(num)); | 1604 return Local<Uint32>(ToApi<Uint32>(num)); |
| 1605 } | 1605 } |
| 1606 | 1606 |
| 1607 | 1607 |
| 1608 Local<Uint32> Value::ToArrayIndex() { | 1608 Local<Uint32> Value::ToArrayIndex() const { |
| 1609 if (IsDeadCheck("v8::Value::ToArrayIndex()")) return Local<Uint32>(); | 1609 if (IsDeadCheck("v8::Value::ToArrayIndex()")) return Local<Uint32>(); |
| 1610 LOG_API("ToArrayIndex"); | 1610 LOG_API("ToArrayIndex"); |
| 1611 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1611 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1612 if (obj->IsSmi()) { | 1612 if (obj->IsSmi()) { |
| 1613 if (i::Smi::cast(*obj)->value() >= 0) return Utils::Uint32ToLocal(obj); | 1613 if (i::Smi::cast(*obj)->value() >= 0) return Utils::Uint32ToLocal(obj); |
| 1614 return Local<Uint32>(); | 1614 return Local<Uint32>(); |
| 1615 } | 1615 } |
| 1616 EXCEPTION_PREAMBLE(); | 1616 EXCEPTION_PREAMBLE(); |
| 1617 i::Handle<i::Object> string_obj = | 1617 i::Handle<i::Object> string_obj = |
| 1618 i::Execution::ToString(obj, &has_pending_exception); | 1618 i::Execution::ToString(obj, &has_pending_exception); |
| 1619 EXCEPTION_BAILOUT_CHECK(Local<Uint32>()); | 1619 EXCEPTION_BAILOUT_CHECK(Local<Uint32>()); |
| 1620 i::Handle<i::String> str = i::Handle<i::String>::cast(string_obj); | 1620 i::Handle<i::String> str = i::Handle<i::String>::cast(string_obj); |
| 1621 uint32_t index; | 1621 uint32_t index; |
| 1622 if (str->AsArrayIndex(&index)) { | 1622 if (str->AsArrayIndex(&index)) { |
| 1623 i::Handle<i::Object> value; | 1623 i::Handle<i::Object> value; |
| 1624 if (index <= static_cast<uint32_t>(i::Smi::kMaxValue)) { | 1624 if (index <= static_cast<uint32_t>(i::Smi::kMaxValue)) { |
| 1625 value = i::Handle<i::Object>(i::Smi::FromInt(index)); | 1625 value = i::Handle<i::Object>(i::Smi::FromInt(index)); |
| 1626 } else { | 1626 } else { |
| 1627 value = i::Factory::NewNumber(index); | 1627 value = i::Factory::NewNumber(index); |
| 1628 } | 1628 } |
| 1629 return Utils::Uint32ToLocal(value); | 1629 return Utils::Uint32ToLocal(value); |
| 1630 } | 1630 } |
| 1631 return Local<Uint32>(); | 1631 return Local<Uint32>(); |
| 1632 } | 1632 } |
| 1633 | 1633 |
| 1634 | 1634 |
| 1635 int32_t Value::Int32Value() { | 1635 int32_t Value::Int32Value() const { |
| 1636 if (IsDeadCheck("v8::Value::Int32Value()")) return 0; | 1636 if (IsDeadCheck("v8::Value::Int32Value()")) return 0; |
| 1637 LOG_API("Int32Value"); | 1637 LOG_API("Int32Value"); |
| 1638 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1638 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1639 if (obj->IsSmi()) { | 1639 if (obj->IsSmi()) { |
| 1640 return i::Smi::cast(*obj)->value(); | 1640 return i::Smi::cast(*obj)->value(); |
| 1641 } else { | 1641 } else { |
| 1642 LOG_API("Int32Value (slow)"); | 1642 LOG_API("Int32Value (slow)"); |
| 1643 EXCEPTION_PREAMBLE(); | 1643 EXCEPTION_PREAMBLE(); |
| 1644 i::Handle<i::Object> num = | 1644 i::Handle<i::Object> num = |
| 1645 i::Execution::ToInt32(obj, &has_pending_exception); | 1645 i::Execution::ToInt32(obj, &has_pending_exception); |
| 1646 EXCEPTION_BAILOUT_CHECK(0); | 1646 EXCEPTION_BAILOUT_CHECK(0); |
| 1647 if (num->IsSmi()) { | 1647 if (num->IsSmi()) { |
| 1648 return i::Smi::cast(*num)->value(); | 1648 return i::Smi::cast(*num)->value(); |
| 1649 } else { | 1649 } else { |
| 1650 return static_cast<int32_t>(num->Number()); | 1650 return static_cast<int32_t>(num->Number()); |
| 1651 } | 1651 } |
| 1652 } | 1652 } |
| 1653 } | 1653 } |
| 1654 | 1654 |
| 1655 | 1655 |
| 1656 bool Value::Equals(Handle<Value> that) { | 1656 bool Value::Equals(Handle<Value> that) const { |
| 1657 if (IsDeadCheck("v8::Value::Equals()") | 1657 if (IsDeadCheck("v8::Value::Equals()") |
| 1658 || EmptyCheck("v8::Value::Equals()", this) | 1658 || EmptyCheck("v8::Value::Equals()", this) |
| 1659 || EmptyCheck("v8::Value::Equals()", that)) | 1659 || EmptyCheck("v8::Value::Equals()", that)) |
| 1660 return false; | 1660 return false; |
| 1661 LOG_API("Equals"); | 1661 LOG_API("Equals"); |
| 1662 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1662 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1663 i::Handle<i::Object> other = Utils::OpenHandle(*that); | 1663 i::Handle<i::Object> other = Utils::OpenHandle(*that); |
| 1664 i::Object** args[1] = { other.location() }; | 1664 i::Object** args[1] = { other.location() }; |
| 1665 EXCEPTION_PREAMBLE(); | 1665 EXCEPTION_PREAMBLE(); |
| 1666 i::Handle<i::Object> result = | 1666 i::Handle<i::Object> result = |
| 1667 CallV8HeapFunction("EQUALS", obj, 1, args, &has_pending_exception); | 1667 CallV8HeapFunction("EQUALS", obj, 1, args, &has_pending_exception); |
| 1668 EXCEPTION_BAILOUT_CHECK(false); | 1668 EXCEPTION_BAILOUT_CHECK(false); |
| 1669 return *result == i::Smi::FromInt(i::EQUAL); | 1669 return *result == i::Smi::FromInt(i::EQUAL); |
| 1670 } | 1670 } |
| 1671 | 1671 |
| 1672 | 1672 |
| 1673 bool Value::StrictEquals(Handle<Value> that) { | 1673 bool Value::StrictEquals(Handle<Value> that) const { |
| 1674 if (IsDeadCheck("v8::Value::StrictEquals()") | 1674 if (IsDeadCheck("v8::Value::StrictEquals()") |
| 1675 || EmptyCheck("v8::Value::StrictEquals()", this) | 1675 || EmptyCheck("v8::Value::StrictEquals()", this) |
| 1676 || EmptyCheck("v8::Value::StrictEquals()", that)) | 1676 || EmptyCheck("v8::Value::StrictEquals()", that)) |
| 1677 return false; | 1677 return false; |
| 1678 LOG_API("StrictEquals"); | 1678 LOG_API("StrictEquals"); |
| 1679 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1679 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1680 i::Handle<i::Object> other = Utils::OpenHandle(*that); | 1680 i::Handle<i::Object> other = Utils::OpenHandle(*that); |
| 1681 // Must check HeapNumber first, since NaN !== NaN. | 1681 // Must check HeapNumber first, since NaN !== NaN. |
| 1682 if (obj->IsHeapNumber()) { | 1682 if (obj->IsHeapNumber()) { |
| 1683 if (!other->IsNumber()) return false; | 1683 if (!other->IsNumber()) return false; |
| 1684 double x = obj->Number(); | 1684 double x = obj->Number(); |
| 1685 double y = other->Number(); | 1685 double y = other->Number(); |
| 1686 // Must check explicitly for NaN:s on Windows, but -0 works fine. | 1686 // Must check explicitly for NaN:s on Windows, but -0 works fine. |
| 1687 return x == y && !isnan(x) && !isnan(y); | 1687 return x == y && !isnan(x) && !isnan(y); |
| 1688 } else if (*obj == *other) { // Also covers Booleans. | 1688 } else if (*obj == *other) { // Also covers Booleans. |
| 1689 return true; | 1689 return true; |
| 1690 } else if (obj->IsSmi()) { | 1690 } else if (obj->IsSmi()) { |
| 1691 return other->IsNumber() && obj->Number() == other->Number(); | 1691 return other->IsNumber() && obj->Number() == other->Number(); |
| 1692 } else if (obj->IsString()) { | 1692 } else if (obj->IsString()) { |
| 1693 return other->IsString() && | 1693 return other->IsString() && |
| 1694 i::String::cast(*obj)->Equals(i::String::cast(*other)); | 1694 i::String::cast(*obj)->Equals(i::String::cast(*other)); |
| 1695 } else if (obj->IsUndefined() || obj->IsUndetectableObject()) { | 1695 } else if (obj->IsUndefined() || obj->IsUndetectableObject()) { |
| 1696 return other->IsUndefined() || other->IsUndetectableObject(); | 1696 return other->IsUndefined() || other->IsUndetectableObject(); |
| 1697 } else { | 1697 } else { |
| 1698 return false; | 1698 return false; |
| 1699 } | 1699 } |
| 1700 } | 1700 } |
| 1701 | 1701 |
| 1702 | 1702 |
| 1703 uint32_t Value::Uint32Value() { | 1703 uint32_t Value::Uint32Value() const { |
| 1704 if (IsDeadCheck("v8::Value::Uint32Value()")) return 0; | 1704 if (IsDeadCheck("v8::Value::Uint32Value()")) return 0; |
| 1705 LOG_API("Uint32Value"); | 1705 LOG_API("Uint32Value"); |
| 1706 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 1706 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 1707 if (obj->IsSmi()) { | 1707 if (obj->IsSmi()) { |
| 1708 return i::Smi::cast(*obj)->value(); | 1708 return i::Smi::cast(*obj)->value(); |
| 1709 } else { | 1709 } else { |
| 1710 EXCEPTION_PREAMBLE(); | 1710 EXCEPTION_PREAMBLE(); |
| 1711 i::Handle<i::Object> num = | 1711 i::Handle<i::Object> num = |
| 1712 i::Execution::ToUint32(obj, &has_pending_exception); | 1712 i::Execution::ToUint32(obj, &has_pending_exception); |
| 1713 EXCEPTION_BAILOUT_CHECK(0); | 1713 EXCEPTION_BAILOUT_CHECK(0); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1915 ON_BAILOUT("v8::Object::TurnOnAccessCheck()", return); | 1915 ON_BAILOUT("v8::Object::TurnOnAccessCheck()", return); |
| 1916 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); | 1916 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); |
| 1917 | 1917 |
| 1918 i::Handle<i::Map> new_map = | 1918 i::Handle<i::Map> new_map = |
| 1919 i::Factory::CopyMapDropTransitions(i::Handle<i::Map>(obj->map())); | 1919 i::Factory::CopyMapDropTransitions(i::Handle<i::Map>(obj->map())); |
| 1920 new_map->set_is_access_check_needed(true); | 1920 new_map->set_is_access_check_needed(true); |
| 1921 obj->set_map(*new_map); | 1921 obj->set_map(*new_map); |
| 1922 } | 1922 } |
| 1923 | 1923 |
| 1924 | 1924 |
| 1925 Local<v8::Object> Function::NewInstance() { | 1925 Local<v8::Object> Function::NewInstance() const { |
| 1926 return NewInstance(0, NULL); | 1926 return NewInstance(0, NULL); |
| 1927 } | 1927 } |
| 1928 | 1928 |
| 1929 | 1929 |
| 1930 Local<v8::Object> Function::NewInstance(int argc, | 1930 Local<v8::Object> Function::NewInstance(int argc, |
| 1931 v8::Handle<v8::Value> argv[]) { | 1931 v8::Handle<v8::Value> argv[]) const { |
| 1932 ON_BAILOUT("v8::Function::NewInstance()", return Local<v8::Object>()); | 1932 ON_BAILOUT("v8::Function::NewInstance()", return Local<v8::Object>()); |
| 1933 LOG_API("Function::NewInstance"); | 1933 LOG_API("Function::NewInstance"); |
| 1934 HandleScope scope; | 1934 HandleScope scope; |
| 1935 i::Handle<i::JSFunction> function = Utils::OpenHandle(this); | 1935 i::Handle<i::JSFunction> function = Utils::OpenHandle(this); |
| 1936 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); | 1936 STATIC_ASSERT(sizeof(v8::Handle<v8::Value>) == sizeof(i::Object**)); |
| 1937 i::Object*** args = reinterpret_cast<i::Object***>(argv); | 1937 i::Object*** args = reinterpret_cast<i::Object***>(argv); |
| 1938 EXCEPTION_PREAMBLE(); | 1938 EXCEPTION_PREAMBLE(); |
| 1939 i::Handle<i::Object> returned = | 1939 i::Handle<i::Object> returned = |
| 1940 i::Execution::New(function, argc, args, &has_pending_exception); | 1940 i::Execution::New(function, argc, args, &has_pending_exception); |
| 1941 EXCEPTION_BAILOUT_CHECK(Local<v8::Object>()); | 1941 EXCEPTION_BAILOUT_CHECK(Local<v8::Object>()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1964 return Utils::ToLocal(result); | 1964 return Utils::ToLocal(result); |
| 1965 } | 1965 } |
| 1966 | 1966 |
| 1967 | 1967 |
| 1968 void Function::SetName(v8::Handle<v8::String> name) { | 1968 void Function::SetName(v8::Handle<v8::String> name) { |
| 1969 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 1969 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); |
| 1970 func->shared()->set_name(*Utils::OpenHandle(*name)); | 1970 func->shared()->set_name(*Utils::OpenHandle(*name)); |
| 1971 } | 1971 } |
| 1972 | 1972 |
| 1973 | 1973 |
| 1974 Handle<Value> Function::GetName() { | 1974 Handle<Value> Function::GetName() const { |
| 1975 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); | 1975 i::Handle<i::JSFunction> func = Utils::OpenHandle(this); |
| 1976 return Utils::ToLocal(i::Handle<i::Object>(func->shared()->name())); | 1976 return Utils::ToLocal(i::Handle<i::Object>(func->shared()->name())); |
| 1977 } | 1977 } |
| 1978 | 1978 |
| 1979 | 1979 |
| 1980 int String::Length() { | 1980 int String::Length() const { |
| 1981 if (IsDeadCheck("v8::String::Length()")) return 0; | 1981 if (IsDeadCheck("v8::String::Length()")) return 0; |
| 1982 return Utils::OpenHandle(this)->length(); | 1982 return Utils::OpenHandle(this)->length(); |
| 1983 } | 1983 } |
| 1984 | 1984 |
| 1985 | 1985 |
| 1986 int String::Utf8Length() { | 1986 int String::Utf8Length() const { |
| 1987 if (IsDeadCheck("v8::String::Utf8Length()")) return 0; | 1987 if (IsDeadCheck("v8::String::Utf8Length()")) return 0; |
| 1988 return Utils::OpenHandle(this)->Utf8Length(); | 1988 return Utils::OpenHandle(this)->Utf8Length(); |
| 1989 } | 1989 } |
| 1990 | 1990 |
| 1991 | 1991 |
| 1992 int String::WriteUtf8(char* buffer, int capacity) { | 1992 int String::WriteUtf8(char* buffer, int capacity) const { |
| 1993 if (IsDeadCheck("v8::String::WriteUtf8()")) return 0; | 1993 if (IsDeadCheck("v8::String::WriteUtf8()")) return 0; |
| 1994 LOG_API("String::WriteUtf8"); | 1994 LOG_API("String::WriteUtf8"); |
| 1995 i::Handle<i::String> str = Utils::OpenHandle(this); | 1995 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 1996 write_input_buffer.Reset(0, *str); | 1996 write_input_buffer.Reset(0, *str); |
| 1997 int len = str->length(); | 1997 int len = str->length(); |
| 1998 // Encode the first K - 3 bytes directly into the buffer since we | 1998 // Encode the first K - 3 bytes directly into the buffer since we |
| 1999 // know there's room for them. If no capacity is given we copy all | 1999 // know there's room for them. If no capacity is given we copy all |
| 2000 // of them here. | 2000 // of them here. |
| 2001 int fast_end = capacity - (unibrow::Utf8::kMaxEncodedSize - 1); | 2001 int fast_end = capacity - (unibrow::Utf8::kMaxEncodedSize - 1); |
| 2002 int i; | 2002 int i; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2023 break; | 2023 break; |
| 2024 } | 2024 } |
| 2025 } | 2025 } |
| 2026 } | 2026 } |
| 2027 if (i == len && (capacity == -1 || pos < capacity)) | 2027 if (i == len && (capacity == -1 || pos < capacity)) |
| 2028 buffer[pos++] = '\0'; | 2028 buffer[pos++] = '\0'; |
| 2029 return pos; | 2029 return pos; |
| 2030 } | 2030 } |
| 2031 | 2031 |
| 2032 | 2032 |
| 2033 int String::WriteAscii(char* buffer, int start, int length) { | 2033 int String::WriteAscii(char* buffer, int start, int length) const { |
| 2034 if (IsDeadCheck("v8::String::WriteAscii()")) return 0; | 2034 if (IsDeadCheck("v8::String::WriteAscii()")) return 0; |
| 2035 LOG_API("String::WriteAscii"); | 2035 LOG_API("String::WriteAscii"); |
| 2036 ASSERT(start >= 0 && length >= -1); | 2036 ASSERT(start >= 0 && length >= -1); |
| 2037 i::Handle<i::String> str = Utils::OpenHandle(this); | 2037 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 2038 // Flatten the string for efficiency. This applies whether we are | 2038 // Flatten the string for efficiency. This applies whether we are |
| 2039 // using StringInputBuffer or Get(i) to access the characters. | 2039 // using StringInputBuffer or Get(i) to access the characters. |
| 2040 str->TryFlatten(i::StringShape(*str)); | 2040 str->TryFlatten(i::StringShape(*str)); |
| 2041 int end = length; | 2041 int end = length; |
| 2042 if ( (length == -1) || (length > str->length() - start) ) | 2042 if ( (length == -1) || (length > str->length() - start) ) |
| 2043 end = str->length() - start; | 2043 end = str->length() - start; |
| 2044 if (end < 0) return 0; | 2044 if (end < 0) return 0; |
| 2045 write_input_buffer.Reset(start, *str); | 2045 write_input_buffer.Reset(start, *str); |
| 2046 int i; | 2046 int i; |
| 2047 for (i = 0; i < end; i++) { | 2047 for (i = 0; i < end; i++) { |
| 2048 char c = static_cast<char>(write_input_buffer.GetNext()); | 2048 char c = static_cast<char>(write_input_buffer.GetNext()); |
| 2049 if (c == '\0') c = ' '; | 2049 if (c == '\0') c = ' '; |
| 2050 buffer[i] = c; | 2050 buffer[i] = c; |
| 2051 } | 2051 } |
| 2052 if (length == -1 || i < length) | 2052 if (length == -1 || i < length) |
| 2053 buffer[i] = '\0'; | 2053 buffer[i] = '\0'; |
| 2054 return i; | 2054 return i; |
| 2055 } | 2055 } |
| 2056 | 2056 |
| 2057 | 2057 |
| 2058 int String::Write(uint16_t* buffer, int start, int length) { | 2058 int String::Write(uint16_t* buffer, int start, int length) const { |
| 2059 if (IsDeadCheck("v8::String::Write()")) return 0; | 2059 if (IsDeadCheck("v8::String::Write()")) return 0; |
| 2060 LOG_API("String::Write"); | 2060 LOG_API("String::Write"); |
| 2061 ASSERT(start >= 0 && length >= -1); | 2061 ASSERT(start >= 0 && length >= -1); |
| 2062 i::Handle<i::String> str = Utils::OpenHandle(this); | 2062 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 2063 // Flatten the string for efficiency. This applies whether we are | 2063 // Flatten the string for efficiency. This applies whether we are |
| 2064 // using StringInputBuffer or Get(i) to access the characters. | 2064 // using StringInputBuffer or Get(i) to access the characters. |
| 2065 str->TryFlatten(i::StringShape(*str)); | 2065 str->TryFlatten(i::StringShape(*str)); |
| 2066 int end = length; | 2066 int end = length; |
| 2067 if ( (length == -1) || (length > str->length() - start) ) | 2067 if ( (length == -1) || (length > str->length() - start) ) |
| 2068 end = str->length() - start; | 2068 end = str->length() - start; |
| 2069 if (end < 0) return 0; | 2069 if (end < 0) return 0; |
| 2070 write_input_buffer.Reset(start, *str); | 2070 write_input_buffer.Reset(start, *str); |
| 2071 int i; | 2071 int i; |
| 2072 for (i = 0; i < end; i++) | 2072 for (i = 0; i < end; i++) |
| 2073 buffer[i] = write_input_buffer.GetNext(); | 2073 buffer[i] = write_input_buffer.GetNext(); |
| 2074 if (length == -1 || i < length) | 2074 if (length == -1 || i < length) |
| 2075 buffer[i] = '\0'; | 2075 buffer[i] = '\0'; |
| 2076 return i; | 2076 return i; |
| 2077 } | 2077 } |
| 2078 | 2078 |
| 2079 | 2079 |
| 2080 bool v8::String::IsExternal() { | 2080 bool v8::String::IsExternal() const { |
| 2081 EnsureInitialized("v8::String::IsExternal()"); | 2081 EnsureInitialized("v8::String::IsExternal()"); |
| 2082 i::Handle<i::String> str = Utils::OpenHandle(this); | 2082 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 2083 i::StringShape shape(*str); | 2083 i::StringShape shape(*str); |
| 2084 return shape.IsExternalTwoByte(); | 2084 return shape.IsExternalTwoByte(); |
| 2085 } | 2085 } |
| 2086 | 2086 |
| 2087 | 2087 |
| 2088 bool v8::String::IsExternalAscii() { | 2088 bool v8::String::IsExternalAscii() const { |
| 2089 EnsureInitialized("v8::String::IsExternalAscii()"); | 2089 EnsureInitialized("v8::String::IsExternalAscii()"); |
| 2090 i::Handle<i::String> str = Utils::OpenHandle(this); | 2090 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 2091 i::StringShape shape(*str); | 2091 i::StringShape shape(*str); |
| 2092 return shape.IsExternalAscii(); | 2092 return shape.IsExternalAscii(); |
| 2093 } | 2093 } |
| 2094 | 2094 |
| 2095 | 2095 |
| 2096 v8::String::ExternalStringResource* v8::String::GetExternalStringResource() { | 2096 v8::String::ExternalStringResource* |
| 2097 v8::String::GetExternalStringResource() const { |
| 2097 EnsureInitialized("v8::String::GetExternalStringResource()"); | 2098 EnsureInitialized("v8::String::GetExternalStringResource()"); |
| 2098 i::Handle<i::String> str = Utils::OpenHandle(this); | 2099 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 2099 ASSERT(str->IsExternalTwoByteString()); | 2100 ASSERT(str->IsExternalTwoByteString()); |
| 2100 void* resource = i::Handle<i::ExternalTwoByteString>::cast(str)->resource(); | 2101 void* resource = i::Handle<i::ExternalTwoByteString>::cast(str)->resource(); |
| 2101 return reinterpret_cast<ExternalStringResource*>(resource); | 2102 return reinterpret_cast<ExternalStringResource*>(resource); |
| 2102 } | 2103 } |
| 2103 | 2104 |
| 2104 | 2105 |
| 2105 v8::String::ExternalAsciiStringResource* | 2106 v8::String::ExternalAsciiStringResource* |
| 2106 v8::String::GetExternalAsciiStringResource() { | 2107 v8::String::GetExternalAsciiStringResource() const { |
| 2107 EnsureInitialized("v8::String::GetExternalAsciiStringResource()"); | 2108 EnsureInitialized("v8::String::GetExternalAsciiStringResource()"); |
| 2108 i::Handle<i::String> str = Utils::OpenHandle(this); | 2109 i::Handle<i::String> str = Utils::OpenHandle(this); |
| 2109 ASSERT(str->IsExternalAsciiString()); | 2110 ASSERT(str->IsExternalAsciiString()); |
| 2110 void* resource = i::Handle<i::ExternalAsciiString>::cast(str)->resource(); | 2111 void* resource = i::Handle<i::ExternalAsciiString>::cast(str)->resource(); |
| 2111 return reinterpret_cast<ExternalAsciiStringResource*>(resource); | 2112 return reinterpret_cast<ExternalAsciiStringResource*>(resource); |
| 2112 } | 2113 } |
| 2113 | 2114 |
| 2114 | 2115 |
| 2115 double Number::Value() { | 2116 double Number::Value() const { |
| 2116 if (IsDeadCheck("v8::Number::Value()")) return 0; | 2117 if (IsDeadCheck("v8::Number::Value()")) return 0; |
| 2117 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2118 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 2118 return obj->Number(); | 2119 return obj->Number(); |
| 2119 } | 2120 } |
| 2120 | 2121 |
| 2121 | 2122 |
| 2122 bool Boolean::Value() { | 2123 bool Boolean::Value() const { |
| 2123 if (IsDeadCheck("v8::Boolean::Value()")) return false; | 2124 if (IsDeadCheck("v8::Boolean::Value()")) return false; |
| 2124 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2125 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 2125 return obj->IsTrue(); | 2126 return obj->IsTrue(); |
| 2126 } | 2127 } |
| 2127 | 2128 |
| 2128 | 2129 |
| 2129 int64_t Integer::Value() { | 2130 int64_t Integer::Value() const { |
| 2130 if (IsDeadCheck("v8::Integer::Value()")) return 0; | 2131 if (IsDeadCheck("v8::Integer::Value()")) return 0; |
| 2131 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2132 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 2132 if (obj->IsSmi()) { | 2133 if (obj->IsSmi()) { |
| 2133 return i::Smi::cast(*obj)->value(); | 2134 return i::Smi::cast(*obj)->value(); |
| 2134 } else { | 2135 } else { |
| 2135 return static_cast<int64_t>(obj->Number()); | 2136 return static_cast<int64_t>(obj->Number()); |
| 2136 } | 2137 } |
| 2137 } | 2138 } |
| 2138 | 2139 |
| 2139 | 2140 |
| 2140 int32_t Int32::Value() { | 2141 int32_t Int32::Value() const { |
| 2141 if (IsDeadCheck("v8::Int32::Value()")) return 0; | 2142 if (IsDeadCheck("v8::Int32::Value()")) return 0; |
| 2142 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2143 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 2143 if (obj->IsSmi()) { | 2144 if (obj->IsSmi()) { |
| 2144 return i::Smi::cast(*obj)->value(); | 2145 return i::Smi::cast(*obj)->value(); |
| 2145 } else { | 2146 } else { |
| 2146 return static_cast<int32_t>(obj->Number()); | 2147 return static_cast<int32_t>(obj->Number()); |
| 2147 } | 2148 } |
| 2148 } | 2149 } |
| 2149 | 2150 |
| 2150 | 2151 |
| 2151 void* External::Value() { | 2152 void* External::Value() const { |
| 2152 if (IsDeadCheck("v8::External::Value()")) return 0; | 2153 if (IsDeadCheck("v8::External::Value()")) return 0; |
| 2153 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2154 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 2154 return reinterpret_cast<void*>(i::Proxy::cast(*obj)->proxy()); | 2155 return reinterpret_cast<void*>(i::Proxy::cast(*obj)->proxy()); |
| 2155 } | 2156 } |
| 2156 | 2157 |
| 2157 | 2158 |
| 2158 int v8::Object::InternalFieldCount() { | 2159 int v8::Object::InternalFieldCount() { |
| 2159 if (IsDeadCheck("v8::Object::InternalFieldCount()")) return 0; | 2160 if (IsDeadCheck("v8::Object::InternalFieldCount()")) return 0; |
| 2160 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); | 2161 i::Handle<i::JSObject> obj = Utils::OpenHandle(this); |
| 2161 return obj->GetInternalFieldCount(); | 2162 return obj->GetInternalFieldCount(); |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2522 EnsureInitialized("v8::Date::New()"); | 2523 EnsureInitialized("v8::Date::New()"); |
| 2523 LOG_API("Date::New"); | 2524 LOG_API("Date::New"); |
| 2524 EXCEPTION_PREAMBLE(); | 2525 EXCEPTION_PREAMBLE(); |
| 2525 i::Handle<i::Object> obj = | 2526 i::Handle<i::Object> obj = |
| 2526 i::Execution::NewDate(time, &has_pending_exception); | 2527 i::Execution::NewDate(time, &has_pending_exception); |
| 2527 EXCEPTION_BAILOUT_CHECK(Local<v8::Value>()); | 2528 EXCEPTION_BAILOUT_CHECK(Local<v8::Value>()); |
| 2528 return Utils::ToLocal(obj); | 2529 return Utils::ToLocal(obj); |
| 2529 } | 2530 } |
| 2530 | 2531 |
| 2531 | 2532 |
| 2532 double v8::Date::NumberValue() { | 2533 double v8::Date::NumberValue() const { |
| 2533 if (IsDeadCheck("v8::Date::NumberValue()")) return 0; | 2534 if (IsDeadCheck("v8::Date::NumberValue()")) return 0; |
| 2534 LOG_API("Date::NumberValue"); | 2535 LOG_API("Date::NumberValue"); |
| 2535 i::Handle<i::Object> obj = Utils::OpenHandle(this); | 2536 i::Handle<i::Object> obj = Utils::OpenHandle(this); |
| 2536 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); | 2537 i::Handle<i::JSValue> jsvalue = i::Handle<i::JSValue>::cast(obj); |
| 2537 return jsvalue->value()->Number(); | 2538 return jsvalue->value()->Number(); |
| 2538 } | 2539 } |
| 2539 | 2540 |
| 2540 | 2541 |
| 2541 Local<v8::Array> v8::Array::New(int length) { | 2542 Local<v8::Array> v8::Array::New(int length) { |
| 2542 EnsureInitialized("v8::Array::New()"); | 2543 EnsureInitialized("v8::Array::New()"); |
| 2543 LOG_API("Array::New"); | 2544 LOG_API("Array::New"); |
| 2544 i::Handle<i::JSArray> obj = i::Factory::NewJSArray(length); | 2545 i::Handle<i::JSArray> obj = i::Factory::NewJSArray(length); |
| 2545 return Utils::ToLocal(obj); | 2546 return Utils::ToLocal(obj); |
| 2546 } | 2547 } |
| 2547 | 2548 |
| 2548 | 2549 |
| 2549 uint32_t v8::Array::Length() { | 2550 uint32_t v8::Array::Length() const { |
| 2550 if (IsDeadCheck("v8::Array::Length()")) return 0; | 2551 if (IsDeadCheck("v8::Array::Length()")) return 0; |
| 2551 i::Handle<i::JSArray> obj = Utils::OpenHandle(this); | 2552 i::Handle<i::JSArray> obj = Utils::OpenHandle(this); |
| 2552 i::Object* length = obj->length(); | 2553 i::Object* length = obj->length(); |
| 2553 if (length->IsSmi()) { | 2554 if (length->IsSmi()) { |
| 2554 return i::Smi::cast(length)->value(); | 2555 return i::Smi::cast(length)->value(); |
| 2555 } else { | 2556 } else { |
| 2556 return static_cast<uint32_t>(length->Number()); | 2557 return static_cast<uint32_t>(length->Number()); |
| 2557 } | 2558 } |
| 2558 } | 2559 } |
| 2559 | 2560 |
| (...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3010 reinterpret_cast<HandleScopeImplementer*>(storage); | 3011 reinterpret_cast<HandleScopeImplementer*>(storage); |
| 3011 List<void**>* blocks_of_archived_thread = thread_local->Blocks(); | 3012 List<void**>* blocks_of_archived_thread = thread_local->Blocks(); |
| 3012 ImplementationUtilities::HandleScopeData* handle_data_of_archived_thread = | 3013 ImplementationUtilities::HandleScopeData* handle_data_of_archived_thread = |
| 3013 &thread_local->handle_scope_data_; | 3014 &thread_local->handle_scope_data_; |
| 3014 Iterate(v, blocks_of_archived_thread, handle_data_of_archived_thread); | 3015 Iterate(v, blocks_of_archived_thread, handle_data_of_archived_thread); |
| 3015 | 3016 |
| 3016 return storage + ArchiveSpacePerThread(); | 3017 return storage + ArchiveSpacePerThread(); |
| 3017 } | 3018 } |
| 3018 | 3019 |
| 3019 } } // namespace v8::internal | 3020 } } // namespace v8::internal |
| OLD | NEW |