Chromium Code Reviews| 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/debugger.h" | 5 #include "vm/debugger.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 | 8 |
| 9 #include "vm/code_generator.h" | 9 #include "vm/code_generator.h" |
| 10 #include "vm/code_patcher.h" | 10 #include "vm/code_patcher.h" |
| (...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1385 Class& cls = Class::Handle(isolate_); | 1385 Class& cls = Class::Handle(isolate_); |
| 1386 Array& functions = Array::Handle(isolate_); | 1386 Array& functions = Array::Handle(isolate_); |
| 1387 GrowableObjectArray& closures = GrowableObjectArray::Handle(isolate_); | 1387 GrowableObjectArray& closures = GrowableObjectArray::Handle(isolate_); |
| 1388 Function& function = Function::Handle(isolate_); | 1388 Function& function = Function::Handle(isolate_); |
| 1389 | 1389 |
| 1390 const ClassTable& class_table = *isolate_->class_table(); | 1390 const ClassTable& class_table = *isolate_->class_table(); |
| 1391 const intptr_t num_classes = class_table.NumCids(); | 1391 const intptr_t num_classes = class_table.NumCids(); |
| 1392 for (intptr_t i = 1; i < num_classes; i++) { | 1392 for (intptr_t i = 1; i < num_classes; i++) { |
| 1393 if (class_table.HasValidClassAt(i)) { | 1393 if (class_table.HasValidClassAt(i)) { |
| 1394 cls = class_table.At(i); | 1394 cls = class_table.At(i); |
| 1395 // If the class is not finalized, e.g. if it hasn't been parsed | |
| 1396 // yet entirely, we can ignore it. If it contains a function with | |
| 1397 // a latent breakpoint, we will detect it if and when the function | |
| 1398 // gets compiled. | |
| 1399 if (!cls.is_finalized()) { | |
| 1400 continue; | |
| 1401 } | |
| 1395 // Note: we need to check the functions of this class even if | 1402 // Note: we need to check the functions of this class even if |
| 1396 // the class is defined in a differenct 'script'. There could | 1403 // the class is defined in a differenct 'script'. There could |
| 1397 // be mixin functions from the given script in this class. | 1404 // be mixin functions from the given script in this class. |
| 1398 functions = cls.functions(); | 1405 functions = cls.functions(); |
| 1399 if (!functions.IsNull()) { | 1406 if (!functions.IsNull()) { |
| 1400 const intptr_t num_functions = functions.Length(); | 1407 const intptr_t num_functions = functions.Length(); |
| 1401 for (intptr_t pos = 0; pos < num_functions; pos++) { | 1408 for (intptr_t pos = 0; pos < num_functions; pos++) { |
| 1402 function ^= functions.At(pos); | 1409 function ^= functions.At(pos); |
| 1403 ASSERT(!function.IsNull()); | 1410 ASSERT(!function.IsNull()); |
| 1404 // Check token position first to avoid unnecessary calls | 1411 // Check token position first to avoid unnecessary calls |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1468 Array& functions = Array::Handle(isolate_); | 1475 Array& functions = Array::Handle(isolate_); |
| 1469 GrowableObjectArray& closures = GrowableObjectArray::Handle(isolate_); | 1476 GrowableObjectArray& closures = GrowableObjectArray::Handle(isolate_); |
| 1470 Function& function = Function::Handle(isolate_); | 1477 Function& function = Function::Handle(isolate_); |
| 1471 Function& best_fit = Function::Handle(isolate_); | 1478 Function& best_fit = Function::Handle(isolate_); |
| 1472 | 1479 |
| 1473 const ClassTable& class_table = *isolate_->class_table(); | 1480 const ClassTable& class_table = *isolate_->class_table(); |
| 1474 const intptr_t num_classes = class_table.NumCids(); | 1481 const intptr_t num_classes = class_table.NumCids(); |
| 1475 for (intptr_t i = 1; i < num_classes; i++) { | 1482 for (intptr_t i = 1; i < num_classes; i++) { |
| 1476 if (class_table.HasValidClassAt(i)) { | 1483 if (class_table.HasValidClassAt(i)) { |
| 1477 cls = class_table.At(i); | 1484 cls = class_table.At(i); |
| 1478 // Note: we need to check the functions of this class even if | 1485 // Note: if this class has been parsed and finalized already, |
| 1479 // the class is defined in a differenct 'script'. There could | 1486 // we need to check the functions of this class even if |
| 1487 // it is defined in a differenct 'script'. There could | |
| 1480 // be mixin functions from the given script in this class. | 1488 // be mixin functions from the given script in this class. |
| 1489 // However, if this class is not parsed yet (not finalized), | |
| 1490 // we can ignore it and avoid the side effect of parsing it. | |
| 1491 if ((cls.script() != script.raw()) && !cls.is_finalized()) { | |
| 1492 continue; | |
| 1493 } | |
| 1494 // Parse class definition if not done yet. | |
| 1495 cls.EnsureIsFinalized(isolate_); | |
|
Ivan Posva
2014/01/03 20:21:13
What happens if there is a compilation failure dur
hausner
2014/01/03 20:52:52
The compilation error gets dropped and the class r
| |
| 1481 functions = cls.functions(); | 1496 functions = cls.functions(); |
| 1482 if (!functions.IsNull()) { | 1497 if (!functions.IsNull()) { |
| 1483 const intptr_t num_functions = functions.Length(); | 1498 const intptr_t num_functions = functions.Length(); |
| 1484 for (intptr_t pos = 0; pos < num_functions; pos++) { | 1499 for (intptr_t pos = 0; pos < num_functions; pos++) { |
| 1485 function ^= functions.At(pos); | 1500 function ^= functions.At(pos); |
| 1486 ASSERT(!function.IsNull()); | 1501 ASSERT(!function.IsNull()); |
| 1487 if (FunctionContains(function, script, token_pos)) { | 1502 if (FunctionContains(function, script, token_pos)) { |
| 1488 SelectBestFit(&best_fit, &function); | 1503 SelectBestFit(&best_fit, &function); |
| 1489 } | 1504 } |
| 1490 } | 1505 } |
| (...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2271 } | 2286 } |
| 2272 | 2287 |
| 2273 | 2288 |
| 2274 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { | 2289 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { |
| 2275 ASSERT(bpt->next() == NULL); | 2290 ASSERT(bpt->next() == NULL); |
| 2276 bpt->set_next(code_breakpoints_); | 2291 bpt->set_next(code_breakpoints_); |
| 2277 code_breakpoints_ = bpt; | 2292 code_breakpoints_ = bpt; |
| 2278 } | 2293 } |
| 2279 | 2294 |
| 2280 } // namespace dart | 2295 } // namespace dart |
| OLD | NEW |