summaryrefslogtreecommitdiff
path: root/dviware/crudetype/version3/w2cbugs
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/crudetype/version3/w2cbugs
Initial commit
Diffstat (limited to 'dviware/crudetype/version3/w2cbugs')
-rw-r--r--dviware/crudetype/version3/w2cbugs57
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
+