Changeset 1043
- Timestamp:
- 02/15/10 15:17:06 (5 months ago)
- Location:
- trunk/rphp
- Files:
-
- 2 modified
-
compiler/analysis/passes/DumpAST.cpp (modified) (1 diff)
-
include/rphp/analysis/pAST.h (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/rphp/compiler/analysis/passes/DumpAST.cpp
r1039 r1043 92 92 93 93 void DumpAST::visit_pre_classDecl(classDecl* n) { 94 currentElement_->SetAttribute("id",n->name()); 94 95 currentElement_->SetAttribute("id",n->name()); 96 TiXmlElement* sub, *node; 97 98 switch (n->classType()) { 99 case classDecl::ABSTRACT: 100 currentElement_->SetAttribute("type","ABSTRACT"); 101 break; 102 case classDecl::FINAL: 103 currentElement_->SetAttribute("type","FINAL"); 104 break; 105 case classDecl::IFACE: 106 currentElement_->SetAttribute("type","INTERFACE"); 107 break; 108 case classDecl::NORMAL: 109 currentElement_->SetAttribute("type","NORMAL"); 110 break; 111 } 112 113 if (n->implementsCount()) { 114 115 sub = new TiXmlElement("implements"); 116 for (AST::idList::iterator i = n->implements_begin(); 117 i != n->implements_end(); 118 ++i) 119 { 120 // synthesize literal id nodes here 121 node = new TiXmlElement("literalID"); 122 node->SetAttribute("id", *(*i)); 123 sub->LinkEndChild(node); 124 } 125 currentElement_->LinkEndChild(sub); 126 127 } 128 else { 129 doComment("implements none"); 130 } 131 132 if (n->extendsCount()) { 133 134 sub = new TiXmlElement("extends"); 135 for (AST::idList::iterator i = n->extends_begin(); 136 i != n->extends_end(); 137 ++i) 138 { 139 // synthesize literal id nodes here 140 node = new TiXmlElement("literalID"); 141 node->SetAttribute("id", *(*i)); 142 sub->LinkEndChild(node); 143 } 144 currentElement_->LinkEndChild(sub); 145 146 } 147 else { 148 doComment("extends none"); 149 } 150 151 95 152 } 96 153 -
trunk/rphp/include/rphp/analysis/pAST.h
r1041 r1043 663 663 public: 664 664 665 enum classType { NORMAL, IFACE, FINAL, ABSTRACT }; 665 enum classTypes { NORMAL, 666 IFACE, // "INTERFACE" is keyword? throws error 667 FINAL, 668 ABSTRACT }; 666 669 667 670 private: … … 669 672 idList extends_; 670 673 idList implements_; 671 classType type_;674 classTypes classType_; 672 675 block* members_; 673 676 … … 677 680 classDecl(const classDecl& other, pParseContext& C): decl(other), 678 681 name_(other.name_), extends_(other.extends_), implements_(other.implements_), 679 type_(other.type_), members_(0)682 classType_(other.classType_), members_(0) 680 683 { 681 684 if(other.members_) … … 686 689 classDecl(pParseContext& C, 687 690 const pSourceRange& name, 688 classType type,691 classTypes type, 689 692 const sourceRangeList* extends, // may be null 690 693 const sourceRangeList* implements, // may be null … … 695 698 extends_(), 696 699 implements_(), 697 type_(type),700 classType_(type), 698 701 members_(members) 699 702 { … … 726 729 return *name_; 727 730 } 731 728 732 block* members(void) { return members_; } 733 734 classTypes classType(void) const { return classType_; } 735 736 pUInt implementsCount(void) const { return implements_.size(); } 737 pUInt extendsCount(void) const { return extends_.size(); } 729 738 730 739 stmt::child_iterator child_begin() { return (stmt**)&members_; } 731 740 stmt::child_iterator child_end() { return (stmt**)&members_+1; } 741 742 idList::iterator extends_begin() { return extends_.begin(); } 743 idList::iterator extends_end() { return extends_.end(); } 744 745 idList::iterator implements_begin() { return implements_.begin(); } 746 idList::iterator implements_end() { return implements_.end(); } 732 747 733 748 IMPLEMENT_SUPPORT_MEMBERS(classDecl);
