Commit | Line | Data |
---|---|---|
cf27e488 TL |
1 | To convert two pass to 1 pass operation: |
2 | (I suggest that you use a subdirectory, since | |
3 | it is hard to repair some of this damage once done) | |
4 | ||
5 | I assume that you have new copies of the machine-independent | |
6 | files. The file cl is no longer used, and there is no | |
7 | use of lex at all. The file scan.c contains the new | |
8 | lexical analyzer. Moreover, the file comm2.c is no longer | |
9 | used when the passes are loaded together. | |
10 | These changes may affect local procedures for searching, printing, | |
11 | diffing, etc. the compiler. | |
12 | ||
13 | I suggest that you take the makefile in /usr/n as well, to help you | |
14 | along. | |
15 | ||
16 | The conversion process, as well as I understand it is as follows. | |
17 | ||
18 | 1. Make a subdirectory, and put in it the old machine dependent files | |
19 | macdefs, mac2defs, local.c, order.c, code.c, local2.c, and table.c. | |
20 | Put in all the new machine independent stuff, including the new makefile | |
21 | ||
22 | 2. Insert the line # define ONEPASS into macdefs | |
23 | Change LABFMT by deleting the \n. | |
24 | ||
25 | 3. In all the machine dependent source files local.c, | |
26 | code.c, order.c, local2.c, and table.c, remove the includes of | |
27 | manifest and macdefs; these are now included by mfile1 and mfile2. | |
28 | ||
29 | 4. The main routine for pass 2 (probably on local2.c) | |
30 | should be deleted; it probably only does a call to mainp2. | |
31 | If it does anything else of interest, | |
32 | let me know. | |
33 | ||
34 | 5. On the file local.c, in the routine `ecode', | |
35 | replace the lines | |
36 | printf( ".%d\t%s\n", lineno, ftitle ); | |
37 | prtree( p ); | |
38 | by | |
39 | p2tree( p ); | |
40 | p2compile( p ); | |
41 | ||
42 | 6. In code.c, in the function bccode, replace the line | |
43 | printf( "[\t%d\t%d\t%d\t\n", ftnno, XXXX, YYYY ); | |
44 | by | |
45 | p2bbeg( XXXX, YYYY ); | |
46 | Also, in efcode, replace the line which prints out the "]..." | |
47 | with | |
48 | p2bend(); | |
49 | ||
50 | 7. In code.c and local.c, look at all remaining printfs. Lines | |
51 | which go onto the intermediate file all had ")" at the head. | |
52 | All of these must be clobbered. Thus, a line which read | |
53 | printf( ") xxx yyy\n) zzz www\n" ); | |
54 | must be changed to read | |
55 | printf( " xxx yyy\n zzz www\n" ); | |
56 | This is tedious, although a few cleverly chosen ed commands | |
57 | will probably do the trick. | |
58 | ||
59 | 8. Say make, and stand back. The result is a | |
60 | single program called comp. | |
61 | You may experience loading errors as a result of having used the | |
62 | same external names in the first and second pass. Look at the | |
63 | beginning of mfile2 to get a hint about one way to deal with | |
64 | this problem (add stuff to mac2defs to change the names). | |
65 | The other way to deal with it is just fix it... | |
66 | ||
67 | 9. As a side-effect of other changes, the meaning of the arguments | |
68 | to match has changed slightly; ASG OPANY, as it always | |
69 | did, matches any assignment op except ++, --, and = itself. | |
70 | OPANY, on the other hand, matches only ops which are not assignment | |
71 | ops. In table.c, there must be explicit rewriting rule entries for | |
72 | ++, --, and =. In most cases with which I am familiar, this should | |
73 | be true already, and no change is needed. | |
74 | ||
75 | 10. Usage is /lib/cpp x.c | comp | |
76 | which produces assembler output on the std. output. | |
77 | research!/usr/bin/ncc gives the interdata compiler, with many | |
78 | bells and whistles, as a Bourne shell script. | |
79 | regression tests, and checks that this compiler | |
80 | produces the same output as the earlier one, are | |
81 | both wise. | |
82 | ||
83 | Good Luck! |