diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/crudetype/version3/w2cbugs |
Initial commit
Diffstat (limited to 'dviware/crudetype/version3/w2cbugs')
-rw-r--r-- | dviware/crudetype/version3/w2cbugs | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/dviware/crudetype/version3/w2cbugs b/dviware/crudetype/version3/w2cbugs new file mode 100644 index 0000000000..d9e1b12de9 --- /dev/null +++ b/dviware/crudetype/version3/w2cbugs @@ -0,0 +1,57 @@ +LIST of bugs in current version of my web2c. (Nov. 1990) + +POINTERS Crashes on self-referencing structures, e.g. + +type horse = ^cow ; + cow=record + log : horse; + (etc) + + +In C this must all be rewritten approx. as follows: + +struct xyz { + xyz *log ; + (etc) + + +followed by + +typedef struct xyz cow ; +typedef cow *horse ; + + + +WITH statements. Fails because if you have an array of records, +W2C knows the component type of the array is a record, but not +what type of record it is. + +Variant records. A simple translation fails because you have to +name all the intermediate places on the way down from top level. +For example: + + codeobject = packed record + breadth: iword ; + case boolean of + true: (IMfont: byte ; IMchar: byte ); + {Printers font and character} + false: (multi: iword) ; + end; + +must be translated approx: + +typedef struct { + iword breadth ; + union{ + struct{ + byte IMfont ; + byte IMchar ; + } XXA ; + iword multi ; + } XXB ; +} codeobject ; + + +Then if C is a codeobject, C.IMfont must be translated as +C.XXB.XXA.IMfont + |