mirror of https://gitlab.com/camelot/kickc.git
44 lines
1.4 KiB
Java
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;
|
|
}
|
|
}
|