mirror of
https://github.com/irmen/prog8.git
synced 2024-10-07 00:55:33 +00:00
fixed callgraph issue that allocated ALL variables in a (library) module even though some clearly weren't used at all. Variables declared in block level scope in a library are still all allocated / defined due to the nature of a library module with lists of definitions
This commit is contained in:
parent
4c03950c28
commit
3b8e18004c
@ -204,8 +204,6 @@ gfx2 {
|
||||
; You must also have called text_charset() first to select and prepare the character set to use.
|
||||
; NOTE: in monochrome (1bpp) screen modes, x position is currently constrained to mulitples of 8 !
|
||||
uword chardataptr
|
||||
ubyte cy222 ; TODO why not removed by compiler???
|
||||
ubyte cb222 ; TODO why not removed by compiler???
|
||||
when active_mode {
|
||||
0, 128 -> {
|
||||
; 1-bitplane modes
|
||||
|
@ -75,7 +75,9 @@ io_error:
|
||||
; -- fill the array 'name_ptrs' with (pointers to) the names of the files requested.
|
||||
ubyte[256] names_buffer
|
||||
ubyte[256] names_buffer1 ; to store a bit more names
|
||||
; TODO names_buffer = memory("filenames", 512)
|
||||
uword buf_ptr = &names_buffer
|
||||
names_buffer1[0] = 0 ; TODO force array to exist
|
||||
ubyte files_found = 0
|
||||
if lf_start_list(drivenumber, pattern, suffixmatch) {
|
||||
while lf_next_entry() {
|
||||
|
@ -117,12 +117,9 @@ class CallGraph(private val program: Program) : IAstVisitor {
|
||||
}
|
||||
|
||||
override fun visit(decl: VarDecl) {
|
||||
if (decl.autogeneratedDontRemove || decl.definingModule().isLibraryModule) {
|
||||
// make sure autogenerated vardecls are in the used symbols and are never removed as 'unused'
|
||||
if (decl.autogeneratedDontRemove || decl.datatype==DataType.STRUCT)
|
||||
addNodeAndParentScopes(decl)
|
||||
}
|
||||
|
||||
if (decl.datatype == DataType.STRUCT)
|
||||
else if(decl.parent is Block && decl.definingModule().isLibraryModule)
|
||||
addNodeAndParentScopes(decl)
|
||||
|
||||
super.visit(decl)
|
||||
|
@ -2,7 +2,6 @@
|
||||
TODO
|
||||
====
|
||||
|
||||
- why are unused vars not removed in gfx2 module
|
||||
- hoist all variable declarations up to the subroutine scope *before* even the constant folding takes place (to avoid undefined symbol errors when referring to a variable from another nested scope in the subroutine)
|
||||
- make it possible to use cpu opcodes such as 'nop' as variable names by prefixing all asm vars with something such as '_'
|
||||
- option to load the built-in library files from a directory instead of the embedded ones (for easier library development/debugging)
|
||||
|
@ -4,6 +4,7 @@
|
||||
%import diskio
|
||||
|
||||
iff_module {
|
||||
; TODO uword cmap = memory("palette", 768)
|
||||
ubyte[256] cmap
|
||||
ubyte[256] cmap1
|
||||
ubyte[256] cmap2
|
||||
|
@ -1,17 +1,19 @@
|
||||
%import test_stack
|
||||
%import textio
|
||||
;%import test_stack
|
||||
;%import textio
|
||||
%import gfx2
|
||||
%zeropage basicsafe
|
||||
%option no_sysinit
|
||||
|
||||
main {
|
||||
|
||||
sub start () {
|
||||
txt.lowercase()
|
||||
txt.print_ub(txt.width())
|
||||
txt.chrout('\n')
|
||||
txt.print_ub(txt.height())
|
||||
txt.chrout('\n')
|
||||
test_stack.test()
|
||||
; txt.lowercase()
|
||||
; txt.print_ub(txt.width())
|
||||
; txt.chrout('\n')
|
||||
; txt.print_ub(txt.height())
|
||||
; txt.chrout('\n')
|
||||
gfx2.text(0,0,2, "sdafsdf")
|
||||
; test_stack.test()
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user