Index: runtime/vm/object.cc |
=================================================================== |
--- runtime/vm/object.cc (revision 15166) |
+++ runtime/vm/object.cc (working copy) |
@@ -4190,6 +4190,30 @@ |
} |
+// Construct fingerprint from token stream. The token stream contains also |
+// arguments. |
+intptr_t Function::SourceFingerprint() const { |
+ intptr_t result = String::Handle(Signature()).Hash(); |
+ TokenStream::Iterator tokens_iterator(TokenStream::Handle( |
+ Script::Handle(script()).tokens()), token_pos()); |
+ Object& obj = Object::Handle(); |
+ String& literal = String::Handle(); |
+ while (tokens_iterator.CurrentPosition() < end_token_pos()) { |
+ intptr_t val = 0; |
+ obj = tokens_iterator.CurrentToken(); |
+ if (obj.IsSmi()) { |
+ val = Smi::Cast(obj).Value(); |
+ } else { |
+ literal = tokens_iterator.MakeLiteralToken(obj); |
+ val = literal.Hash(); |
+ } |
+ result = 31 * result + val; |
+ tokens_iterator.Advance(); |
+ } |
+ return result; |
+} |
+ |
+ |
const char* Function::ToCString() const { |
const char* static_str = is_static() ? " static" : ""; |
const char* abstract_str = is_abstract() ? " abstract" : ""; |