Chromium Code Reviews| Index: src/source-position.cc |
| diff --git a/src/source-position.cc b/src/source-position.cc |
| index ff204be73d327b2821646b77019badcff563d78d..2e51b0b141631d6a2c3e265f51f2f0ed8c4834cb 100644 |
| --- a/src/source-position.cc |
| +++ b/src/source-position.cc |
| @@ -11,10 +11,16 @@ namespace internal { |
| std::ostream& operator<<(std::ostream& out, const SourcePositionInfo& pos) { |
| Handle<SharedFunctionInfo> function(pos.function); |
| - Handle<Script> script(Script::cast(function->script())); |
| + String* name = nullptr; |
| + if (function->script()->IsScript()) { |
| + Script* script = Script::cast(function->script()); |
| + if (script->name()->IsString()) { |
| + name = String::cast(script->name()); |
| + } |
| + } |
| out << "<"; |
| - if (script->name()->IsString()) { |
| - out << String::cast(script->name())->ToCString(DISALLOW_NULLS).get(); |
| + if (name != nullptr) { |
| + out << name->ToCString(DISALLOW_NULLS).get(); |
| } else { |
| out << "unknown"; |
| } |
| @@ -78,10 +84,13 @@ std::vector<SourcePositionInfo> SourcePosition::InliningStack( |
| void SourcePosition::Print(std::ostream& out, |
| SharedFunctionInfo* function) const { |
| - Script* script = Script::cast(function->script()); |
| - Object* source_name = script->name(); |
| Script::PositionInfo pos; |
| - script->GetPositionInfo(ScriptOffset(), &pos, Script::WITH_OFFSET); |
| + Object* source_name = nullptr; |
| + if (function->script()->IsScript()) { |
| + Script* script = Script::cast(function->script()); |
| + source_name = script->name(); |
| + script->GetPositionInfo(ScriptOffset(), &pos, Script::WITH_OFFSET); |
| + } |
| out << "<"; |
| if (source_name->IsString()) { |
|
Michael Starzinger
2017/02/15 14:51:48
nit: It is kind of scary that we treat the non-Scr
mvstanton
2017/02/15 15:18:47
Indeed! Done.
|
| out << String::cast(source_name) |
| @@ -117,12 +126,14 @@ void SourcePosition::Print(std::ostream& out, Code* code) const { |
| SourcePositionInfo::SourcePositionInfo(SourcePosition pos, |
| Handle<SharedFunctionInfo> f) |
| : position(pos), function(f) { |
| - Handle<Script> script(Script::cast(function->script())); |
| - Script::PositionInfo info; |
| - if (Script::GetPositionInfo(script, pos.ScriptOffset(), &info, |
| - Script::WITH_OFFSET)) { |
| - line = info.line; |
| - column = info.column; |
| + if (function->script()->IsScript()) { |
| + Handle<Script> script(Script::cast(function->script())); |
| + Script::PositionInfo info; |
| + if (Script::GetPositionInfo(script, pos.ScriptOffset(), &info, |
| + Script::WITH_OFFSET)) { |
| + line = info.line; |
| + column = info.column; |
| + } |
| } |
| } |