Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <sstream> | 9 #include <sstream> |
| 10 | 10 |
| (...skipping 13122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 13133 return map; | 13133 return map; |
| 13134 } | 13134 } |
| 13135 | 13135 |
| 13136 | 13136 |
| 13137 void JSFunction::PrintName(FILE* out) { | 13137 void JSFunction::PrintName(FILE* out) { |
| 13138 base::SmartArrayPointer<char> name = shared()->DebugName()->ToCString(); | 13138 base::SmartArrayPointer<char> name = shared()->DebugName()->ToCString(); |
| 13139 PrintF(out, "%s", name.get()); | 13139 PrintF(out, "%s", name.get()); |
| 13140 } | 13140 } |
| 13141 | 13141 |
| 13142 | 13142 |
| 13143 // The filter is a pattern that matches function names in this way: | |
| 13144 // "*" all; the default | |
| 13145 // "-" all but the top-level function | |
| 13146 // "-name" all but the function "name" | |
| 13147 // "" only the top-level function | |
| 13148 // "name" only the function "name" | |
| 13149 // "name*" only functions starting with "name" | |
| 13150 // "~" none; the tilde is not an identifier | |
| 13151 bool JSFunction::PassesFilter(const char* raw_filter) { | |
| 13152 if (*raw_filter == '*') return true; | |
| 13153 String* name = shared()->DebugName(); | |
| 13154 Vector<const char> filter = CStrVector(raw_filter); | |
| 13155 if (filter.length() == 0) return name->length() == 0; | |
| 13156 if (filter[0] == '-') { | |
| 13157 // Negative filter. | |
| 13158 if (filter.length() == 1) { | |
| 13159 return (name->length() != 0); | |
| 13160 } else if (name->IsUtf8EqualTo(filter.SubVector(1, filter.length()))) { | |
| 13161 return false; | |
| 13162 } | |
| 13163 if (filter[filter.length() - 1] == '*' && | |
| 13164 name->IsUtf8EqualTo(filter.SubVector(1, filter.length() - 1), true)) { | |
| 13165 return false; | |
| 13166 } | |
| 13167 return true; | |
| 13168 | |
| 13169 } else if (name->IsUtf8EqualTo(filter)) { | |
| 13170 return true; | |
| 13171 } | |
| 13172 if (filter[filter.length() - 1] == '*' && | |
| 13173 name->IsUtf8EqualTo(filter.SubVector(0, filter.length() - 1), true)) { | |
| 13174 return true; | |
| 13175 } | |
| 13176 return false; | |
| 13177 } | |
| 13178 | |
| 13179 | |
| 13180 Handle<String> JSFunction::GetName(Handle<JSFunction> function) { | 13143 Handle<String> JSFunction::GetName(Handle<JSFunction> function) { |
| 13181 Isolate* isolate = function->GetIsolate(); | 13144 Isolate* isolate = function->GetIsolate(); |
| 13182 Handle<Object> name = | 13145 Handle<Object> name = |
| 13183 JSReceiver::GetDataProperty(function, isolate->factory()->name_string()); | 13146 JSReceiver::GetDataProperty(function, isolate->factory()->name_string()); |
| 13184 if (name->IsString()) return Handle<String>::cast(name); | 13147 if (name->IsString()) return Handle<String>::cast(name); |
| 13185 return handle(function->shared()->DebugName(), isolate); | 13148 return handle(function->shared()->DebugName(), isolate); |
| 13186 } | 13149 } |
| 13187 | 13150 |
| 13188 | 13151 |
| 13189 Handle<String> JSFunction::GetDebugName(Handle<JSFunction> function) { | 13152 Handle<String> JSFunction::GetDebugName(Handle<JSFunction> function) { |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 13535 shared->set_script(*script_object); | 13498 shared->set_script(*script_object); |
| 13536 } | 13499 } |
| 13537 | 13500 |
| 13538 | 13501 |
| 13539 String* SharedFunctionInfo::DebugName() { | 13502 String* SharedFunctionInfo::DebugName() { |
| 13540 Object* n = name(); | 13503 Object* n = name(); |
| 13541 if (!n->IsString() || String::cast(n)->length() == 0) return inferred_name(); | 13504 if (!n->IsString() || String::cast(n)->length() == 0) return inferred_name(); |
| 13542 return String::cast(n); | 13505 return String::cast(n); |
| 13543 } | 13506 } |
| 13544 | 13507 |
| 13508 // The filter is a pattern that matches function names in this way: | |
| 13509 // "*" all; the default | |
| 13510 // "-" all but the top-level function | |
| 13511 // "-name" all but the function "name" | |
| 13512 // "" only the top-level function | |
| 13513 // "name" only the function "name" | |
| 13514 // "name*" only functions starting with "name" | |
| 13515 // "~" none; the tilde is not an identifier | |
| 13516 bool SharedFunctionInfo::PassesFilter(const char* raw_filter) { | |
| 13517 if (*raw_filter == '*') return true; | |
| 13518 String* name = DebugName(); | |
|
Michael Starzinger
2016/03/22 09:06:31
The only change inside the function was this one l
Jakob Kummerow
2016/03/22 09:32:11
Acknowledged.
| |
| 13519 Vector<const char> filter = CStrVector(raw_filter); | |
| 13520 if (filter.length() == 0) return name->length() == 0; | |
| 13521 if (filter[0] == '-') { | |
| 13522 // Negative filter. | |
| 13523 if (filter.length() == 1) { | |
| 13524 return (name->length() != 0); | |
| 13525 } else if (name->IsUtf8EqualTo(filter.SubVector(1, filter.length()))) { | |
| 13526 return false; | |
| 13527 } | |
| 13528 if (filter[filter.length() - 1] == '*' && | |
| 13529 name->IsUtf8EqualTo(filter.SubVector(1, filter.length() - 1), true)) { | |
| 13530 return false; | |
| 13531 } | |
| 13532 return true; | |
| 13533 | |
| 13534 } else if (name->IsUtf8EqualTo(filter)) { | |
| 13535 return true; | |
| 13536 } | |
| 13537 if (filter[filter.length() - 1] == '*' && | |
| 13538 name->IsUtf8EqualTo(filter.SubVector(0, filter.length() - 1), true)) { | |
| 13539 return true; | |
| 13540 } | |
| 13541 return false; | |
| 13542 } | |
| 13545 | 13543 |
| 13546 bool SharedFunctionInfo::HasSourceCode() const { | 13544 bool SharedFunctionInfo::HasSourceCode() const { |
| 13547 return !script()->IsUndefined() && | 13545 return !script()->IsUndefined() && |
| 13548 !reinterpret_cast<Script*>(script())->source()->IsUndefined(); | 13546 !reinterpret_cast<Script*>(script())->source()->IsUndefined(); |
| 13549 } | 13547 } |
| 13550 | 13548 |
| 13551 | 13549 |
| 13552 Handle<Object> SharedFunctionInfo::GetSourceCode() { | 13550 Handle<Object> SharedFunctionInfo::GetSourceCode() { |
| 13553 if (!HasSourceCode()) return GetIsolate()->factory()->undefined_value(); | 13551 if (!HasSourceCode()) return GetIsolate()->factory()->undefined_value(); |
| 13554 Handle<String> source(String::cast(Script::cast(script())->source())); | 13552 Handle<String> source(String::cast(Script::cast(script())->source())); |
| (...skipping 6193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 19748 if (cell->value() != *new_value) { | 19746 if (cell->value() != *new_value) { |
| 19749 cell->set_value(*new_value); | 19747 cell->set_value(*new_value); |
| 19750 Isolate* isolate = cell->GetIsolate(); | 19748 Isolate* isolate = cell->GetIsolate(); |
| 19751 cell->dependent_code()->DeoptimizeDependentCodeGroup( | 19749 cell->dependent_code()->DeoptimizeDependentCodeGroup( |
| 19752 isolate, DependentCode::kPropertyCellChangedGroup); | 19750 isolate, DependentCode::kPropertyCellChangedGroup); |
| 19753 } | 19751 } |
| 19754 } | 19752 } |
| 19755 | 19753 |
| 19756 } // namespace internal | 19754 } // namespace internal |
| 19757 } // namespace v8 | 19755 } // namespace v8 |
| OLD | NEW |