1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-12-27 09:31:18 +00:00

Fixes functions declared in header files not assigned the correct code segment.

So the declarations of the functions receive also the currentCodeSegment, but only when the function is defined, the currentCodeSegment is to be assigned to the function (procedure!). During declaration of functions the code segment is likely Code ...
This commit is contained in:
Flight_Control 2022-11-21 20:11:25 +01:00
parent 152832fd4e
commit 5fefeac7b6
2 changed files with 6 additions and 1 deletions

View File

@ -34,7 +34,7 @@ public class Procedure extends Scope {
/** Reserved zeropage addresses. */
private List<Integer> reservedZps;
/** The code segment to put the procedure into. */
private final String codeSegment;
private String codeSegment;
/** The list of constructor procedures for this procedure. The constructor procedures are called during program initialization. */
private final List<ProcedureRef> constructorRefs;
/** Is this procedure declared as a constructor procedure. */
@ -117,6 +117,10 @@ public class Procedure extends Scope {
return codeSegment;
}
public void setCodeSegment(String codeSegment) {
this.codeSegment = codeSegment;
}
public List<String> getParameterNames() {
return parameterNames;
}

View File

@ -548,6 +548,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
parameterList.add(paramVar);
}
procedure.setParameters(parameterList);
procedure.setCodeSegment(currentCodeSegment); // When a procedure is defined, the currentCodeSegment is to be set.
// Add return variable
if(!SymbolType.VOID.equals(procedure.getReturnType())) {
final VariableBuilder builder = new VariableBuilder("return", procedure, false, false, procedure.getReturnType(), varDecl.getDeclDirectives(), currentDataSegment, program.getTargetPlatform().getVariableBuilderConfig());