OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 1420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1431 i::Object** argv[1] = { data.location() }; | 1431 i::Object** argv[1] = { data.location() }; |
1432 return CallV8HeapFunction(name, | 1432 return CallV8HeapFunction(name, |
1433 i::Top::builtins(), | 1433 i::Top::builtins(), |
1434 1, | 1434 1, |
1435 argv, | 1435 argv, |
1436 has_pending_exception); | 1436 has_pending_exception); |
1437 } | 1437 } |
1438 | 1438 |
1439 | 1439 |
1440 int Message::GetLineNumber() const { | 1440 int Message::GetLineNumber() const { |
1441 ON_BAILOUT("v8::Message::GetLineNumber()", return -1); | 1441 ON_BAILOUT("v8::Message::GetLineNumber()", return kNoLineNumberInfo); |
1442 ENTER_V8; | 1442 ENTER_V8; |
1443 HandleScope scope; | 1443 HandleScope scope; |
1444 EXCEPTION_PREAMBLE(); | 1444 EXCEPTION_PREAMBLE(); |
1445 i::Handle<i::Object> result = CallV8HeapFunction("GetLineNumber", | 1445 i::Handle<i::Object> result = CallV8HeapFunction("GetLineNumber", |
1446 Utils::OpenHandle(this), | 1446 Utils::OpenHandle(this), |
1447 &has_pending_exception); | 1447 &has_pending_exception); |
1448 EXCEPTION_BAILOUT_CHECK(0); | 1448 EXCEPTION_BAILOUT_CHECK(0); |
1449 return static_cast<int>(result->Number()); | 1449 return static_cast<int>(result->Number()); |
1450 } | 1450 } |
1451 | 1451 |
(...skipping 11 matching lines...) Expand all Loading... |
1463 int Message::GetEndPosition() const { | 1463 int Message::GetEndPosition() const { |
1464 if (IsDeadCheck("v8::Message::GetEndPosition()")) return 0; | 1464 if (IsDeadCheck("v8::Message::GetEndPosition()")) return 0; |
1465 ENTER_V8; | 1465 ENTER_V8; |
1466 HandleScope scope; | 1466 HandleScope scope; |
1467 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1467 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
1468 return static_cast<int>(GetProperty(data_obj, "endPos")->Number()); | 1468 return static_cast<int>(GetProperty(data_obj, "endPos")->Number()); |
1469 } | 1469 } |
1470 | 1470 |
1471 | 1471 |
1472 int Message::GetStartColumn() const { | 1472 int Message::GetStartColumn() const { |
1473 if (IsDeadCheck("v8::Message::GetStartColumn()")) return 0; | 1473 if (IsDeadCheck("v8::Message::GetStartColumn()")) return kNoColumnInfo; |
1474 ENTER_V8; | 1474 ENTER_V8; |
1475 HandleScope scope; | 1475 HandleScope scope; |
1476 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1476 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
1477 EXCEPTION_PREAMBLE(); | 1477 EXCEPTION_PREAMBLE(); |
1478 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( | 1478 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( |
1479 "GetPositionInLine", | 1479 "GetPositionInLine", |
1480 data_obj, | 1480 data_obj, |
1481 &has_pending_exception); | 1481 &has_pending_exception); |
1482 EXCEPTION_BAILOUT_CHECK(0); | 1482 EXCEPTION_BAILOUT_CHECK(0); |
1483 return static_cast<int>(start_col_obj->Number()); | 1483 return static_cast<int>(start_col_obj->Number()); |
1484 } | 1484 } |
1485 | 1485 |
1486 | 1486 |
1487 int Message::GetEndColumn() const { | 1487 int Message::GetEndColumn() const { |
1488 if (IsDeadCheck("v8::Message::GetEndColumn()")) return 0; | 1488 if (IsDeadCheck("v8::Message::GetEndColumn()")) return kNoColumnInfo; |
1489 ENTER_V8; | 1489 ENTER_V8; |
1490 HandleScope scope; | 1490 HandleScope scope; |
1491 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); | 1491 i::Handle<i::JSObject> data_obj = Utils::OpenHandle(this); |
1492 EXCEPTION_PREAMBLE(); | 1492 EXCEPTION_PREAMBLE(); |
1493 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( | 1493 i::Handle<i::Object> start_col_obj = CallV8HeapFunction( |
1494 "GetPositionInLine", | 1494 "GetPositionInLine", |
1495 data_obj, | 1495 data_obj, |
1496 &has_pending_exception); | 1496 &has_pending_exception); |
1497 EXCEPTION_BAILOUT_CHECK(0); | 1497 EXCEPTION_BAILOUT_CHECK(0); |
1498 int start = static_cast<int>(GetProperty(data_obj, "startPos")->Number()); | 1498 int start = static_cast<int>(GetProperty(data_obj, "startPos")->Number()); |
(...skipping 19 matching lines...) Expand all Loading... |
1518 } | 1518 } |
1519 | 1519 |
1520 | 1520 |
1521 void Message::PrintCurrentStackTrace(FILE* out) { | 1521 void Message::PrintCurrentStackTrace(FILE* out) { |
1522 if (IsDeadCheck("v8::Message::PrintCurrentStackTrace()")) return; | 1522 if (IsDeadCheck("v8::Message::PrintCurrentStackTrace()")) return; |
1523 ENTER_V8; | 1523 ENTER_V8; |
1524 i::Top::PrintCurrentStackTrace(out); | 1524 i::Top::PrintCurrentStackTrace(out); |
1525 } | 1525 } |
1526 | 1526 |
1527 | 1527 |
| 1528 // --- S t a c k T r a c e --- |
| 1529 |
| 1530 Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { |
| 1531 if (IsDeadCheck("v8::StackTrace::GetFrame()")) return Local<StackFrame>(); |
| 1532 ENTER_V8; |
| 1533 HandleScope scope; |
| 1534 i::Handle<i::JSArray> self = Utils::OpenHandle(this); |
| 1535 i::Handle<i::JSObject> obj(i::JSObject::cast(self->GetElement(index))); |
| 1536 return scope.Close(Utils::StackFrameToLocal(obj)); |
| 1537 } |
| 1538 |
| 1539 |
| 1540 int StackTrace::GetFrameCount() const { |
| 1541 if (IsDeadCheck("v8::StackTrace::GetFrameCount()")) return -1; |
| 1542 ENTER_V8; |
| 1543 return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); |
| 1544 } |
| 1545 |
| 1546 |
| 1547 Local<Array> StackTrace::AsArray() { |
| 1548 if (IsDeadCheck("v8::StackTrace::AsArray()")) Local<Array>(); |
| 1549 ENTER_V8; |
| 1550 return Utils::ToLocal(Utils::OpenHandle(this)); |
| 1551 } |
| 1552 |
| 1553 |
| 1554 Local<StackTrace> StackTrace::CurrentStackTrace(int frame_limit, |
| 1555 StackTraceOptions options) { |
| 1556 if (IsDeadCheck("v8::StackTrace::CurrentStackTrace()")) Local<StackTrace>(); |
| 1557 ENTER_V8; |
| 1558 return i::Top::CaptureCurrentStackTrace(frame_limit, options); |
| 1559 } |
| 1560 |
| 1561 |
| 1562 // --- S t a c k F r a m e --- |
| 1563 |
| 1564 int StackFrame::GetLineNumber() const { |
| 1565 if (IsDeadCheck("v8::StackFrame::GetLineNumber()")) { |
| 1566 return Message::kNoLineNumberInfo; |
| 1567 } |
| 1568 ENTER_V8; |
| 1569 i::HandleScope scope; |
| 1570 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 1571 i::Handle<i::Object> line = GetProperty(self, "lineNumber"); |
| 1572 if (!line->IsSmi()) { |
| 1573 return Message::kNoLineNumberInfo; |
| 1574 } |
| 1575 return i::Smi::cast(*line)->value(); |
| 1576 } |
| 1577 |
| 1578 |
| 1579 int StackFrame::GetColumn() const { |
| 1580 if (IsDeadCheck("v8::StackFrame::GetColumn()")) { |
| 1581 return Message::kNoColumnInfo; |
| 1582 } |
| 1583 ENTER_V8; |
| 1584 i::HandleScope scope; |
| 1585 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 1586 i::Handle<i::Object> column = GetProperty(self, "column"); |
| 1587 if (!column->IsSmi()) { |
| 1588 return Message::kNoColumnInfo; |
| 1589 } |
| 1590 return i::Smi::cast(*column)->value(); |
| 1591 } |
| 1592 |
| 1593 |
| 1594 Local<String> StackFrame::GetScriptName() const { |
| 1595 if (IsDeadCheck("v8::StackFrame::GetScriptName()")) return Local<String>(); |
| 1596 ENTER_V8; |
| 1597 HandleScope scope; |
| 1598 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 1599 i::Handle<i::Object> name = GetProperty(self, "scriptName"); |
| 1600 if (!name->IsString()) { |
| 1601 return Local<String>(); |
| 1602 } |
| 1603 return scope.Close(Local<String>::Cast(Utils::ToLocal(name))); |
| 1604 } |
| 1605 |
| 1606 |
| 1607 Local<String> StackFrame::GetFunctionName() const { |
| 1608 if (IsDeadCheck("v8::StackFrame::GetFunctionName()")) return Local<String>(); |
| 1609 ENTER_V8; |
| 1610 HandleScope scope; |
| 1611 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 1612 i::Handle<i::Object> name = GetProperty(self, "functionName"); |
| 1613 if (!name->IsString()) { |
| 1614 return Local<String>(); |
| 1615 } |
| 1616 return scope.Close(Local<String>::Cast(Utils::ToLocal(name))); |
| 1617 } |
| 1618 |
| 1619 |
| 1620 bool StackFrame::IsEval() const { |
| 1621 if (IsDeadCheck("v8::StackFrame::IsEval()")) return false; |
| 1622 ENTER_V8; |
| 1623 i::HandleScope scope; |
| 1624 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 1625 i::Handle<i::Object> is_eval = GetProperty(self, "isEval"); |
| 1626 return is_eval->IsTrue(); |
| 1627 } |
| 1628 |
| 1629 |
| 1630 bool StackFrame::IsConstructor() const { |
| 1631 if (IsDeadCheck("v8::StackFrame::IsConstructor()")) return false; |
| 1632 ENTER_V8; |
| 1633 i::HandleScope scope; |
| 1634 i::Handle<i::JSObject> self = Utils::OpenHandle(this); |
| 1635 i::Handle<i::Object> is_constructor = GetProperty(self, "isConstructor"); |
| 1636 return is_constructor->IsTrue(); |
| 1637 } |
| 1638 |
| 1639 |
1528 // --- D a t a --- | 1640 // --- D a t a --- |
1529 | 1641 |
1530 bool Value::IsUndefined() const { | 1642 bool Value::IsUndefined() const { |
1531 if (IsDeadCheck("v8::Value::IsUndefined()")) return false; | 1643 if (IsDeadCheck("v8::Value::IsUndefined()")) return false; |
1532 return Utils::OpenHandle(this)->IsUndefined(); | 1644 return Utils::OpenHandle(this)->IsUndefined(); |
1533 } | 1645 } |
1534 | 1646 |
1535 | 1647 |
1536 bool Value::IsNull() const { | 1648 bool Value::IsNull() const { |
1537 if (IsDeadCheck("v8::Value::IsNull()")) return false; | 1649 if (IsDeadCheck("v8::Value::IsNull()")) return false; |
(...skipping 2703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4241 | 4353 |
4242 | 4354 |
4243 char* HandleScopeImplementer::Iterate(ObjectVisitor* v, char* storage) { | 4355 char* HandleScopeImplementer::Iterate(ObjectVisitor* v, char* storage) { |
4244 HandleScopeImplementer* thread_local = | 4356 HandleScopeImplementer* thread_local = |
4245 reinterpret_cast<HandleScopeImplementer*>(storage); | 4357 reinterpret_cast<HandleScopeImplementer*>(storage); |
4246 thread_local->IterateThis(v); | 4358 thread_local->IterateThis(v); |
4247 return storage + ArchiveSpacePerThread(); | 4359 return storage + ArchiveSpacePerThread(); |
4248 } | 4360 } |
4249 | 4361 |
4250 } } // namespace v8::internal | 4362 } } // namespace v8::internal |
OLD | NEW |