OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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/precompiler.h" | 5 #include "vm/precompiler.h" |
6 | 6 |
7 #include "vm/aot_optimizer.h" | 7 #include "vm/aot_optimizer.h" |
8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
9 #include "vm/ast_printer.h" | 9 #include "vm/ast_printer.h" |
10 #include "vm/branch_optimizer.h" | 10 #include "vm/branch_optimizer.h" |
(...skipping 1477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1488 // Regular function. Enter both getter and non getter name. | 1488 // Regular function. Enter both getter and non getter name. |
1489 AddNameToFunctionsTable(zone(), &table, fname, function); | 1489 AddNameToFunctionsTable(zone(), &table, fname, function); |
1490 fname = Field::GetterName(fname); | 1490 fname = Field::GetterName(fname); |
1491 AddNameToFunctionsTable(zone(), &table, fname, function); | 1491 AddNameToFunctionsTable(zone(), &table, fname, function); |
1492 } | 1492 } |
1493 } | 1493 } |
1494 } | 1494 } |
1495 } | 1495 } |
1496 } | 1496 } |
1497 | 1497 |
1498 // Locate all entries with one function only, and whose owner is neither | 1498 // Locate all entries with one function only |
1499 // subclassed nor implemented. | |
1500 Table::Iterator iter(&table); | 1499 Table::Iterator iter(&table); |
1501 String& key = String::Handle(Z); | 1500 String& key = String::Handle(Z); |
1502 UniqueFunctionsSet functions_set(HashTables::New<UniqueFunctionsSet>(20)); | 1501 UniqueFunctionsSet functions_set(HashTables::New<UniqueFunctionsSet>(20)); |
1503 while (iter.MoveNext()) { | 1502 while (iter.MoveNext()) { |
1504 intptr_t curr_key = iter.Current(); | 1503 intptr_t curr_key = iter.Current(); |
1505 key ^= table.GetKey(curr_key); | 1504 key ^= table.GetKey(curr_key); |
1506 farray ^= table.GetOrNull(key); | 1505 farray ^= table.GetOrNull(key); |
1507 ASSERT(!farray.IsNull()); | 1506 ASSERT(!farray.IsNull()); |
1508 if (farray.Length() == 1) { | 1507 if (farray.Length() == 1) { |
1509 function ^= farray.At(0); | 1508 function ^= farray.At(0); |
1510 cls = function.Owner(); | 1509 cls = function.Owner(); |
1511 if (!CHA::IsImplemented(cls) && !CHA::HasSubclasses(cls)) { | 1510 functions_set.Insert(function); |
1512 functions_set.Insert(function); | |
1513 } | |
1514 } | 1511 } |
1515 } | 1512 } |
1516 | 1513 |
1517 if (FLAG_print_unique_targets) { | 1514 if (FLAG_print_unique_targets) { |
1518 UniqueFunctionsSet::Iterator unique_iter(&functions_set); | 1515 UniqueFunctionsSet::Iterator unique_iter(&functions_set); |
1519 while (unique_iter.MoveNext()) { | 1516 while (unique_iter.MoveNext()) { |
1520 intptr_t curr_key = unique_iter.Current(); | 1517 intptr_t curr_key = unique_iter.Current(); |
1521 function ^= functions_set.GetKey(curr_key); | 1518 function ^= functions_set.GetKey(curr_key); |
1522 THR_Print("* %s\n", function.ToQualifiedCString()); | 1519 THR_Print("* %s\n", function.ToQualifiedCString()); |
1523 } | 1520 } |
(...skipping 1819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3343 | 3340 |
3344 ASSERT(FLAG_precompiled_mode); | 3341 ASSERT(FLAG_precompiled_mode); |
3345 const bool optimized = function.IsOptimizable(); // False for natives. | 3342 const bool optimized = function.IsOptimizable(); // False for natives. |
3346 DartPrecompilationPipeline pipeline(zone, field_type_map); | 3343 DartPrecompilationPipeline pipeline(zone, field_type_map); |
3347 return PrecompileFunctionHelper(&pipeline, function, optimized); | 3344 return PrecompileFunctionHelper(&pipeline, function, optimized); |
3348 } | 3345 } |
3349 | 3346 |
3350 #endif // DART_PRECOMPILER | 3347 #endif // DART_PRECOMPILER |
3351 | 3348 |
3352 } // namespace dart | 3349 } // namespace dart |
OLD | NEW |