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

Side by Side Diff: src/objects.cc

Issue 2156303002: Implement new Function.prototype.toString and fix CreateDynamicFunction parsing (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 4 years 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
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/objects.h" 5 #include "src/objects.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <iomanip> 8 #include <iomanip>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 13343 matching lines...) Expand 10 before | Expand all | Expand 10 after
13354 return isolate->factory()->NewSubString( 13354 return isolate->factory()->NewSubString(
13355 script_source, Handle<Smi>::cast(class_start_position)->value(), 13355 script_source, Handle<Smi>::cast(class_start_position)->value(),
13356 Handle<Smi>::cast(class_end_position)->value()); 13356 Handle<Smi>::cast(class_end_position)->value());
13357 } 13357 }
13358 13358
13359 // Check if we have source code for the {function}. 13359 // Check if we have source code for the {function}.
13360 if (!shared_info->HasSourceCode()) { 13360 if (!shared_info->HasSourceCode()) {
13361 return NativeCodeFunctionSourceString(shared_info); 13361 return NativeCodeFunctionSourceString(shared_info);
13362 } 13362 }
13363 13363
13364 if (FLAG_harmony_function_tostring) {
13365 return Handle<String>::cast(shared_info->GetSourceCodeHarmony());
13366 }
13367
13364 IncrementalStringBuilder builder(isolate); 13368 IncrementalStringBuilder builder(isolate);
13365 FunctionKind kind = shared_info->kind(); 13369 FunctionKind kind = shared_info->kind();
13366 if (!IsArrowFunction(kind)) { 13370 if (!IsArrowFunction(kind)) {
13367 if (IsConciseMethod(kind)) { 13371 if (IsConciseMethod(kind)) {
13368 if (IsGeneratorFunction(kind)) { 13372 if (IsGeneratorFunction(kind)) {
13369 builder.AppendCharacter('*'); 13373 builder.AppendCharacter('*');
13370 } else if (IsAsyncFunction(kind)) { 13374 } else if (IsAsyncFunction(kind)) {
13371 builder.AppendCString("async "); 13375 builder.AppendCString("async ");
13372 } 13376 }
13373 } else { 13377 } else {
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
13792 } 13796 }
13793 13797
13794 13798
13795 Handle<Object> SharedFunctionInfo::GetSourceCode() { 13799 Handle<Object> SharedFunctionInfo::GetSourceCode() {
13796 if (!HasSourceCode()) return GetIsolate()->factory()->undefined_value(); 13800 if (!HasSourceCode()) return GetIsolate()->factory()->undefined_value();
13797 Handle<String> source(String::cast(Script::cast(script())->source())); 13801 Handle<String> source(String::cast(Script::cast(script())->source()));
13798 return GetIsolate()->factory()->NewSubString( 13802 return GetIsolate()->factory()->NewSubString(
13799 source, start_position(), end_position()); 13803 source, start_position(), end_position());
13800 } 13804 }
13801 13805
13806 Handle<Object> SharedFunctionInfo::GetSourceCodeHarmony() {
13807 Isolate* isolate = GetIsolate();
13808 if (!HasSourceCode()) return isolate->factory()->undefined_value();
13809 Handle<String> script_source(String::cast(Script::cast(script())->source()));
13810 int start_pos = function_token_position();
13811 if (start_pos == kNoSourcePosition) start_pos = start_position();
13812 return isolate->factory()->NewSubString(script_source, start_pos,
13813 end_position());
13814 }
13802 13815
13803 bool SharedFunctionInfo::IsInlineable() { 13816 bool SharedFunctionInfo::IsInlineable() {
13804 // Check that the function has a script associated with it. 13817 // Check that the function has a script associated with it.
13805 if (!script()->IsScript()) return false; 13818 if (!script()->IsScript()) return false;
13806 return !optimization_disabled(); 13819 return !optimization_disabled();
13807 } 13820 }
13808 13821
13809 13822
13810 int SharedFunctionInfo::SourceSize() { 13823 int SharedFunctionInfo::SourceSize() {
13811 return end_position() - start_position(); 13824 return end_position() - start_position();
(...skipping 6704 matching lines...) Expand 10 before | Expand all | Expand 10 after
20516 // depend on this. 20529 // depend on this.
20517 return DICTIONARY_ELEMENTS; 20530 return DICTIONARY_ELEMENTS;
20518 } 20531 }
20519 DCHECK_LE(kind, LAST_ELEMENTS_KIND); 20532 DCHECK_LE(kind, LAST_ELEMENTS_KIND);
20520 return kind; 20533 return kind;
20521 } 20534 }
20522 } 20535 }
20523 20536
20524 } // namespace internal 20537 } // namespace internal
20525 } // namespace v8 20538 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698