Rune - Ras work, stabilization
[rune.git] / TODO
1
2
3
4 * insnx86.c line 149 ish.. remove rea->regused ???
5
6 * gen_refstor.c ~720, make DOP_ARGS_STORAGE cacheable.  But to
7   work properly RAS needs to do a dummy load of each argument
8   from EA[non-cache] to EA.CACHE to ensure that the register
9   is properly initialized.  And for pointers, to sync back
10   on return (?)
11
12 * Cacheability of compound types in RAS ?
13
14 * see classes strlen() code. CMP/BRA opt causes RSPUT to be improperly
15   handled (fix by optimizing out the PRSGET/RSPUT sequence for the
16   comparison?  what if both args need it?)
17
18 * optimize const global access to immediate value XXX doesn't currently 
19   happen (strlen()'s test against NIL).
20
21 * optimized stack storage in llvm is not cleared
22
23 * return/result sequencing must be validated by the resolver.  break/continue
24   may not cross a result; point and result; cannot be conditionalized in one
25   path unless it is also present in the other.
26
27 * Add 'finalize' to class/subclass decl indicating that no further subclassing
28   is allowed.
29
30 * libgen initializers for global declarations w/ assignments or type defaults.
31
32 * resolver propagate CTF_RESOLVING flag in run-time context.
33
34 * resolver and runtime and generator - validate when casting pointers
35   that an integral number of objects of the target fits in the source.
36   Otherwise the cast is illegal.
37
38 * tests/refine.d - method call through non-replicated (i.e. not part of
39                    subclass) @ref currently executes the superclass method
40                    instead of looking up the actual method via the type.
41
42 * generally speaking must change how interfaces and classes work when making
43   field accesses.  Disallow in interfaces, allow otherwise but then restrict
44   how refine operates so field offsets remain consistent across all
45   sub-classes.  Disallow alias access via @ref?
46
47 * resolver - Disallow binding of incompatible subclasses to a superclass.
48              Do this by flagging the incompatibility.
49
50 * resolver - Enforce that non-interface classes cannot contain interfaces.
51
52 * resolver - Enforce that it is not allowed to take the sizeof() an interface
53              object.
54
55 * resolver - Enforce that one cannot instantiate/declare an interface type.
56
57 * resolver - Enforce that object accessors can only be to non-generic elements.
58
59 * resolver - Reorder generic elements in an interface to the end for offset
60              assignment purposes.
61
62 * resolver - Do not allow pointer arithmatic on references.
63
64 * libgen - chained temporary data returned along one side of an expressin
65   can get corrupted by the other side.  On the top-level temporary data is
66   'safe'.
67
68 * libgen - RunRelsRefStor in operators a mess.
69
70 * libgen - exp.c RunCastExpPtrToRef() is basically messing with the
71   type of the passed-in lvalue, which is really a bad idea.
72
73 * read, write, sizeof, arysize, and bcopy currently taking Int32 !!!'s. FIX!
74   Add size_t, ssize_t.
75
76 * When realizing persistent store we have to clean out any previously
77   existing pointers.
78
79 * map files containing structures with pointers can get corrupted.  Maybe
80   we should just disallow pointers entirely for any persistent store.
81
82 * Persistent store mmap() file path is currently hacked up.  Needs command
83   line arg to set the home directory for the program, and the default
84   should be "$HOME/.<program>/rune_%s.map".  libgen/heap.c
85
86 * infinintely recursive aliases are not currently detected.
87
88   alias a = b;
89   alias b = a + 1;
90
91 * get rid of need for 'auto' prefix in casts to distinguish between
92   variable names and types.
93
94 * share pens and also share font information
95
96 * Handle simple exposure aggregation and use clip to limit update area
97   (see tests/gfxslider.d)
98
99 * Wide char for SSTRING ?  i.e. 'x'
100
101 isg for resolveType's assigned expression
102
103 DONE<<constructors/destructors for global elements and statement blocks>> ?
104
105 reference type resolver and libi/exp.c TOK_STRIND and TOK_CALL.  METHOD CALLS
106 via ref types (don't screw around with the exp, dup it instead?)
107
108 refine: check validity of procedural refinements (different return types,
109 argument types, etc...)
110
111 is d_Search now obsolete?
112
113 Add support for 'super'.  Either 'structural->super' or 'super.<blah>'
114 (for method calls), to access a superclass element that has been overloaded
115 in the subclass.
116
117 We need to be able to copy a statement tree (procedure body) on the fly
118 in the resolver, when a subclass is passed to a procedure expecting its
119 superclass.  We have to keep track of compound types (proc args) in order
120 to cache the various versions of the procedure.  We already have d_Super
121 to locate the procedure in a TOK_CALL if the procedure body is NULL.
122 The modified procedure must be able to pass a different sg_Level.. i.e.
123 the one for the superclass, even though all of its types will be the actual
124 class (the subclass), in order to locate the proper declaration (a declaration
125 may be invisible to the subclass but visible to the superclass).
126
127 --
128
129
130 int ary[exp] ... the exp is shared across qualifications of the type,
131 which is bad.  Also, what about compound types sharing the same semgroup?
132 that should be ok.
133
134 double check 'isglobal' TF/SGF_NOINIT cache
135
136 cast procedures generally work but we really need to formalize
137 how ex_Type is set verses what the exp node really wants (e.g. for
138 procedures... look at ex_Type or look at the procdecl's return type?).
139
140 really fix cast... in libi/exp.c 
141
142 Check global scope when indirecting through a type or class rather 
143 then storage.  only allow global scope for storage in that case.
144
145 non-global procedure called through object -- automatic "this" reference.
146 procedures embedded in class accessing class elements?????  global vs
147 non-global
148
149 Implement STF_FORWARD checking (do not allow forward reference stack 
150 declarations to other decls at the same semantic level.)
151
152 Make procedural refinement work
153
154 Implement scope
155
156 Implement heap variables (implement as initialized pointers / use '@' ?)
157
158 Partial procedure args resolution
159
160 procedure pointers (point to the declaration)
161