Skip to content
  1. May 27, 2010
  2. May 26, 2010
  3. May 25, 2010
  4. May 21, 2010
  5. May 19, 2010
  6. May 18, 2010
  7. May 17, 2010
  8. May 15, 2010
    • John McCall's avatar
      Substantially alter the design of the Objective C type AST by introducing · 8b07ec25
      John McCall authored
      ObjCObjectType, which is basically just a pair of
        one of {primitive-id, primitive-Class, user-defined @class}
      with
        a list of protocols.
      An ObjCObjectPointerType is therefore just a pointer which always points to
      one of these types (possibly sugared).  ObjCInterfaceType is now just a kind
      of ObjCObjectType which happens to not carry any protocols.
      
      Alter a rather large number of use sites to use ObjCObjectType instead of
      ObjCInterfaceType.  Store an ObjCInterfaceType as a pointer on the decl rather
      than hashing them in a FoldingSet.  Remove some number of methods that are no
      longer used, at least after this patch.
      
      By simplifying ObjCObjectPointerType, we are now able to easily remove and apply
      pointers to Objective-C types, which is crucial for a certain kind of ObjC++
      metaprogramming common in WebKit.
      
      llvm-svn: 103870
      8b07ec25
  9. May 13, 2010
  10. May 11, 2010
  11. May 06, 2010
  12. May 05, 2010
  13. Apr 29, 2010
    • Douglas Gregor's avatar
      Completely reimplement __builtin_offsetof, based on a patch by Roberto · 882211c1
      Douglas Gregor authored
      Amadini.
      
      This change introduces a new expression node type, OffsetOfExpr, that
      describes __builtin_offsetof. Previously, __builtin_offsetof was
      implemented using a unary operator whose subexpression involved
      various synthesized array-subscript and member-reference expressions,
      which was ugly and made it very hard to instantiate as a
      template. OffsetOfExpr represents the AST more faithfully, with proper
      type source information and a more compact representation.
      
      OffsetOfExpr also has support for dependent __builtin_offsetof
      expressions; it can be value-dependent, but will never be
      type-dependent (like sizeof or alignof). This commit introduces
      template instantiation for __builtin_offsetof as well.
      
      There are two major caveats to this patch:
      
        1) CodeGen cannot handle the case where __builtin_offsetof is not a
        constant expression, so it produces an error. So, to avoid
        regressing in C, we retain the old UnaryOperator-based
        __builtin_offsetof implementation in C while using the shiny new
        OffsetOfExpr implementation in C++. The old implementation can go
        away once we have proper CodeGen support for this case, which we
        expect won't cause much trouble in C++.
      
        2) __builtin_offsetof doesn't work well with non-POD class types,
        particularly when the designated field is found within a base
        class. I will address this in a subsequent patch.
      
      Fixes PR5880 and a bunch of assertions when building Boost.Python
      tests. 
      
      llvm-svn: 102542
      882211c1
  14. Apr 26, 2010
  15. Apr 21, 2010
    • Zhongxing Xu's avatar
      CXXNamedCastExpr is actually an abstract expression. · 105dfb5a
      Zhongxing Xu authored
      llvm-svn: 101994
      105dfb5a
    • Zhongxing Xu's avatar
      Use the right predecessor. · 3affbe6b
      Zhongxing Xu authored
      llvm-svn: 101981
      3affbe6b
    • Zhongxing Xu's avatar
      Add initial support for C++ delete expr. · d80755da
      Zhongxing Xu authored
      llvm-svn: 101980
      d80755da
    • Douglas Gregor's avatar
      Overhaul the AST representation of Objective-C message send · 9a129194
      Douglas Gregor authored
      expressions, to improve source-location information, clarify the
      actual receiver of the message, and pave the way for proper C++
      support. The ObjCMessageExpr node represents four different kinds of
      message sends in a single AST node:
      
        1) Send to a object instance described by an expression (e.g., [x method:5])
        2) Send to a class described by the class name (e.g., [NSString method:5])
        3) Send to a superclass class (e.g, [super method:5] in class method)
        4) Send to a superclass instance (e.g., [super method:5] in instance method)
      
      Previously these four cases where tangled together. Now, they have
      more distinct representations. Specific changes:
      
        1) Unchanged; the object instance is represented by an Expr*.
      
        2) Previously stored the ObjCInterfaceDecl* referring to the class
        receiving the message. Now stores a TypeSourceInfo* so that we know
        how the class was spelled. This both maintains typedef information
        and opens the door for more complicated C++ types (e.g., dependent
        types). There was an alternative, unused representation of these
        sends by naming the class via an IdentifierInfo *. In practice, we
        either had an ObjCInterfaceDecl *, from which we would get the
        IdentifierInfo *, or we fell into the case below...
      
        3) Previously represented by a class message whose IdentifierInfo *
        referred to "super". Sema and CodeGen would use isStr("super") to
        determine if they had a send to super. Now represented as a
        "class super" send, where we have both the location of the "super"
        keyword and the ObjCInterfaceDecl* of the superclass we're
        targetting (statically).
      
        4) Previously represented by an instance message whose receiver is a
        an ObjCSuperExpr, which Sema and CodeGen would check for via
        isa<ObjCSuperExpr>(). Now represented as an "instance super" send,
        where we have both the location of the "super" keyword and the
        ObjCInterfaceDecl* of the superclass we're targetting
        (statically). Note that ObjCSuperExpr only has one remaining use in
        the AST, which is for "super.prop" references.
      
      The new representation of ObjCMessageExpr is 2 pointers smaller than
      the old one, since it combines more storage. It also eliminates a leak
      when we loaded message-send expressions from a precompiled header. The
      representation also feels much cleaner to me; comments welcome!
      
      This patch attempts to maintain the same semantics we previously had
      with Objective-C message sends. In several places, there are massive
      changes that boil down to simply replacing a nested-if structure such
      as:
      
        if (message has a receiver expression) {
          // instance message
          if (isa<ObjCSuperExpr>(...)) {
           // send to super
          } else {
           // send to an object
         }
        } else {
          // class message
          if (name->isStr("super")) {
            // class send to super
          } else {
            // send to class
          }
        }
      
      with a switch
      
        switch (E->getReceiverKind()) {
        case ObjCMessageExpr::SuperInstance: ...
        case ObjCMessageExpr::Instance: ...
        case ObjCMessageExpr::SuperClass: ...
        case ObjCMessageExpr::Class:...
        }
      
      There are quite a few places (particularly in the checkers) where
      send-to-super is effectively ignored. I've placed FIXMEs in most of
      them, and attempted to address send-to-super in a reasonable way. This
      could use some review.
      
      llvm-svn: 101972
      9a129194
  16. Apr 20, 2010
  17. Apr 19, 2010
  18. Apr 17, 2010
  19. Apr 16, 2010
  20. Apr 15, 2010
  21. Apr 14, 2010
  22. Apr 13, 2010
  23. Apr 09, 2010
  24. Apr 08, 2010
  25. Apr 07, 2010
Loading