mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-27 16:30:14 +00:00
Working on static initialization rewrite _init(). #257
This commit is contained in:
parent
435e358c8d
commit
ea52aa7f2b
@ -89,10 +89,12 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
|
|||||||
// Statement outside procedure declaration - put into the _init procedure
|
// Statement outside procedure declaration - put into the _init procedure
|
||||||
Procedure initProc = program.getScope().getLocalProcedure(SymbolRef.INIT_PROC_NAME);
|
Procedure initProc = program.getScope().getLocalProcedure(SymbolRef.INIT_PROC_NAME);
|
||||||
if(initProc == null) {
|
if(initProc == null) {
|
||||||
|
// Create the _init() procedure
|
||||||
initProc = new Procedure(SymbolRef.INIT_PROC_NAME, SymbolType.VOID, program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL);
|
initProc = new Procedure(SymbolRef.INIT_PROC_NAME, SymbolType.VOID, program.getScope(), Scope.SEGMENT_CODE_DEFAULT, Scope.SEGMENT_DATA_DEFAULT, Procedure.CallingConvention.PHI_CALL);
|
||||||
initProc.setParameters(new ArrayList<>());
|
initProc.setParameters(new ArrayList<>());
|
||||||
program.getScope().add(initProc);
|
program.getScope().add(initProc);
|
||||||
program.createProcedureCompilation(initProc.getRef());
|
program.createProcedureCompilation(initProc.getRef());
|
||||||
|
program.getProcedureCompilation(initProc.getRef()).getStatementSequence().addStatement(new StatementProcedureBegin(initProc.getRef(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS));
|
||||||
}
|
}
|
||||||
procedureCompilation = program.getProcedureCompilation(initProc.getRef());
|
procedureCompilation = program.getProcedureCompilation(initProc.getRef());
|
||||||
}
|
}
|
||||||
@ -118,6 +120,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
|
|||||||
program.getScope().add(startProcedure);
|
program.getScope().add(startProcedure);
|
||||||
final ProcedureCompilation startProcedureCompilation = program.createProcedureCompilation(startProcedure.getRef());
|
final ProcedureCompilation startProcedureCompilation = program.createProcedureCompilation(startProcedure.getRef());
|
||||||
final StatementSequence sequence = startProcedureCompilation.getStatementSequence();
|
final StatementSequence sequence = startProcedureCompilation.getStatementSequence();
|
||||||
|
sequence.addStatement(new StatementProcedureBegin(startProcedure.getRef(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS));
|
||||||
if(initCompilation!=null)
|
if(initCompilation!=null)
|
||||||
sequence.addStatement(new StatementCall(null, SymbolRef.INIT_PROC_NAME, new ArrayList<>(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS));
|
sequence.addStatement(new StatementCall(null, SymbolRef.INIT_PROC_NAME, new ArrayList<>(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS));
|
||||||
sequence.addStatement(new StatementCall(null, SymbolRef.MAIN_PROC_NAME, new ArrayList<>(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS));
|
sequence.addStatement(new StatementCall(null, SymbolRef.MAIN_PROC_NAME, new ArrayList<>(), new StatementSource(RuleContext.EMPTY), Comment.NO_COMMENTS));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user