~ubuntu-branches/ubuntu/utopic/aspectc++/utopic

« back to all changes in this revision

Viewing changes to Puma/src/parser/ccparser/CCSemExpr.cc

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-05-30 10:01:33 UTC
  • mfrom: (1.2.7)
  • Revision ID: package-import@ubuntu.com-20120530100133-rnwnvxsb3xfsvu2w
Tags: 1:1.1+svn20120529-1
* New upstream snapshot.
  - Fixes with fcntl handling on kFreeBSD
  - Upstream fixes in the Puma Parser

Show diffs side-by-side

added added

removed removed

Lines of Context:
710
710
  if (oper == TOK_PTS) {
711
711
    // operator may be overloaded
712
712
    dep_base = resetDependent ();
713
 
    overloadedOperator (node->Son (0), node, op, oper, node->Son (0));
 
713
    CTypeInfo *ovl_type = 0;
 
714
    do {
 
715
      // repeat resolving operator->()
 
716
      ovl_type = overloadedOperator (node->Son (0), node, op, oper, node->Son (0));
 
717
    } while (ovl_type);
714
718
    if (isDependent (node, dep_base)) {
715
719
      member->setTypeRef (result);
716
720
      if (member != member->Name ())
3243
3247
 
3244
3248
      // if not resolved to a built-in operator
3245
3249
      if (! finfo->isBuiltin ()) {
3246
 
        if (node->SemValue ()) {
3247
 
          node->SemValue ()->setTypeRef (type);
 
3250
        if (base && base->NodeName () == CT_MembPtrExpr::NodeId ()) {
 
3251
          // A member pointer expr can trigger a sequence of operator->() calls.
 
3252
          // In order to avoid loss of information ImplicitCall nodes are created.
 
3253
          CT_ImplicitCall *call = new CT_ImplicitCall (node);
 
3254
          call->Object (finfo);
 
3255
          call->setTypeRef (type);
 
3256
          base->ReplaceSon (node, call);
3248
3257
        }
3249
 
        if (node->SemObject ()) {
3250
 
          node->SemObject ()->Object (finfo);
 
3258
        else {
 
3259
          if (node->SemValue ()) {
 
3260
            node->SemValue ()->setTypeRef (type);
 
3261
          }
 
3262
          if (node->SemObject ()) {
 
3263
            node->SemObject ()->Object (finfo);
 
3264
          }
3251
3265
        }
3252
3266
        return type;
3253
3267
      }