kickc/src/main/java/dk/camelot64/kickc/passes/PassNAsmLibraryGlobalVarsEx...

44 lines
1.4 KiB
Java

package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.Directive;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.VariableReferenceInfos;
import dk.camelot64.kickc.model.statements.*;
import dk.camelot64.kickc.model.symbols.*;
import dk.camelot64.kickc.model.values.LValue;
import dk.camelot64.kickc.model.values.ScopeRef;
import dk.camelot64.kickc.model.values.StructUnwoundPlaceholder;
import dk.camelot64.kickc.model.values.VariableRef;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.ListIterator;
import java.util.Set;
/**
* Declare all global variables in a library as exported. But only in a library!
*/
public class PassNAsmLibraryGlobalVarsExport extends Pass2SsaOptimization {
public PassNAsmLibraryGlobalVarsExport(Program program) {
super(program);
}
@Override
public boolean step() {
boolean modified = false;
Scope scope = getProgram().getScope().getScope(ScopeRef.ROOT); //
Collection<Variable> scopeConstants = scope.getAllVars(false);
String asmLibraryName = getProgram().getAsmLibraryName();
if(asmLibraryName != null) {
for (Variable constantVar : scopeConstants) {
if(constantVar.isKindLoadStore()) {
constantVar.setAsmExportLibrary(asmLibraryName);
}
}
}
return modified;
}
}