parent
							
								
									e3d1ab29da
								
							
						
					
					
						commit
						e46504b278
					
				| 
						 | 
				
			
			@ -923,6 +923,10 @@ bool ChooseExpr::isConditionTrue(ASTContext &C) const {
 | 
			
		|||
Stmt::child_iterator DeclRefExpr::child_begin() { return child_iterator(); }
 | 
			
		||||
Stmt::child_iterator DeclRefExpr::child_end() { return child_iterator(); }
 | 
			
		||||
 | 
			
		||||
// ObjCIvarRefExpr
 | 
			
		||||
Stmt::child_iterator ObjCIvarRefExpr::child_begin() { return child_iterator(); }
 | 
			
		||||
Stmt::child_iterator ObjCIvarRefExpr::child_end() { return child_iterator(); }
 | 
			
		||||
 | 
			
		||||
// PreDefinedExpr
 | 
			
		||||
Stmt::child_iterator PreDefinedExpr::child_begin() { return child_iterator(); }
 | 
			
		||||
Stmt::child_iterator PreDefinedExpr::child_end() { return child_iterator(); }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -382,6 +382,10 @@ void StmtPrinter::VisitDeclRefExpr(DeclRefExpr *Node) {
 | 
			
		|||
  OS << Node->getDecl()->getName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StmtPrinter::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) {
 | 
			
		||||
  OS << Node->getDecl()->getName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void StmtPrinter::VisitPreDefinedExpr(PreDefinedExpr *Node) {
 | 
			
		||||
  switch (Node->getIdentType()) {
 | 
			
		||||
    default:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -337,6 +337,20 @@ DeclRefExpr* DeclRefExpr::directMaterialize(Deserializer& D) {
 | 
			
		|||
  return dr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ObjCIvarRefExpr::directEmit(Serializer& S) const {
 | 
			
		||||
  S.Emit(Loc);
 | 
			
		||||
  S.Emit(getType());
 | 
			
		||||
  S.EmitPtr(getDecl());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ObjCIvarRefExpr* ObjCIvarRefExpr::directMaterialize(Deserializer& D) {
 | 
			
		||||
  SourceLocation Loc = SourceLocation::ReadVal(D);
 | 
			
		||||
  QualType T = QualType::ReadVal(D);
 | 
			
		||||
  ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,T,Loc);
 | 
			
		||||
  D.ReadPtr(dr->D,false);  
 | 
			
		||||
  return dr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DeclStmt* DeclStmt::directMaterialize(Deserializer& D) {
 | 
			
		||||
  ScopedDecl* decl = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
 | 
			
		||||
  return new DeclStmt(decl);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,6 +82,12 @@ Sema::ExprResult Sema::ActOnIdentifierExpr(Scope *S, SourceLocation Loc,
 | 
			
		|||
        !getLangOptions().CPlusPlus)
 | 
			
		||||
      D = ImplicitlyDefineFunction(Loc, II, S);
 | 
			
		||||
    else {
 | 
			
		||||
      if (CurMethodDecl) {
 | 
			
		||||
        ObjcInterfaceDecl *IFace = CurMethodDecl->getClassInterface();
 | 
			
		||||
        ObjcInterfaceDecl *clsDeclared;
 | 
			
		||||
        if (ObjcIvarDecl *IV = IFace->lookupInstanceVariable(&II, clsDeclared))
 | 
			
		||||
          return new ObjCIvarRefExpr(IV, IV->getType(), Loc);
 | 
			
		||||
      }
 | 
			
		||||
      // If this name wasn't predeclared and if this is not a function call,
 | 
			
		||||
      // diagnose the problem.
 | 
			
		||||
      return Diag(Loc, diag::err_undeclared_var_use, II.getName());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1230,6 +1230,31 @@ class ObjCProtocolExpr : public Expr {
 | 
			
		|||
    
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// ObjCIvarRefExpr - A reference to an ObjC instance variable.
 | 
			
		||||
class ObjCIvarRefExpr : public Expr {
 | 
			
		||||
  class ObjcIvarDecl *D; 
 | 
			
		||||
  SourceLocation Loc;
 | 
			
		||||
public:
 | 
			
		||||
  ObjCIvarRefExpr(ObjcIvarDecl *d, QualType t, SourceLocation l) : 
 | 
			
		||||
    Expr(ObjCIvarRefExprClass, t), D(d), Loc(l) {}
 | 
			
		||||
  
 | 
			
		||||
  ObjcIvarDecl *getDecl() { return D; }
 | 
			
		||||
  const ObjcIvarDecl *getDecl() const { return D; }
 | 
			
		||||
  virtual SourceRange getSourceRange() const { return SourceRange(Loc); }
 | 
			
		||||
  
 | 
			
		||||
  static bool classof(const Stmt *T) { 
 | 
			
		||||
    return T->getStmtClass() == ObjCIvarRefExprClass; 
 | 
			
		||||
  }
 | 
			
		||||
  static bool classof(const ObjCIvarRefExpr *) { return true; }
 | 
			
		||||
  
 | 
			
		||||
  // Iterators
 | 
			
		||||
  virtual child_iterator child_begin();
 | 
			
		||||
  virtual child_iterator child_end();
 | 
			
		||||
  
 | 
			
		||||
  virtual void directEmit(llvm::Serializer& S) const;
 | 
			
		||||
  static ObjCIvarRefExpr* directMaterialize(llvm::Deserializer& D);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class ObjCMessageExpr : public Expr {
 | 
			
		||||
  enum { RECEIVER=0, ARGS_START=1 };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -94,8 +94,9 @@ STMT(71, ObjCEncodeExpr       , Expr)
 | 
			
		|||
STMT(72, ObjCMessageExpr      , Expr)
 | 
			
		||||
STMT(73, ObjCSelectorExpr     , Expr)
 | 
			
		||||
STMT(74, ObjCProtocolExpr     , Expr)
 | 
			
		||||
STMT(75, ObjCIvarRefExpr      , Expr)
 | 
			
		||||
 | 
			
		||||
LAST_EXPR(74)
 | 
			
		||||
LAST_EXPR(75)
 | 
			
		||||
 | 
			
		||||
#undef STMT
 | 
			
		||||
#undef FIRST_STMT
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue