Commit Graph

33624 Commits

Author SHA1 Message Date
Chris Lattner
fdc0abe619 new testcase
llvm-svn: 38759
2006-07-27 06:17:55 +00:00
Chris Lattner
b57aa46e41 Switch ExpandFunctionArguments to use a smallvector instead of a vector,
speeding up my macro expansion torture test from .75s to .5s (33%!)

llvm-svn: 38758
2006-07-27 03:42:15 +00:00
Chris Lattner
7a4af3b73d Change Preprocessor::ReadFunctionLikeMacroArgs to use a SmallVector to lex
argument tokens into instead of a real vector.  This avoids some malloc
traffic in common cases.  In an "abusive macro expansion" testcase, this
reduced -Eonly time by 25%.

llvm-svn: 38757
2006-07-26 06:26:52 +00:00
Chris Lattner
c1410dc1e6 Change MacroArgs to allocate space for the unexpanded tokens immediately after
the MacroArgs object itself.  This is a bit more efficient and will be even more
so shortly.

llvm-svn: 38756
2006-07-26 05:22:49 +00:00
Chris Lattner
6fc08bc77d Add a new getArgLength method and refactor some code to use it
llvm-svn: 38755
2006-07-26 04:55:32 +00:00
Chris Lattner
7021657a0f Implement a FIXME: don't copy token array into a token vector, instead, macroexpander should expand from an array directly.
llvm-svn: 38754
2006-07-26 03:50:40 +00:00
Chris Lattner
36b6e8134e speed up a brutal macro-expansion torture test by about 30% (1.5 -> 1.0s)
by turning vectors of vectors into a single vector, reducing pressure on
malloc.  This can still be improved.

llvm-svn: 38753
2006-07-21 06:38:30 +00:00
Chris Lattner
7fa8c889e2 Add a single-entry cache for macro instantation locations. This significantly
reduces the number of FileID's made and tracked.

llvm-svn: 38752
2006-07-20 06:48:52 +00:00
Chris Lattner
a5f4c882e2 disable malformed string/character errors when in raw mode. This fixes
test/Lexer/badstring_in_if0.c

llvm-svn: 38751
2006-07-20 06:08:47 +00:00
Chris Lattner
032e6170af new testcase
llvm-svn: 38750
2006-07-20 06:06:55 +00:00
Chris Lattner
5a78a02ea2 If an invalid string or character is read, return the invalid part as a tok::unknown token.
llvm-svn: 38749
2006-07-20 06:02:19 +00:00
Chris Lattner
08ba4c015f fix obvious bug that caused Preprocessor/macro_paste_bad.c to fail.
llvm-svn: 38748
2006-07-20 04:52:59 +00:00
Chris Lattner
510ab61fd3 Add optimization for identifier##identifier -> identifier, the most common case of token pasting.
llvm-svn: 38747
2006-07-20 04:47:30 +00:00
Chris Lattner
538d7f3c27 Simplify "raw lexing mode" even further. Now the preprocessor is only called
into when a hard error is found.  This simplifies logic and eliminates the need
for the preprocessor to know about raw mode.

llvm-svn: 38746
2006-07-20 04:31:52 +00:00
Chris Lattner
22549fe6a5 With recent simplifications, this check can be removed from a fastpath.
llvm-svn: 38745
2006-07-20 04:20:02 +00:00
Chris Lattner
0f1f50517b Simplify identifier lookup in raw mode, implementing Preprocessor/macro_fn_lparen_scan2.c.
llvm-svn: 38744
2006-07-20 04:16:23 +00:00
Chris Lattner
9100cff701 new testcase
llvm-svn: 38743
2006-07-19 08:13:21 +00:00
Chris Lattner
ae637cd2a9 new testcase from c99 rationale
llvm-svn: 38742
2006-07-19 08:04:22 +00:00
Chris Lattner
e11dd370ec new testcase
llvm-svn: 38741
2006-07-19 08:01:28 +00:00
Chris Lattner
4505e89d0f Make diagnostic message better
llvm-svn: 38740
2006-07-19 06:41:46 +00:00
Chris Lattner
85c0e4d780 new testcase
llvm-svn: 38739
2006-07-19 06:40:07 +00:00
Chris Lattner
b563379d78 Make this testcase more interesting, actually add a RUN line.
llvm-svn: 38738
2006-07-19 06:34:41 +00:00
Chris Lattner
a7e2e74cef Avoid testing / ## * in the lexer. This will cause an unhelpful error message
to be emitted from the lexer.  This fixes macro_paste_c_block_comment.c

