Deleted Added
sdiff udiff text old ( 198092 ) new ( 200583 )
full compact
1//===--- TokenLexer.cpp - Lex from a token stream -------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 6 unchanged lines hidden (view full) ---

15#include "clang/Lex/MacroInfo.h"
16#include "clang/Lex/Preprocessor.h"
17#include "clang/Lex/LexDiagnostic.h"
18using namespace clang;
19
20/// MacroArgs ctor function - This destroys the vector passed in.
21MacroArgs *MacroArgs::create(const MacroInfo *MI,
22 const Token *UnexpArgTokens,
23 unsigned NumToks, bool VarargsElided) {
24 assert(MI->isFunctionLike() &&
25 "Can't have args for an object-like macro!");
26
27 // Allocate memory for the MacroArgs object with the lexer tokens at the end.
28 MacroArgs *Result = (MacroArgs*)malloc(sizeof(MacroArgs) +
29 NumToks*sizeof(Token));
30 // Construct the macroargs object.
31 new (Result) MacroArgs(NumToks, VarargsElided);
32
33 // Copy the actual unexpanded tokens to immediately after the result ptr.
34 if (NumToks)
35 memcpy(const_cast<Token*>(Result->getUnexpArgument(0)),
36 UnexpArgTokens, NumToks*sizeof(Token));
37
38 return Result;
39}
40
41/// destroy - Destroy and deallocate the memory for this object.
42///
43void MacroArgs::destroy() {
44 // Run the dtor to deallocate the vectors.
45 this->~MacroArgs();
46 // Release the memory for the object.
47 free(this);
48}
49
50
51/// getArgLength - Given a pointer to an expanded or unexpanded argument,
52/// return the number of tokens, not counting the EOF, that make up the
53/// argument.
54unsigned MacroArgs::getArgLength(const Token *ArgPtr) {
55 unsigned NumArgTokens = 0;
56 for (; ArgPtr->isNot(tok::eof); ++ArgPtr)
57 ++NumArgTokens;
58 return NumArgTokens;

--- 182 unchanged lines hidden ---