OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/become.h" | 10 #include "vm/become.h" |
(...skipping 8808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8819 } | 8819 } |
8820 return token_stream.GenerateSource(); | 8820 return token_stream.GenerateSource(); |
8821 } | 8821 } |
8822 | 8822 |
8823 | 8823 |
8824 void Script::set_compile_time_constants(const Array& value) const { | 8824 void Script::set_compile_time_constants(const Array& value) const { |
8825 StorePointer(&raw_ptr()->compile_time_constants_, value.raw()); | 8825 StorePointer(&raw_ptr()->compile_time_constants_, value.raw()); |
8826 } | 8826 } |
8827 | 8827 |
8828 | 8828 |
8829 RawGrowableObjectArray* Script::GenerateLineNumberArray() const { | 8829 RawGrowableObjectArray* Script::GenerateLineNumberArray() const { |
Kevin Millikin (Google)
2017/01/24 13:44:13
This function really needs a comment somewhere doc
jensj
2017/01/25 12:52:22
In runtime/include/dart_tools_api.h Dart_ScriptGet
| |
8830 Zone* zone = Thread::Current()->zone(); | 8830 Zone* zone = Thread::Current()->zone(); |
8831 const GrowableObjectArray& info = | 8831 const GrowableObjectArray& info = |
8832 GrowableObjectArray::Handle(zone, GrowableObjectArray::New()); | 8832 GrowableObjectArray::Handle(zone, GrowableObjectArray::New()); |
8833 const String& source = String::Handle(zone, Source()); | 8833 const String& source = String::Handle(zone, Source()); |
8834 const String& key = Symbols::Empty(); | 8834 const String& key = Symbols::Empty(); |
8835 const Object& line_separator = Object::Handle(zone); | 8835 const Object& line_separator = Object::Handle(zone); |
8836 Smi& value = Smi::Handle(zone); | 8836 Smi& value = Smi::Handle(zone); |
8837 | 8837 |
8838 if (kind() == RawScript::kKernelTag) { | 8838 if (kind() == RawScript::kKernelTag) { |
8839 const Array& line_starts_array = Array::Handle(line_starts()); | 8839 const Array& line_starts_array = Array::Handle(line_starts()); |
8840 if (line_starts_array.IsNull()) { | 8840 if (line_starts_array.IsNull()) { |
8841 // Scripts in the AOT snapshot do not have a line starts array. | 8841 // Scripts in the AOT snapshot do not have a line starts array. |
8842 // A well-formed line number array has a leading null. | 8842 // A well-formed line number array has a leading null. |
8843 info.Add(line_separator); // New line. | 8843 info.Add(line_separator); // New line. |
8844 return info.raw(); | 8844 return info.raw(); |
8845 } | 8845 } |
8846 intptr_t line_count = line_starts_array.Length(); | 8846 intptr_t line_count = line_starts_array.Length(); |
8847 ASSERT(line_count > 0); | 8847 ASSERT(line_count > 0); |
8848 const Array& tokens_seen_array = Array::Handle(tokens_seen()); | |
8849 intptr_t token_count = tokens_seen_array.Length(); | |
8850 int token_idx = 0; | |
Kevin Millikin (Google)
2017/01/24 13:44:13
You can also spell out index.
jensj
2017/01/25 12:52:22
Done.
| |
8851 int last_line = -1; | |
8848 | 8852 |
8849 for (int i = 0; i < line_count; i++) { | 8853 for (int i = 0; i < line_count; i++) { |
Kevin Millikin (Google)
2017/01/24 13:44:13
Instead of i, it's clearer to use the name 'line_i
jensj
2017/01/25 12:52:22
Done.
| |
8850 info.Add(line_separator); // New line. | |
8851 value = Smi::New(i + 1); | |
8852 info.Add(value); // Line number. | |
8853 value ^= line_starts_array.At(i); | 8854 value ^= line_starts_array.At(i); |
8854 info.Add(value); // Token position. | 8855 intptr_t start = value.Value(); |
8855 value = Smi::New(1); | 8856 // Output the rest of the tokens if we have no next line. |
8856 info.Add(value); // Column. | 8857 intptr_t end = LONG_MAX; |
Kevin Millikin (Google)
2017/01/24 13:44:13
INTPTR_MAX
jensj
2017/01/25 12:52:22
Done.
| |
8858 if (i + 1 < line_count) { | |
8859 value ^= line_starts_array.At(i + 1); | |
8860 end = value.Value(); | |
8861 } | |
8862 while (token_idx < token_count) { | |
8863 value ^= tokens_seen_array.At(token_idx); | |
8864 intptr_t seen = value.Value(); | |
Kevin Millikin (Google)
2017/01/24 13:44:13
seen ==> debug_position ?
jensj
2017/01/25 12:52:22
Done.
| |
8865 if (seen == -1) { | |
Kevin Millikin (Google)
2017/01/24 13:44:13
Can we just eliminate the -1 entries, or do we nee
jensj
2017/01/25 12:52:22
I'll move the check to the recording of the entrie
| |
8866 ++token_idx; | |
8867 continue; | |
8868 } | |
8869 if (seen >= end) break; | |
8870 | |
8871 if (i != last_line) { | |
Kevin Millikin (Google)
2017/01/24 13:44:13
last_line is just used to detect the first debug p
jensj
2017/01/25 12:52:22
It was done to look like the non-kernel version. I
| |
8872 info.Add(line_separator); // New line. | |
8873 value = Smi::New(i + 1); // Line number. | |
8874 info.Add(value); | |
8875 last_line = i; | |
8876 } | |
8877 | |
8878 value ^= tokens_seen_array.At(token_idx); | |
8879 info.Add(value); // Token position. | |
8880 value = Smi::New(seen - start + 1); // Column. | |
8881 info.Add(value); | |
8882 ++token_idx; | |
8883 } | |
8857 } | 8884 } |
8858 return info.raw(); | 8885 return info.raw(); |
8859 } | 8886 } |
8860 | 8887 |
8861 const TokenStream& tkns = TokenStream::Handle(zone, tokens()); | 8888 const TokenStream& tkns = TokenStream::Handle(zone, tokens()); |
8862 String& tokenValue = String::Handle(zone); | 8889 String& tokenValue = String::Handle(zone); |
8863 ASSERT(!tkns.IsNull()); | 8890 ASSERT(!tkns.IsNull()); |
8864 TokenStream::Iterator tkit(zone, tkns, TokenPosition::kMinSource, | 8891 TokenStream::Iterator tkit(zone, tkns, TokenPosition::kMinSource, |
8865 TokenStream::Iterator::kAllTokens); | 8892 TokenStream::Iterator::kAllTokens); |
8866 int current_line = -1; | 8893 int current_line = -1; |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8967 | 8994 |
8968 void Script::set_source(const String& value) const { | 8995 void Script::set_source(const String& value) const { |
8969 StorePointer(&raw_ptr()->source_, value.raw()); | 8996 StorePointer(&raw_ptr()->source_, value.raw()); |
8970 } | 8997 } |
8971 | 8998 |
8972 void Script::set_line_starts(const Array& value) const { | 8999 void Script::set_line_starts(const Array& value) const { |
8973 StorePointer(&raw_ptr()->line_starts_, value.raw()); | 9000 StorePointer(&raw_ptr()->line_starts_, value.raw()); |
8974 } | 9001 } |
8975 | 9002 |
8976 | 9003 |
9004 void Script::set_tokens_seen(const Array& value) const { | |
9005 StorePointer(&raw_ptr()->tokens_seen_, value.raw()); | |
9006 } | |
9007 | |
9008 | |
9009 void Script::set_yields_seen(const Array& value) const { | |
9010 StorePointer(&raw_ptr()->yields_seen_, value.raw()); | |
9011 } | |
9012 | |
9013 | |
8977 void Script::set_kind(RawScript::Kind value) const { | 9014 void Script::set_kind(RawScript::Kind value) const { |
8978 StoreNonPointer(&raw_ptr()->kind_, value); | 9015 StoreNonPointer(&raw_ptr()->kind_, value); |
8979 } | 9016 } |
8980 | 9017 |
8981 | 9018 |
8982 void Script::set_load_timestamp(int64_t value) const { | 9019 void Script::set_load_timestamp(int64_t value) const { |
8983 StoreNonPointer(&raw_ptr()->load_timestamp_, value); | 9020 StoreNonPointer(&raw_ptr()->load_timestamp_, value); |
8984 } | 9021 } |
8985 | 9022 |
8986 | 9023 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9057 } else { | 9094 } else { |
9058 min = midpoint; | 9095 min = midpoint; |
9059 } | 9096 } |
9060 } | 9097 } |
9061 *line = min + 1; | 9098 *line = min + 1; |
9062 smi ^= line_starts_array.At(min); | 9099 smi ^= line_starts_array.At(min); |
9063 if (column != NULL) { | 9100 if (column != NULL) { |
9064 *column = offset - smi.Value() + 1; | 9101 *column = offset - smi.Value() + 1; |
9065 } | 9102 } |
9066 if (token_len != NULL) { | 9103 if (token_len != NULL) { |
9104 // We don't explicitly save this data. | |
9105 // TODO(jensj): Load the source and attempt to find it from there. | |
9067 *token_len = 1; | 9106 *token_len = 1; |
9068 } | 9107 } |
9069 return; | 9108 return; |
9070 } | 9109 } |
9071 | 9110 |
9072 const TokenStream& tkns = TokenStream::Handle(zone, tokens()); | 9111 const TokenStream& tkns = TokenStream::Handle(zone, tokens()); |
9073 if (tkns.IsNull()) { | 9112 if (tkns.IsNull()) { |
9074 ASSERT((Dart::snapshot_kind() == Snapshot::kAppAOT)); | 9113 ASSERT((Dart::snapshot_kind() == Snapshot::kAppAOT)); |
9075 *line = -1; | 9114 *line = -1; |
9076 if (column != NULL) { | 9115 if (column != NULL) { |
(...skipping 13922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
22999 return UserTag::null(); | 23038 return UserTag::null(); |
23000 } | 23039 } |
23001 | 23040 |
23002 | 23041 |
23003 const char* UserTag::ToCString() const { | 23042 const char* UserTag::ToCString() const { |
23004 const String& tag_label = String::Handle(label()); | 23043 const String& tag_label = String::Handle(label()); |
23005 return tag_label.ToCString(); | 23044 return tag_label.ToCString(); |
23006 } | 23045 } |
23007 | 23046 |
23008 } // namespace dart | 23047 } // namespace dart |
OLD | NEW |