<div><div>+class MSPropertyDecl : public DeclaratorDecl {</div><div>+public:</div><div>+  MSPropertyDecl(Kind DK, DeclContext *DC, SourceLocation L,</div><div>+                 DeclarationName N, QualType T, TypeSourceInfo *TInfo,</div>

<div>+                 SourceLocation StartL, llvm::StringRef Getter,</div><div>+                 llvm::StringRef Setter):</div><div>+    DeclaratorDecl(DK, DC, L, N, T, TInfo, StartL), GetterName(Getter),</div><div>+    SetterName(Setter) {}</div>

<div>+  </div><div>+  static bool classof(const Decl *D) { return D->getKind() == MSProperty; }</div><div>+</div><div>+  bool hasGetter() { return !GetterName.empty(); }</div><div>+  llvm::StringRef getGetterName() { return GetterName; }</div>

<div>+  bool hasSetter() { return !SetterName.empty(); }</div><div>+  llvm::StringRef getSetterName() { return SetterName; }</div><div>+</div><div>+private:</div><div>+  llvm::StringRef GetterName, SetterName;</div><div>
+};</div>
</div><div><br></div>Why are you storing the getter and setter as StringRef in MSPropertyDecl?<div><br></div><div>I think it would make more sense to lookup them up under Sema and store the AST node directly. Also the private members should be at the top of the class to be consistent with the rest of the AST code conventions.</div>

<div><br></div><div><div>+void ASTStmtReader::VisitMSPropertyRefExpr(MSPropertyRefExpr *E) {</div><div>+  llvm_unreachable("Shouldn't get here");</div><div>+}</div></div><div><br></div><div><div>+void ASTStmtWriter::VisitMSPropertyRefExpr(MSPropertyRefExpr *E) {</div>

<div>+  llvm_unreachable("Shouldn't get here");</div><div>+}</div></div><div style="text-align:right"><br></div><div>These should be implemented.</div><div><br></div><div>The parsing code seems to do more string comparisons than are necessary but since this feature is not that common it might be fine, I'll leave that for other people to comment.</div>

<div><br></div><div><div>-- <br>João Matos
</div></div>