55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
|
||
using PascalABCCompiler.SyntaxTree;
|
||
|
||
|
||
namespace SyntaxVisitors
|
||
{
|
||
public class TeacherControlConverter : WalkingVisitorNew
|
||
{
|
||
public static TeacherControlConverter New
|
||
{
|
||
get { return new TeacherControlConverter(); }
|
||
}
|
||
|
||
public string Name { get => "TeacherContolConverter"; }
|
||
public syntax_tree_node Convert(syntax_tree_node root)
|
||
{
|
||
try
|
||
{
|
||
var program = root as program_module;
|
||
if (program == null) // если это не главная программа, то не преобразовывать
|
||
return root;
|
||
var FileName = program.file_name;
|
||
var fi = new System.IO.FileInfo(FileName);
|
||
var SourceFileDirectory = fi.DirectoryName;
|
||
|
||
var FullLightPTName = System.IO.Path.Combine(SourceFileDirectory, "lightpt.dat");
|
||
if (!System.IO.File.Exists(FullLightPTName))
|
||
return root;
|
||
|
||
if (program.used_units == null)
|
||
program.used_units = new uses_list();
|
||
// Добавляем в начало, а секции инициализации вызываются последними
|
||
// Проверять, какой CurrentIOSystem подключен, и если не стандартный, то не подключать Light
|
||
|
||
// Пробуем добавить последними, тогда секции инициализации LightPT вызываются первыми,
|
||
// что переключает ввод на LightPT,
|
||
// а секции финализации - последними (хорошо)
|
||
// Проблема - LightPT Print перекрывает PT4.Print и - ошибка, а флаг IsPT не установлен
|
||
|
||
program.used_units.Add(new unit_or_namespace("LightPT", null));
|
||
program.used_units.Add(new unit_or_namespace("Tasks", null));
|
||
}
|
||
catch
|
||
{
|
||
}
|
||
return root;
|
||
}
|
||
}
|
||
|
||
}
|