llvm-svn: 38737
2006-07-19 06:32:35 +00:00
Chris Lattner
30a2fa14ae Move LexingRawMode handling of file EOF out of the preprocessor into the
lexer.  This makes more logical sense and also unbreaks the case when the
lexer hasn't been pushed onto the PP include stack.  This is the case when
pasting identifiers.  This patch implements macro_paste_bcpl_comment.c.

llvm-svn: 38736
2006-07-19 06:31:49 +00:00
Chris Lattner
ab30c0360d Make this testcase more interesting, actually add run lines :)
llvm-svn: 38735
2006-07-19 05:48:15 +00:00
Chris Lattner
e8dcfef324 Fix test/Preprocessor/macro_paste_spacing.c
llvm-svn: 38734
2006-07-19 05:45:55 +00:00
Chris Lattner
01ecf835c2 Implement basic token pasting (## operator). This implements
test/Preprocessor/macro_paste_simple.c and macro_paste_bad.c.  There are
several known bugs still.

llvm-svn: 38733
2006-07-19 05:42:48 +00:00
Chris Lattner
a0d9bf4e83 Fix message in assert to be more accurate.
llvm-svn: 38732
2006-07-19 05:42:09 +00:00
Chris Lattner
f918bf71ef update comment
llvm-svn: 38731
2006-07-19 05:01:18 +00:00
Chris Lattner
da63bcdc03 Simplify this by using a higher-level method.
llvm-svn: 38730
2006-07-19 04:36:03 +00:00
Chris Lattner
7e2e669080 Handle really simple expansion of ## formals. Do not handle the empty case
yet though.

llvm-svn: 38729
2006-07-19 03:51:26 +00:00
Chris Lattner
81500bc3ae cleanups, add some code for instrumenting stat
llvm-svn: 38728
2006-07-19 03:40:07 +00:00
Chris Lattner
c5cd2d6556 Add some notes
llvm-svn: 38727
2006-07-19 03:39:58 +00:00
Chris Lattner
2183a6e8f4 Make end-of-file handling much less recursive. This reduces the worst case
stack depth sampled by shark from ~34 to ~17 frames when preprocessing <iostream>.

llvm-svn: 38726
2006-07-18 06:36:12 +00:00
Chris Lattner
d945fc80d7 update
llvm-svn: 38725
2006-07-16 18:44:57 +00:00
Chris Lattner
7667d0d942 Implement support for lexing from a pre-constructed token stream.
Use this support to implement function-like macro argument preexpansion.

This implements test/Preprocessor/macro_fn_preexpand.c

llvm-svn: 38724
2006-07-16 18:16:58 +00:00
Chris Lattner
1e17abb2fd new testcase
llvm-svn: 38723
2006-07-16 18:15:05 +00:00
Chris Lattner
351050bcf5 Add a check that the physloc for a macro instantiation is not another macro.
llvm-svn: 38722
2006-07-16 18:05:08 +00:00
Chris Lattner
e1954ac1a3 Fix comment
llvm-svn: 38721
2006-07-15 23:40:13 +00:00
Chris Lattner
203b4568e2 Implement basic argument substitution. This implements
test/Preprocessor/macro_fn_disable_expand.c

llvm-svn: 38720
2006-07-15 21:07:40 +00:00
Chris Lattner
1b9f17bc6e new testcase
llvm-svn: 38719
2006-07-15 21:06:48 +00:00
Chris Lattner
7c58149107 Clarify assertion
llvm-svn: 38718
2006-07-15 07:56:31 +00:00
Chris Lattner
2ada5d3890 More changes from formals -> actuals.
llvm-svn: 38717
2006-07-15 07:51:24 +00:00
Chris Lattner
ee8760b21b Rename macroformalargs -> MacroArgs, as it represents the actual arguments,
not the formal arguments, to a macro.

llvm-svn: 38716
2006-07-15 07:42:55 +00:00
Chris Lattner
c653246bfb Eliminate the IdentifierInfo::IsMacroArg flag.
llvm-svn: 38715
2006-07-15 06:55:18 +00:00
Chris Lattner
6ae37dfba3 new testcase
llvm-svn: 38714
2006-07-15 06:53:24 +00:00
Chris Lattner
6016169cb8 The leading space flag of a stringized string matches that of the # operator.
llvm-svn: 38713
2006-07-15 06:48:02 +00:00
Chris Lattner
c783d1dff9 Implement the microsoft charize extension #@
llvm-svn: 38712
2006-07-15 06:11:25 +00:00
Chris Lattner
2b271db205 Lex the microsoft 'charize' extension.
llvm-svn: 38711
2006-07-15 05:41:09 +00:00
Chris Lattner
f2781509f9 Add a comment giving an example of the error
llvm-svn: 38710
2006-07-15 05:27:44 +00:00