Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index 5062d34f5368b18050d12ec08227e388dde5a166..377b63580b0e4d792f59cc17db0ae66b7adb757a 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -18887,6 +18887,62 @@ void JSDate::SetCachedFields(int64_t local_time_ms, DateCache* date_cache) { |
| set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); |
| } |
| +namespace { |
| + |
| +Script* ScriptFromJSValue(Object* in) { |
| + DCHECK(in->IsJSValue()); |
| + JSValue* jsvalue = JSValue::cast(in); |
| + DCHECK(jsvalue->value()->IsScript()); |
| + return Script::cast(jsvalue->value()); |
| +} |
| + |
| +} // namespace |
| + |
| +int JSMessageObject::GetLineNumber() const { |
| + if (start_position() == -1) return Message::kNoLineNumberInfo; |
| + |
| + Handle<Script> the_script = handle(ScriptFromJSValue(script())); |
| + |
| + Script::PositionInfo info; |
| + const Script::OffsetFlag offset_flag = Script::WITH_OFFSET; |
| + if (!the_script->GetPositionInfo(start_position(), &info, offset_flag)) { |
| + return Message::kNoLineNumberInfo; |
| + } |
| + |
| + return info.line + 1; |
| +} |
| + |
| +int JSMessageObject::GetColumnNumber() const { |
| + if (start_position() == -1) return -1; |
| + |
| + Handle<Script> the_script = handle(ScriptFromJSValue(script())); |
| + |
| + Script::PositionInfo info; |
| + const Script::OffsetFlag offset_flag = Script::WITH_OFFSET; |
| + if (!the_script->GetPositionInfo(start_position(), &info, offset_flag)) { |
| + return -1; |
| + } |
| + |
| + return info.column; // Note: No + 1. |
|
Yang
2016/08/10 09:03:18
please rephrase the comment as "No '+1'". Otherwis
jgruber
2016/08/10 09:25:10
Done.
|
| +} |
| + |
| +Handle<String> JSMessageObject::GetSourceLine() const { |
| + Handle<Script> the_script = handle(ScriptFromJSValue(script())); |
| + |
| + Isolate* isolate = the_script->GetIsolate(); |
| + if (the_script->type() == Script::TYPE_WASM) { |
| + return isolate->factory()->empty_string(); |
| + } |
| + |
| + Script::PositionInfo info; |
| + const Script::OffsetFlag offset_flag = Script::WITH_OFFSET; |
| + if (!the_script->GetPositionInfo(start_position(), &info, offset_flag)) { |
| + return isolate->factory()->empty_string(); |
| + } |
| + |
| + Handle<String> src = handle(String::cast(the_script->source()), isolate); |
| + return isolate->factory()->NewSubString(src, info.line_start, info.line_end); |
| +} |
| void JSArrayBuffer::Neuter() { |
| CHECK(is_neuterable()); |