Index: runtime/vm/object.cc |
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc |
index 04c4e6824dc5cc8a75cef79673ad47d4fa45a660..cb675ef5f1fd05f7a7abc08c07cfd07f84ba9a88 100644 |
--- a/runtime/vm/object.cc |
+++ b/runtime/vm/object.cc |
@@ -7453,7 +7453,8 @@ void Function::SetDeoptReasonForAll(intptr_t deopt_id, |
} |
bool Function::CheckSourceFingerprint(const char* prefix, int32_t fp) const { |
- if ((kernel_offset() <= 0) && (SourceFingerprint() != fp)) { |
+ if (!Isolate::Current()->obfuscate() && (kernel_offset() <= 0) && |
+ (SourceFingerprint() != fp)) { |
const bool recalculatingFingerprints = false; |
if (recalculatingFingerprints) { |
// This output can be copied into a file, then used with sed |
@@ -8656,19 +8657,29 @@ class CompressedTokenStreamData : public Scanner::TokenCollector { |
static const bool kPrintTokenObjects = false; |
CompressedTokenStreamData(const GrowableObjectArray& ta, |
- CompressedTokenMap* map) |
+ CompressedTokenMap* map, |
+ Obfuscator* obfuscator) |
: buffer_(NULL), |
stream_(&buffer_, Reallocate, kInitialBufferSize), |
token_objects_(ta), |
tokens_(map), |
+ str_(String::Handle()), |
value_(Object::Handle()), |
fresh_index_smi_(Smi::Handle()), |
- num_tokens_collected_(0) {} |
+ num_tokens_collected_(0), |
+ obfuscator_(obfuscator) {} |
virtual ~CompressedTokenStreamData() {} |
virtual void AddToken(const Scanner::TokenDescriptor& token) { |
if (token.kind == Token::kIDENT) { // Identifier token. |
AddIdentToken(*token.literal); |
+ } else if (token.kind == Token::kINTERPOL_VAR) { |
+ str_ = token.literal->raw(); |
+ str_ = obfuscator_->Rename(str_); |
+ |
+ Scanner::TokenDescriptor token_copy = token; |
+ token_copy.literal = &str_; |
+ AddLiteralToken(token_copy); |
} else if (Token::NeedsLiteralToken(token.kind)) { // Literal token. |
AddLiteralToken(token); |
} else { // Keyword, pseudo keyword etc. |
@@ -8691,15 +8702,17 @@ class CompressedTokenStreamData : public Scanner::TokenCollector { |
void AddIdentToken(const String& ident) { |
ASSERT(ident.IsSymbol()); |
const intptr_t fresh_index = token_objects_.Length(); |
+ str_ = ident.raw(); |
+ str_ = obfuscator_->Rename(str_); |
fresh_index_smi_ = Smi::New(fresh_index); |
intptr_t index = Smi::Value( |
Smi::RawCast(tokens_->InsertOrGetValue(ident, fresh_index_smi_))); |
if (index == fresh_index) { |
- token_objects_.Add(ident); |
+ token_objects_.Add(str_); |
if (kPrintTokenObjects) { |
int iid = Isolate::Current()->main_port() % 1024; |
- OS::Print("ident %03x %p <%s>\n", iid, ident.raw(), |
- ident.ToCString()); |
+ OS::Print("%03x ident <%s -> %s>\n", iid, ident.ToCString(), |
+ str_.ToCString()); |
} |
} |
WriteIndex(index); |
@@ -8762,9 +8775,11 @@ class CompressedTokenStreamData : public Scanner::TokenCollector { |
WriteStream stream_; |
const GrowableObjectArray& token_objects_; |
CompressedTokenMap* tokens_; |
+ String& str_; |
Object& value_; |
Smi& fresh_index_smi_; |
intptr_t num_tokens_collected_; |
+ Obfuscator* obfuscator_; |
DISALLOW_COPY_AND_ASSIGN(CompressedTokenStreamData); |
}; |
@@ -8794,8 +8809,9 @@ RawTokenStream* TokenStream::New(const String& source, |
token_objects_map = HashTables::New<CompressedTokenMap>( |
kInitialPrivateCapacity, Heap::kOld); |
} |
+ Obfuscator obfuscator(thread, private_key); |
CompressedTokenMap map(token_objects_map.raw()); |
- CompressedTokenStreamData data(token_objects, &map); |
+ CompressedTokenStreamData data(token_objects, &map, &obfuscator); |
Scanner scanner(source, private_key); |
scanner.ScanAll(&data); |
INC_STAT(thread, num_tokens_scanned, data.NumTokens()); |
@@ -9236,6 +9252,7 @@ void Script::Tokenize(const String& private_key, bool use_shared_tokens) const { |
// Already tokenized. |
return; |
} |
+ |
// Get the source, scan and allocate the token stream. |
VMTagScope tagScope(thread, VMTag::kCompileScannerTagId); |
CSTAT_TIMER_SCOPE(thread, scanner_timer); |
@@ -9766,11 +9783,19 @@ void Library::set_num_imports(intptr_t value) const { |
StoreNonPointer(&raw_ptr()->num_imports_, value); |
} |
+void Library::set_name(const String& name) const { |
+ ASSERT(name.IsSymbol()); |
+ StorePointer(&raw_ptr()->name_, name.raw()); |
+} |
+ |
+void Library::set_url(const String& name) const { |
+ StorePointer(&raw_ptr()->url_, name.raw()); |
+} |
+ |
void Library::SetName(const String& name) const { |
// Only set name once. |
ASSERT(!Loaded()); |
- ASSERT(name.IsSymbol()); |
- StorePointer(&raw_ptr()->name_, name.raw()); |
+ set_name(name); |
} |
void Library::SetLoadInProgress() const { |