Changeset 14c0f7b for src/AST/Create.cpp


Ignore:
Timestamp:
Jul 31, 2023, 11:25:51 AM (11 months ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
master
Children:
f496046
Parents:
e0332dd
Message:

Added invariant to check that referenced declarations are in scope. This one took a while, I don't remember why forall pointer decay is involved.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Create.cpp

    re0332dd r14c0f7b  
    4242                return nullptr;
    4343        }
    44         return new ast::FunctionDecl( decl->location,
    45                 decl->name,
    46                 vectorCopy( decl->type_params ),
    47                 vectorCopy( decl->assertions ),
    48                 vectorCopy( decl->params ),
    49                 vectorCopy( decl->returns ),
    50                 nullptr,
    51                 decl->storage,
    52                 decl->linkage,
    53                 vectorCopy( decl->attributes ),
    54                 decl->funcSpec,
    55                 decl->type->isVarArgs
    56         );
     44        // The cast and changing the original should be safe as long as the
     45        // change is reverted before anything else sees it. It's also faster.
     46        FunctionDecl * mutDecl = const_cast<FunctionDecl *>( decl );
     47        CompoundStmt const * stmts = mutDecl->stmts.release();
     48        FunctionDecl * copy = deepCopy( mutDecl );
     49        mutDecl->stmts = stmts;
     50        return copy;
    5751}
    5852
Note: See TracChangeset for help on using the changeset viewer.