434 |
434 |
435 classstack = [] # stack of (class, indent) pairs |
435 classstack = [] # stack of (class, indent) pairs |
436 conditionalsstack = [] # stack of indents of conditional defines |
436 conditionalsstack = [] # stack of indents of conditional defines |
437 deltastack = [] |
437 deltastack = [] |
438 deltaindent = 0 |
438 deltaindent = 0 |
439 deltaindentcalculated = 0 |
439 deltaindentcalculated = False |
440 |
440 |
441 lineno, last_lineno_pos = 1, 0 |
441 lineno, last_lineno_pos = 1, 0 |
442 i = 0 |
442 i = 0 |
443 modifierType = ClbrBaseClasses.Function.General |
443 modifierType = ClbrBaseClasses.Function.General |
444 modifierIndent = -1 |
444 modifierIndent = -1 |
477 if conditionalsstack: |
477 if conditionalsstack: |
478 if thisindent > conditionalsstack[-1]: |
478 if thisindent > conditionalsstack[-1]: |
479 if not deltaindentcalculated: |
479 if not deltaindentcalculated: |
480 deltastack.append(thisindent - conditionalsstack[-1]) |
480 deltastack.append(thisindent - conditionalsstack[-1]) |
481 deltaindent = reduce(lambda x, y: x + y, deltastack) |
481 deltaindent = reduce(lambda x, y: x + y, deltastack) |
482 deltaindentcalculated = 1 |
482 deltaindentcalculated = True |
483 thisindent -= deltaindent |
483 thisindent -= deltaindent |
484 else: |
484 else: |
485 while ( |
485 while ( |
486 conditionalsstack and |
486 conditionalsstack and |
487 conditionalsstack[-1] >= thisindent |
487 conditionalsstack[-1] >= thisindent |
488 ): |
488 ): |
489 del conditionalsstack[-1] |
489 del conditionalsstack[-1] |
490 if deltastack: |
490 if deltastack: |
491 del deltastack[-1] |
491 del deltastack[-1] |
492 deltaindentcalculated = 0 |
492 deltaindentcalculated = False |
493 # close all classes indented at least as much |
493 # close all classes indented at least as much |
494 while classstack and classstack[-1][1] >= thisindent: |
494 while classstack and classstack[-1][1] >= thisindent: |
495 del classstack[-1] |
495 del classstack[-1] |
496 if classstack: |
496 if classstack: |
497 # it's a class method |
497 # it's a class method |
562 d = _modules[m] |
562 d = _modules[m] |
563 if c in d: |
563 if c in d: |
564 n = d[c] |
564 n = d[c] |
565 names.append(n) |
565 names.append(n) |
566 inherit = names |
566 inherit = names |
|
567 # modify indentation level for conditional defines |
|
568 if conditionalsstack: |
|
569 if thisindent > conditionalsstack[-1]: |
|
570 if not deltaindentcalculated: |
|
571 deltastack.append(thisindent - conditionalsstack[-1]) |
|
572 deltaindent = reduce(lambda x, y: x + y, deltastack) |
|
573 deltaindentcalculated = True |
|
574 thisindent -= deltaindent |
|
575 else: |
|
576 while ( |
|
577 conditionalsstack and |
|
578 conditionalsstack[-1] >= thisindent |
|
579 ): |
|
580 del conditionalsstack[-1] |
|
581 if deltastack: |
|
582 del deltastack[-1] |
|
583 deltaindentcalculated = False |
567 # remember this class |
584 # remember this class |
568 cur_class = Class(module, class_name, inherit, |
585 cur_class = Class(module, class_name, inherit, |
569 file, lineno) |
586 file, lineno) |
570 endlineno = calculateEndline(lineno, srcLines, thisindent) |
587 endlineno = calculateEndline(lineno, srcLines, thisindent) |
571 cur_class.setEndLine(endlineno) |
588 cur_class.setEndLine(endlineno) |
671 while conditionalsstack and conditionalsstack[-1] >= thisindent: |
688 while conditionalsstack and conditionalsstack[-1] >= thisindent: |
672 del conditionalsstack[-1] |
689 del conditionalsstack[-1] |
673 if deltastack: |
690 if deltastack: |
674 del deltastack[-1] |
691 del deltastack[-1] |
675 conditionalsstack.append(thisindent) |
692 conditionalsstack.append(thisindent) |
676 deltaindentcalculated = 0 |
693 deltaindentcalculated = False |
677 |
694 |
678 elif m.start("CodingLine") >= 0: |
695 elif m.start("CodingLine") >= 0: |
679 # a coding statement |
696 # a coding statement |
680 coding = m.group("Coding") |
697 coding = m.group("Coding") |
681 lineno = lineno + src.count('\n', last_lineno_pos, start) |
698 lineno = lineno + src.count('\n', last_lineno_pos, start) |