~ubuntu-branches/debian/sid/eclipse-cdt/sid

« back to all changes in this revision

Viewing changes to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/PreprocessorMacro.java

  • Committer: Package Import Robot
  • Author(s): Jakub Adam
  • Date: 2013-10-03 20:30:16 UTC
  • mfrom: (1.1.11)
  • Revision ID: package-import@ubuntu.com-20131003203016-d4ug6l0xgosasumq
Tags: 8.2.1-1
* New upstream release.
* Updated autotools documentation sources.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 * http://www.eclipse.org/legal/epl-v10.html
7
7
 *
8
8
 * Contributors:
9
 
 *    Markus Schorn - initial API and implementation
 
9
 *     Markus Schorn - initial API and implementation
10
10
 *******************************************************************************/ 
11
11
package org.eclipse.cdt.internal.core.parser.scanner;
12
12
 
106
106
                buf.append(')');
107
107
                return buf.toString();
108
108
        }
109
 
        public abstract TokenList getTokens(MacroDefinitionParser parser, LexerOptions lexOptions, MacroExpander expander);
 
109
 
 
110
        public abstract TokenList getTokens(MacroDefinitionParser parser, LexerOptions lexOptions,
 
111
                        MacroExpander expander);
110
112
}
111
113
 
112
114
class ObjectStyleMacro extends PreprocessorMacro {
115
117
        final int fEndOffset;
116
118
        private TokenList fExpansionTokens;
117
119
 
118
 
        
119
120
        public ObjectStyleMacro(char[] name, char[] expansion) {
120
121
                this(name, 0, expansion.length, null, new CharArray(expansion));
121
122
        }
122
123
 
123
 
        public ObjectStyleMacro(char[] name, int expansionOffset, int endOffset, TokenList expansion, AbstractCharArray source) {
 
124
        public ObjectStyleMacro(char[] name, int expansionOffset, int endOffset, TokenList expansion,
 
125
                        AbstractCharArray source) {
124
126
                super(name);
125
127
                fExpansionOffset= expansionOffset;
126
128
                fEndOffset= endOffset;
168
170
                        Lexer lex= new Lexer(fExpansion, fExpansionOffset, fEndOffset, lexOptions, ILexerLog.NULL, this);
169
171
                        try {
170
172
                                lex.nextToken(); // consume the start token
171
 
                                mdp.parseExpansion(lex, ILexerLog.NULL, getNameCharArray(), getParameterPlaceholderList(), fExpansionTokens);
 
173
                                mdp.parseExpansion(lex, ILexerLog.NULL, getNameCharArray(),
 
174
                                                getParameterPlaceholderList(), fExpansionTokens);
172
175
                        } catch (OffsetLimitReachedException e) {
173
176
                        }
174
177
                }
200
203
                this(name, paramList, hasVarArgs, expansionOffset, expansionEndOffset, null, expansion);
201
204
        }
202
205
 
203
 
        public FunctionStyleMacro(char[] name, char[][] paramList, int hasVarArgs, int expansionFileOffset, int endFileOffset, 
204
 
                        TokenList expansion, AbstractCharArray source) {
 
206
        public FunctionStyleMacro(char[] name, char[][] paramList, int hasVarArgs, int expansionFileOffset,
 
207
                        int endFileOffset, TokenList expansion, AbstractCharArray source) {
205
208
                super(name, expansionFileOffset, endFileOffset, expansion, source);
206
209
                fParamList = paramList;
207
210
                fHasVarArgs= hasVarArgs;
210
213
        @Override
211
214
        public char[][] getParameterList() {
212
215
                final int length = fParamList.length;
213
 
                if (fHasVarArgs == NO_VAARGS || length==0) {
 
216
                if (fHasVarArgs == NO_VAARGS || length == 0) {
214
217
                        return fParamList;
215
218
                }
216
219
                char[][] result= new char[length][];
217
 
                System.arraycopy(fParamList, 0, result, 0, length-1);
 
220
                System.arraycopy(fParamList, 0, result, 0, length - 1);
218
221
                if (fHasVarArgs == VAARGS) {
219
 
                        result[length-1]= Keywords.cpELLIPSIS;
 
222
                        result[length - 1]= Keywords.cpELLIPSIS;
220
223
                }
221
224
                else {
222
 
                        final char[] param= fParamList[length-1];
 
225
                        final char[] param= fParamList[length - 1];
223
226
                        final int plen= param.length;
224
227
                        final int elen = Keywords.cpELLIPSIS.length;
225
 
                        final char[] rp= new char[plen+elen];
 
228
                        final char[] rp= new char[plen + elen];
226
229
                        System.arraycopy(param, 0, rp, 0, plen);
227
230
                        System.arraycopy(Keywords.cpELLIPSIS, 0, rp, plen, elen);
228
 
                        result[length-1]= rp;
 
231
                        result[length - 1]= rp;
229
232
                }
230
233
                return result;
231
234
        }
244
247
            result.append(getName());
245
248
            result.append('(');
246
249
            
247
 
            final int lastIdx= fParamList.length-1;
 
250
            final int lastIdx= fParamList.length - 1;
248
251
            if (lastIdx >= 0) {
249
252
                for (int i = 0; i < lastIdx; i++) {
250
253
                        result.append(fParamList[i]);
251
254
                        result.append(',');
252
255
                }
253
 
                switch(fHasVarArgs) {
 
256
                switch (fHasVarArgs) {
254
257
                case VAARGS:
255
258
                        result.append(Keywords.cpELLIPSIS);
256
259
                        break;
316
319
        public DynamicMacro(char[] name) {
317
320
                super(name);
318
321
        }
 
322
 
319
323
        @Override
320
324
        public final char[] getExpansion() {
321
325
                return getExpansionImage();
322
326
        }
 
327
 
323
328
        public abstract Token execute(MacroExpander expander);
324
329
 
325
330
        @Override
439
444
final class CounterMacro extends DynamicMacro {
440
445
        private static final char[] ZERO = {'0'};
441
446
        
442
 
        private long fValue= 0;
 
447
        private long fValue;
 
448
 
443
449
        CounterMacro(char[] name) {
444
450
                super(name);
445
451
        }