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/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 5425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5436 } else { | 5436 } else { |
5437 tmp = cls.UserVisibleName(); | 5437 tmp = cls.UserVisibleName(); |
5438 } | 5438 } |
5439 } | 5439 } |
5440 tmp = String::Concat(tmp, Symbols::Dot()); | 5440 tmp = String::Concat(tmp, Symbols::Dot()); |
5441 const String& suffix = String::Handle(UserVisibleName()); | 5441 const String& suffix = String::Handle(UserVisibleName()); |
5442 return String::Concat(tmp, suffix); | 5442 return String::Concat(tmp, suffix); |
5443 } | 5443 } |
5444 | 5444 |
5445 | 5445 |
5446 RawString* Function::GenerateSource() { | |
hausner
2013/11/05 22:30:05
I suggest making this a bit more smart. If we do h
| |
5447 const Script& func_script = Script::Handle(script()); | |
5448 const TokenStream& token_stream = TokenStream::Handle(func_script.tokens()); | |
5449 return token_stream.GenerateSource(token_pos(), end_token_pos()); | |
5450 } | |
5451 | |
5452 | |
5446 // Construct fingerprint from token stream. The token stream contains also | 5453 // Construct fingerprint from token stream. The token stream contains also |
5447 // arguments. | 5454 // arguments. |
5448 int32_t Function::SourceFingerprint() const { | 5455 int32_t Function::SourceFingerprint() const { |
5449 uint32_t result = String::Handle(Signature()).Hash(); | 5456 uint32_t result = String::Handle(Signature()).Hash(); |
5450 TokenStream::Iterator tokens_iterator(TokenStream::Handle( | 5457 TokenStream::Iterator tokens_iterator(TokenStream::Handle( |
5451 Script::Handle(script()).tokens()), token_pos()); | 5458 Script::Handle(script()).tokens()), token_pos()); |
5452 Object& obj = Object::Handle(); | 5459 Object& obj = Object::Handle(); |
5453 String& literal = String::Handle(); | 5460 String& literal = String::Handle(); |
5454 while (tokens_iterator.CurrentPosition() < end_token_pos()) { | 5461 while (tokens_iterator.CurrentPosition() < end_token_pos()) { |
5455 uint32_t val = 0; | 5462 uint32_t val = 0; |
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6243 RawString* TokenStream::PrivateKey() const { | 6250 RawString* TokenStream::PrivateKey() const { |
6244 return raw_ptr()->private_key_; | 6251 return raw_ptr()->private_key_; |
6245 } | 6252 } |
6246 | 6253 |
6247 | 6254 |
6248 void TokenStream::SetPrivateKey(const String& value) const { | 6255 void TokenStream::SetPrivateKey(const String& value) const { |
6249 StorePointer(&raw_ptr()->private_key_, value.raw()); | 6256 StorePointer(&raw_ptr()->private_key_, value.raw()); |
6250 } | 6257 } |
6251 | 6258 |
6252 | 6259 |
6253 RawString* TokenStream::GenerateSource() const { | 6260 RawString* TokenStream::GenerateSource(intptr_t start_tok_pos, |
6254 Iterator iterator(*this, 0, Iterator::kAllTokens); | 6261 intptr_t end_tok_pos) const { |
6262 Iterator iterator(*this, start_tok_pos, Iterator::kAllTokens); | |
6255 const ExternalTypedData& data = ExternalTypedData::Handle(GetStream()); | 6263 const ExternalTypedData& data = ExternalTypedData::Handle(GetStream()); |
6256 const GrowableObjectArray& literals = | 6264 const GrowableObjectArray& literals = |
6257 GrowableObjectArray::Handle(GrowableObjectArray::New(data.Length())); | 6265 GrowableObjectArray::Handle(GrowableObjectArray::New(data.Length())); |
6258 const String& private_key = String::Handle(PrivateKey()); | 6266 const String& private_key = String::Handle(PrivateKey()); |
6259 intptr_t private_len = private_key.Length(); | 6267 intptr_t private_len = private_key.Length(); |
6260 | 6268 |
6261 Token::Kind curr = iterator.CurrentTokenKind(); | 6269 Token::Kind curr = iterator.CurrentTokenKind(); |
6262 Token::Kind prev = Token::kILLEGAL; | 6270 Token::Kind prev = Token::kILLEGAL; |
6263 // Handles used in the loop. | 6271 // Handles used in the loop. |
6264 Object& obj = Object::Handle(); | 6272 Object& obj = Object::Handle(); |
6265 String& literal = String::Handle(); | 6273 String& literal = String::Handle(); |
6266 // Current indentation level. | 6274 // Current indentation level. |
6267 int indent = 0; | 6275 int indent = 0; |
6268 | 6276 |
6269 while (curr != Token::kEOS) { | 6277 while (curr != Token::kEOS) { |
6278 if ((end_tok_pos > 0) && (iterator.CurrentPosition() > end_tok_pos)) { | |
hausner
2013/11/05 22:30:05
Is end_token_pos inclusive or exclusive? Typically
| |
6279 // We've reached the end of the token stream we want. | |
6280 break; | |
6281 } | |
6270 // Remember current values for this token. | 6282 // Remember current values for this token. |
6271 obj = iterator.CurrentToken(); | 6283 obj = iterator.CurrentToken(); |
6272 literal = iterator.MakeLiteralToken(obj); | 6284 literal = iterator.MakeLiteralToken(obj); |
6273 // Advance to be able to use next token kind. | 6285 // Advance to be able to use next token kind. |
6274 iterator.Advance(); | 6286 iterator.Advance(); |
6275 Token::Kind next = iterator.CurrentTokenKind(); | 6287 Token::Kind next = iterator.CurrentTokenKind(); |
6276 | 6288 |
6277 // Handle the current token. | 6289 // Handle the current token. |
6278 if (curr == Token::kSTRING) { | 6290 if (curr == Token::kSTRING) { |
6279 bool escape_characters = false; | 6291 bool escape_characters = false; |
(...skipping 9464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
15744 return "_MirrorReference"; | 15756 return "_MirrorReference"; |
15745 } | 15757 } |
15746 | 15758 |
15747 | 15759 |
15748 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { | 15760 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { |
15749 JSONObject jsobj(stream); | 15761 JSONObject jsobj(stream); |
15750 } | 15762 } |
15751 | 15763 |
15752 | 15764 |
15753 } // namespace dart | 15765 } // namespace dart |
OLD | NEW |