37 lines
1.1 KiB
C#
37 lines
1.1 KiB
C#
using PascalABCCompiler.SyntaxTree;
|
||||
|
||||
namespace Languages.SPython.Frontend.Converters
|
||||
{
|
||||
internal class AddForwardDeclarationsVisitor : BaseChangeVisitor
|
||||
{
|
||||
private declarations decls;
|
||||
|
||||
public override void Enter(syntax_tree_node stn)
|
||||
{
|
||||
if (stn is program_module pm)
|
||||
{
|
||||
decls = pm.program_block.defs;
|
||||
}
|
||||
if (stn is interface_node intn)
|
||||
{
|
||||
decls = intn.interface_definitions;
|
||||
}
|
||||
|
||||
base.Enter(stn);
|
||||
}
|
||||
|
||||
public override void visit(procedure_header _procedure_header)
|
||||
{
|
||||
SourceContext context = _procedure_header.source_context;
|
||||
var pd = new procedure_definition(_procedure_header.TypedClone(), null, context);
|
||||
pd.proc_header.proc_attributes.Add(new procedure_attribute(proc_attribute.attr_forward, context));
|
||||
decls.Add(pd, context);
|
||||
}
|
||||
|
||||
public override void visit(function_header _function_header)
|
||||
{
|
||||
visit(_function_header as procedure_header);
|
||||
}
|
||||
}
|
||||
}
|