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

Side by Side Diff: src/mirror-delay.js

Issue 111001: Added context information to scripts (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 11 years, 7 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/factory.cc ('k') | src/objects.h » ('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 2006-2008 the V8 project authors. All rights reserved. 1 // Copyright 2006-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 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 const BOOLEAN_TYPE = 'boolean'; 148 const BOOLEAN_TYPE = 'boolean';
149 const NUMBER_TYPE = 'number'; 149 const NUMBER_TYPE = 'number';
150 const STRING_TYPE = 'string'; 150 const STRING_TYPE = 'string';
151 const OBJECT_TYPE = 'object'; 151 const OBJECT_TYPE = 'object';
152 const FUNCTION_TYPE = 'function'; 152 const FUNCTION_TYPE = 'function';
153 const REGEXP_TYPE = 'regexp'; 153 const REGEXP_TYPE = 'regexp';
154 const ERROR_TYPE = 'error'; 154 const ERROR_TYPE = 'error';
155 const PROPERTY_TYPE = 'property'; 155 const PROPERTY_TYPE = 'property';
156 const FRAME_TYPE = 'frame'; 156 const FRAME_TYPE = 'frame';
157 const SCRIPT_TYPE = 'script'; 157 const SCRIPT_TYPE = 'script';
158 const CONTEXT_TYPE = 'context';
158 159
159 // Maximum length when sending strings through the JSON protocol. 160 // Maximum length when sending strings through the JSON protocol.
160 const kMaxProtocolStringLength = 80; 161 const kMaxProtocolStringLength = 80;
161 162
162 // Different kind of properties. 163 // Different kind of properties.
163 PropertyKind = {}; 164 PropertyKind = {};
164 PropertyKind.Named = 1; 165 PropertyKind.Named = 1;
165 PropertyKind.Indexed = 2; 166 PropertyKind.Indexed = 2;
166 167
167 168
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 /** 358 /**
358 * Check whether the mirror reflects a script. 359 * Check whether the mirror reflects a script.
359 * @returns {boolean} True if the mirror reflects a script 360 * @returns {boolean} True if the mirror reflects a script
360 */ 361 */
361 Mirror.prototype.isScript = function() { 362 Mirror.prototype.isScript = function() {
362 return this instanceof ScriptMirror; 363 return this instanceof ScriptMirror;
363 } 364 }
364 365
365 366
366 /** 367 /**
368 * Check whether the mirror reflects a context.
369 * @returns {boolean} True if the mirror reflects a context
370 */
371 Mirror.prototype.isContext = function() {
372 return this instanceof ContextMirror;
373 }
374
375
376 /**
367 * Allocate a handle id for this object. 377 * Allocate a handle id for this object.
368 */ 378 */
369 Mirror.prototype.allocateHandle_ = function() { 379 Mirror.prototype.allocateHandle_ = function() {
370 this.handle_ = next_handle_++; 380 this.handle_ = next_handle_++;
371 } 381 }
372 382
373 383
374 Mirror.prototype.toText = function() { 384 Mirror.prototype.toText = function() {
375 // Simpel to text which is used when on specialization in subclass. 385 // Simpel to text which is used when on specialization in subclass.
376 return "#<" + builtins.GetInstanceName(this.constructor.name) + ">"; 386 return "#<" + builtins.GetInstanceName(this.constructor.name) + ">";
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 1550
1541 /** 1551 /**
1542 * Mirror object for script source. 1552 * Mirror object for script source.
1543 * @param {Script} script The script object 1553 * @param {Script} script The script object
1544 * @constructor 1554 * @constructor
1545 * @extends Mirror 1555 * @extends Mirror
1546 */ 1556 */
1547 function ScriptMirror(script) { 1557 function ScriptMirror(script) {
1548 Mirror.call(this, SCRIPT_TYPE); 1558 Mirror.call(this, SCRIPT_TYPE);
1549 this.script_ = script; 1559 this.script_ = script;
1560 this.context_ = new ContextMirror(script.context_data);
1550 this.allocateHandle_(); 1561 this.allocateHandle_();
1551 } 1562 }
1552 inherits(ScriptMirror, Mirror); 1563 inherits(ScriptMirror, Mirror);
1553 1564
1554 1565
1555 ScriptMirror.prototype.value = function() { 1566 ScriptMirror.prototype.value = function() {
1556 return this.script_; 1567 return this.script_;
1557 }; 1568 };
1558 1569
1559 1570
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 position, include_resource_offset) { 1612 position, include_resource_offset) {
1602 return this.script_.locationFromPosition(position, include_resource_offset); 1613 return this.script_.locationFromPosition(position, include_resource_offset);
1603 } 1614 }
1604 1615
1605 1616
1606 ScriptMirror.prototype.sourceSlice = function (opt_from_line, opt_to_line) { 1617 ScriptMirror.prototype.sourceSlice = function (opt_from_line, opt_to_line) {
1607 return this.script_.sourceSlice(opt_from_line, opt_to_line); 1618 return this.script_.sourceSlice(opt_from_line, opt_to_line);
1608 } 1619 }
1609 1620
1610 1621
1622 ScriptMirror.prototype.context = function() {
1623 return this.context_;
1624 };
1625
1626
1611 ScriptMirror.prototype.toText = function() { 1627 ScriptMirror.prototype.toText = function() {
1612 var result = ''; 1628 var result = '';
1613 result += this.name(); 1629 result += this.name();
1614 result += ' (lines: '; 1630 result += ' (lines: ';
1615 if (this.lineOffset() > 0) { 1631 if (this.lineOffset() > 0) {
1616 result += this.lineOffset(); 1632 result += this.lineOffset();
1617 result += '-'; 1633 result += '-';
1618 result += this.lineOffset() + this.lineCount() - 1; 1634 result += this.lineOffset() + this.lineCount() - 1;
1619 } else { 1635 } else {
1620 result += this.lineCount(); 1636 result += this.lineCount();
1621 } 1637 }
1622 result += ')'; 1638 result += ')';
1623 return result; 1639 return result;
1624 } 1640 }
1625 1641
1626 1642
1627 /** 1643 /**
1644 * Mirror object for context.
1645 * @param {Object} data The context data
1646 * @constructor
1647 * @extends Mirror
1648 */
1649 function ContextMirror(data) {
1650 Mirror.call(this, CONTEXT_TYPE);
1651 this.data_ = data;
1652 this.allocateHandle_();
1653 }
1654 inherits(ContextMirror, Mirror);
1655
1656
1657 ContextMirror.prototype.data = function() {
1658 return this.data_;
1659 };
1660
1661
1662 /**
1628 * Returns a mirror serializer 1663 * Returns a mirror serializer
1629 * 1664 *
1630 * @param {boolean} details Set to true to include details 1665 * @param {boolean} details Set to true to include details
1666 * @param {Object} options Options comtrolling the serialization
1667 * The following options can be set:
1668 * includeSource: include ths full source of scripts
1631 * @returns {MirrorSerializer} mirror serializer 1669 * @returns {MirrorSerializer} mirror serializer
1632 */ 1670 */
1633 function MakeMirrorSerializer(details) { 1671 function MakeMirrorSerializer(details, options) {
1634 return new JSONProtocolSerializer(details); 1672 return new JSONProtocolSerializer(details, options);
1635 } 1673 }
1636 1674
1637 1675
1638 /** 1676 /**
1639 * Object for serializing a mirror objects and its direct references. 1677 * Object for serializing a mirror objects and its direct references.
1640 * @param {boolean} details Indicates whether to include details for the mirror 1678 * @param {boolean} details Indicates whether to include details for the mirror
1641 * serialized 1679 * serialized
1642 * @constructor 1680 * @constructor
1643 */ 1681 */
1644 function JSONProtocolSerializer(details) { 1682 function JSONProtocolSerializer(details, options) {
1645 this.details_ = details; 1683 this.details_ = details;
1684 this.options_ = options;
1646 this.mirrors_ = [ ]; 1685 this.mirrors_ = [ ];
1647 } 1686 }
1648 1687
1649 1688
1650 /** 1689 /**
1651 * Returns a serialization of an object reference. The referenced object are 1690 * Returns a serialization of an object reference. The referenced object are
1652 * added to the serialization state. 1691 * added to the serialization state.
1653 * 1692 *
1654 * @param {Mirror} mirror The mirror to serialize 1693 * @param {Mirror} mirror The mirror to serialize
1655 * @returns {String} JSON serialization 1694 * @returns {String} JSON serialization
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 1726
1688 for (var i = 0; i < count; i++) { 1727 for (var i = 0; i < count; i++) {
1689 content.push(this.serialize_(this.mirrors_[i], false, false)); 1728 content.push(this.serialize_(this.mirrors_[i], false, false));
1690 } 1729 }
1691 1730
1692 var json = ArrayToJSONArray_(content); 1731 var json = ArrayToJSONArray_(content);
1693 return json; 1732 return json;
1694 } 1733 }
1695 1734
1696 1735
1736 JSONProtocolSerializer.prototype.includeSource_ = function() {
1737 return this.options_ && this.options_.includeSource;
1738 }
1739
1740
1697 JSONProtocolSerializer.prototype.add_ = function(mirror) { 1741 JSONProtocolSerializer.prototype.add_ = function(mirror) {
1698 // If this mirror is already in the list just return. 1742 // If this mirror is already in the list just return.
1699 for (var i = 0; i < this.mirrors_.length; i++) { 1743 for (var i = 0; i < this.mirrors_.length; i++) {
1700 if (this.mirrors_[i] === mirror) { 1744 if (this.mirrors_[i] === mirror) {
1701 return; 1745 return;
1702 } 1746 }
1703 } 1747 }
1704 1748
1705 // Add the mirror to the list of mirrors to be serialized. 1749 // Add the mirror to the list of mirrors to be serialized.
1706 this.mirrors_.push(mirror); 1750 this.mirrors_.push(mirror);
1707 } 1751 }
1708 1752
1709 1753
1710 JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference, 1754 JSONProtocolSerializer.prototype.serialize_ = function(mirror, reference,
1711 details) { 1755 details) {
1712 // If serializing a reference to a mirror just return the reference and add 1756 // If serializing a reference to a mirror just return the reference and add
1713 // the mirror to the referenced mirrors. 1757 // the mirror to the referenced mirrors.
1714 if (reference && 1758 if (reference &&
1715 (mirror.isValue() || mirror.isScript())) { 1759 (mirror.isValue() || mirror.isScript() || mirror.isContext())) {
1716 this.add_(mirror); 1760 this.add_(mirror);
1717 return '{"ref":' + mirror.handle() + '}'; 1761 return '{"ref":' + mirror.handle() + '}';
1718 } 1762 }
1719 1763
1720 // Collect the JSON property/value pairs in an array. 1764 // Collect the JSON property/value pairs in an array.
1721 var content = new Array(); 1765 var content = new Array();
1722 1766
1723 // Add the mirror handle. 1767 // Add the mirror handle.
1724 if (mirror.isValue() || mirror.isScript()) { 1768 if (mirror.isValue() || mirror.isScript() || mirror.isContext()) {
1725 content.push(MakeJSONPair_('handle', NumberToJSON_(mirror.handle()))); 1769 content.push(MakeJSONPair_('handle', NumberToJSON_(mirror.handle())));
1726 } 1770 }
1727 1771
1728 // Always add the type. 1772 // Always add the type.
1729 content.push(MakeJSONPair_('type', StringToJSON_(mirror.type()))); 1773 content.push(MakeJSONPair_('type', StringToJSON_(mirror.type())));
1730 1774
1731 switch (mirror.type()) { 1775 switch (mirror.type()) {
1732 case UNDEFINED_TYPE: 1776 case UNDEFINED_TYPE:
1733 case NULL_TYPE: 1777 case NULL_TYPE:
1734 // Undefined and null are represented just by their type. 1778 // Undefined and null are represented just by their type.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 if (mirror.name()) { 1824 if (mirror.name()) {
1781 content.push(MakeJSONPair_('name', StringToJSON_(mirror.name()))); 1825 content.push(MakeJSONPair_('name', StringToJSON_(mirror.name())));
1782 } 1826 }
1783 content.push(MakeJSONPair_('id', NumberToJSON_(mirror.id()))); 1827 content.push(MakeJSONPair_('id', NumberToJSON_(mirror.id())));
1784 content.push(MakeJSONPair_('lineOffset', 1828 content.push(MakeJSONPair_('lineOffset',
1785 NumberToJSON_(mirror.lineOffset()))); 1829 NumberToJSON_(mirror.lineOffset())));
1786 content.push(MakeJSONPair_('columnOffset', 1830 content.push(MakeJSONPair_('columnOffset',
1787 NumberToJSON_(mirror.columnOffset()))); 1831 NumberToJSON_(mirror.columnOffset())));
1788 content.push(MakeJSONPair_('lineCount', 1832 content.push(MakeJSONPair_('lineCount',
1789 NumberToJSON_(mirror.lineCount()))); 1833 NumberToJSON_(mirror.lineCount())));
1834 if (mirror.data()) {
1835 content.push(MakeJSONPair_('data', JSON.stringify(mirror.data())));
1836 }
1837 if (this.includeSource_()) {
1838 content.push(MakeJSONPair_('source',
1839 StringToJSON_(mirror.source())));
1840 } else {
1841 var sourceStart = mirror.source().substring(0, 80);
1842 content.push(MakeJSONPair_('sourceStart',
1843 StringToJSON_(sourceStart)));
1844 }
1845 content.push(MakeJSONPair_('sourceLength',
yurys 2009/05/06 07:22:34 it seems that you can switch to JSON.stringify for
Søren Thygesen Gjesse 2009/05/06 07:48:54 Sure, that would clean up the code quite a bit.
1846 NumberToJSON_(mirror.source().length)));
1790 content.push(MakeJSONPair_('scriptType', 1847 content.push(MakeJSONPair_('scriptType',
1791 NumberToJSON_(mirror.scriptType()))); 1848 NumberToJSON_(mirror.scriptType())));
1849 if (mirror.context()) {
1850 content.push(MakeJSONPair_('context',
1851 this.serializeReference(mirror.context())));
1852 }
1853 break;
1854
1855 case CONTEXT_TYPE:
1856 content.push(MakeJSONPair_('data', JSON.stringify(mirror.data())));
1792 break; 1857 break;
1793 } 1858 }
1794 1859
1795 // Always add the text representation. 1860 // Always add the text representation.
1796 content.push(MakeJSONPair_('text', StringToJSON_(mirror.toText()))); 1861 content.push(MakeJSONPair_('text', StringToJSON_(mirror.toText())));
1797 1862
1798 // Create and return the JSON string. 1863 // Create and return the JSON string.
1799 return ArrayToJSONObject_(content); 1864 return ArrayToJSONObject_(content);
1800 } 1865 }
1801 1866
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 /** 2150 /**
2086 * Convert a Date to ISO 8601 format. To avoid depending on the Date object 2151 * Convert a Date to ISO 8601 format. To avoid depending on the Date object
2087 * this method calls the functions in date.js directly and not through the 2152 * this method calls the functions in date.js directly and not through the
2088 * value. 2153 * value.
2089 * @param {Date} value The Date value to format as JSON 2154 * @param {Date} value The Date value to format as JSON
2090 * @return {string} JSON formatted Date value 2155 * @return {string} JSON formatted Date value
2091 */ 2156 */
2092 function DateToJSON_(value) { 2157 function DateToJSON_(value) {
2093 return '"' + DateToISO8601_(value) + '"'; 2158 return '"' + DateToISO8601_(value) + '"';
2094 } 2159 }
OLDNEW
« no previous file with comments | « src/factory.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698