OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // ------------------------------------------------------------------- | 5 // ------------------------------------------------------------------- |
6 | 6 |
7 var $errorToString; | 7 var $errorToString; |
8 var $formatMessage; | 8 var $formatMessage; |
9 var $getStackTraceLine; | 9 var $getStackTraceLine; |
10 var $messageGetPositionInLine; | 10 var $messageGetPositionInLine; |
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 SET_PRIVATE(this, CallSiteFunctionKey, fun); | 730 SET_PRIVATE(this, CallSiteFunctionKey, fun); |
731 SET_PRIVATE(this, CallSitePositionKey, pos); | 731 SET_PRIVATE(this, CallSitePositionKey, pos); |
732 SET_PRIVATE(this, CallSiteStrictModeKey, strict_mode); | 732 SET_PRIVATE(this, CallSiteStrictModeKey, strict_mode); |
733 } | 733 } |
734 | 734 |
735 function CallSiteGetThis() { | 735 function CallSiteGetThis() { |
736 return GET_PRIVATE(this, CallSiteStrictModeKey) | 736 return GET_PRIVATE(this, CallSiteStrictModeKey) |
737 ? UNDEFINED : GET_PRIVATE(this, CallSiteReceiverKey); | 737 ? UNDEFINED : GET_PRIVATE(this, CallSiteReceiverKey); |
738 } | 738 } |
739 | 739 |
| 740 function CallSiteGetFunction() { |
| 741 return GET_PRIVATE(this, CallSiteStrictModeKey) |
| 742 ? UNDEFINED : GET_PRIVATE(this, CallSiteFunctionKey); |
| 743 } |
| 744 |
| 745 function CallSiteGetPosition() { |
| 746 return GET_PRIVATE(this, CallSitePositionKey); |
| 747 } |
| 748 |
740 function CallSiteGetTypeName() { | 749 function CallSiteGetTypeName() { |
741 return GetTypeName(GET_PRIVATE(this, CallSiteReceiverKey), false); | 750 return GetTypeName(GET_PRIVATE(this, CallSiteReceiverKey), false); |
742 } | 751 } |
743 | 752 |
744 function CallSiteIsToplevel() { | 753 function CallSiteIsToplevel() { |
745 if (GET_PRIVATE(this, CallSiteReceiverKey) == null) { | 754 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
746 return true; | 755 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
747 } | 756 var pos = GET_PRIVATE(this, CallSitePositionKey); |
748 return IS_GLOBAL(GET_PRIVATE(this, CallSiteReceiverKey)); | 757 return %CallSiteIsToplevelRT(receiver, fun, pos); |
749 } | 758 } |
750 | 759 |
751 function CallSiteIsEval() { | 760 function CallSiteIsEval() { |
752 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 761 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
753 return script && script.compilation_type == COMPILATION_TYPE_EVAL; | 762 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
| 763 var pos = GET_PRIVATE(this, CallSitePositionKey); |
| 764 return %CallSiteIsEvalRT(receiver, fun, pos); |
754 } | 765 } |
755 | 766 |
756 function CallSiteGetEvalOrigin() { | 767 function CallSiteGetEvalOrigin() { |
757 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 768 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); |
758 return FormatEvalOrigin(script); | 769 return FormatEvalOrigin(script); |
759 } | 770 } |
760 | 771 |
761 function CallSiteGetScriptNameOrSourceURL() { | 772 function CallSiteGetScriptNameOrSourceURL() { |
762 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 773 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
763 return script ? script.nameOrSourceURL() : null; | 774 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
764 } | 775 var pos = GET_PRIVATE(this, CallSitePositionKey); |
765 | 776 return %CallSiteGetScriptNameOrSourceUrlRT(receiver, fun, pos); |
766 function CallSiteGetFunction() { | |
767 return GET_PRIVATE(this, CallSiteStrictModeKey) | |
768 ? UNDEFINED : GET_PRIVATE(this, CallSiteFunctionKey); | |
769 } | 777 } |
770 | 778 |
771 function CallSiteGetFunctionName() { | 779 function CallSiteGetFunctionName() { |
772 // See if the function knows its own name | 780 // See if the function knows its own name |
| 781 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
773 var fun = GET_PRIVATE(this, CallSiteFunctionKey); | 782 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
774 var name = %FunctionGetDebugName(fun); | 783 var pos = GET_PRIVATE(this, CallSitePositionKey); |
775 if (name) { | 784 return %CallSiteGetFunctionNameRT(receiver, fun, pos); |
776 return name; | |
777 } | |
778 // Maybe this is an evaluation? | |
779 var script = %FunctionGetScript(fun); | |
780 if (script && script.compilation_type == COMPILATION_TYPE_EVAL) { | |
781 return "eval"; | |
782 } | |
783 return null; | |
784 } | 785 } |
785 | 786 |
786 function CallSiteGetMethodName() { | 787 function CallSiteGetMethodName() { |
787 // See if we can find a unique property on the receiver that holds | 788 // See if we can find a unique property on the receiver that holds |
788 // this function. | 789 // this function. |
789 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); | 790 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
790 var fun = GET_PRIVATE(this, CallSiteFunctionKey); | 791 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
791 var ownName = fun.name; | 792 var ownName = fun.name; |
792 if (ownName && receiver && | 793 if (ownName && receiver && |
793 (%_CallFunction(receiver, ownName, ObjectLookupGetter) === fun || | 794 (%_CallFunction(receiver, ownName, ObjectLookupGetter) === fun || |
(...skipping 15 matching lines...) Expand all Loading... |
809 name = prop; | 810 name = prop; |
810 } | 811 } |
811 } | 812 } |
812 if (name) { | 813 if (name) { |
813 return name; | 814 return name; |
814 } | 815 } |
815 return null; | 816 return null; |
816 } | 817 } |
817 | 818 |
818 function CallSiteGetFileName() { | 819 function CallSiteGetFileName() { |
819 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 820 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
820 return script ? script.name : null; | 821 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
| 822 var pos = GET_PRIVATE(this, CallSitePositionKey); |
| 823 return %CallSiteGetFileNameRT(receiver, fun, pos); |
821 } | 824 } |
822 | 825 |
823 function CallSiteGetLineNumber() { | 826 function CallSiteGetLineNumber() { |
824 if (GET_PRIVATE(this, CallSitePositionKey) == -1) { | 827 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
825 return null; | 828 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
826 } | 829 var pos = GET_PRIVATE(this, CallSitePositionKey); |
827 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 830 return %CallSiteGetLineNumberRT(receiver, fun, pos); |
828 var location = null; | |
829 if (script) { | |
830 location = script.locationFromPosition( | |
831 GET_PRIVATE(this, CallSitePositionKey), true); | |
832 } | |
833 return location ? location.line + 1 : null; | |
834 } | 831 } |
835 | 832 |
836 function CallSiteGetColumnNumber() { | 833 function CallSiteGetColumnNumber() { |
837 if (GET_PRIVATE(this, CallSitePositionKey) == -1) { | 834 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
838 return null; | 835 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
839 } | 836 var pos = GET_PRIVATE(this, CallSitePositionKey); |
840 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 837 return %CallSiteGetColumnNumberRT(receiver, fun, pos); |
841 var location = null; | |
842 if (script) { | |
843 location = script.locationFromPosition( | |
844 GET_PRIVATE(this, CallSitePositionKey), true); | |
845 } | |
846 return location ? location.column + 1: null; | |
847 } | 838 } |
848 | 839 |
849 function CallSiteIsNative() { | 840 function CallSiteIsNative() { |
850 var script = %FunctionGetScript(GET_PRIVATE(this, CallSiteFunctionKey)); | 841 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
851 return script ? (script.type == TYPE_NATIVE) : false; | 842 var fun = GET_PRIVATE(this, CallSiteFunctionKey); |
852 } | 843 var pos = GET_PRIVATE(this, CallSitePositionKey); |
853 | 844 return %CallSiteIsNativeRT(receiver, fun, pos); |
854 function CallSiteGetPosition() { | |
855 return GET_PRIVATE(this, CallSitePositionKey); | |
856 } | 845 } |
857 | 846 |
858 function CallSiteIsConstructor() { | 847 function CallSiteIsConstructor() { |
859 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); | 848 var receiver = GET_PRIVATE(this, CallSiteReceiverKey); |
860 var constructor = (receiver != null && IS_OBJECT(receiver)) | 849 var constructor = (receiver != null && IS_OBJECT(receiver)) |
861 ? %GetDataProperty(receiver, "constructor") : null; | 850 ? %GetDataProperty(receiver, "constructor") : null; |
862 if (!constructor) return false; | 851 if (!constructor) return false; |
863 return GET_PRIVATE(this, CallSiteFunctionKey) === constructor; | 852 return GET_PRIVATE(this, CallSiteFunctionKey) === constructor; |
864 } | 853 } |
865 | 854 |
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1304 return MakeGenericError(GlobalTypeError, type, [arg]); | 1293 return MakeGenericError(GlobalTypeError, type, [arg]); |
1305 } | 1294 } |
1306 | 1295 |
1307 //Boilerplate for exceptions for stack overflows. Used from | 1296 //Boilerplate for exceptions for stack overflows. Used from |
1308 //Isolate::StackOverflow(). | 1297 //Isolate::StackOverflow(). |
1309 $stackOverflowBoilerplate = MakeRangeError(kStackOverflow); | 1298 $stackOverflowBoilerplate = MakeRangeError(kStackOverflow); |
1310 %DefineAccessorPropertyUnchecked($stackOverflowBoilerplate, 'stack', | 1299 %DefineAccessorPropertyUnchecked($stackOverflowBoilerplate, 'stack', |
1311 StackTraceGetter, StackTraceSetter, DONT_ENUM); | 1300 StackTraceGetter, StackTraceSetter, DONT_ENUM); |
1312 | 1301 |
1313 })(); | 1302 })(); |
OLD | NEW |