diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs
index bc18dc8b9..aff13ffd8 100644
--- a/Configuration/GlobalAssemblyInfo.cs
+++ b/Configuration/GlobalAssemblyInfo.cs
@@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "1";
public const string Build = "0";
- public const string Revision = "1266";
+ public const string Revision = "1269";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;
diff --git a/Configuration/Version.defs b/Configuration/Version.defs
index 69000ff71..7008504df 100644
--- a/Configuration/Version.defs
+++ b/Configuration/Version.defs
@@ -1,4 +1,4 @@
-%MINOR%=1
-%REVISION%=1266
%COREVERSION%=0
+%REVISION%=1269
+%MINOR%=1
%MAJOR%=3
diff --git a/Localization/DefaultLang.resources b/Localization/DefaultLang.resources
index 350e2b5da..208219497 100644
Binary files a/Localization/DefaultLang.resources and b/Localization/DefaultLang.resources differ
diff --git a/PascalABCNET.axml b/PascalABCNET.axml
index fa9a5843d..7900a9550 100644
--- a/PascalABCNET.axml
+++ b/PascalABCNET.axml
@@ -958,8 +958,8 @@
\yield\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs
public ConstructFiniteAutomata1(block bl)
- public ConstructFiniteAutomata1 ( block bl )
- class ConstructFiniteAutomata1
+ public ConstructFiniteAutomata ( block bl )
+ class ConstructFiniteAutomata
namespace SyntaxVisitors
diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh
index 6f73c4f46..fff479009 100644
--- a/ReleaseGenerators/PascalABCNET_version.nsh
+++ b/ReleaseGenerators/PascalABCNET_version.nsh
@@ -1 +1 @@
-!define VERSION '3.1.0.1266'
+!define VERSION '3.1.0.1269'
diff --git a/SyntaxTree/tree/AbstractVisitor.cs b/SyntaxTree/tree/AbstractVisitor.cs
index bc50bf3bb..74f225239 100644
--- a/SyntaxTree/tree/AbstractVisitor.cs
+++ b/SyntaxTree/tree/AbstractVisitor.cs
@@ -1092,11 +1092,6 @@ namespace PascalABCCompiler.SyntaxTree
{
DefaultVisit(_yield_unknown_foreach_type);
}
-
- public virtual void visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- DefaultVisit(_yield_unknown_foreach_type_ident);
- }
}
diff --git a/SyntaxTree/tree/HierarchyVisitor.cs b/SyntaxTree/tree/HierarchyVisitor.cs
index 114c95f19..ad0d7a400 100644
--- a/SyntaxTree/tree/HierarchyVisitor.cs
+++ b/SyntaxTree/tree/HierarchyVisitor.cs
@@ -1741,14 +1741,6 @@ namespace PascalABCCompiler.SyntaxTree
{
}
- public virtual void pre_do_visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- }
-
- public virtual void post_do_visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- }
-
public override void visit(syntax_tree_node _syntax_tree_node)
{
DefaultVisit(_syntax_tree_node);
@@ -3608,13 +3600,6 @@ namespace PascalABCCompiler.SyntaxTree
pre_do_visit(_yield_unknown_foreach_type);
post_do_visit(_yield_unknown_foreach_type);
}
-
- public override void visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- DefaultVisit(_yield_unknown_foreach_type_ident);
- pre_do_visit(_yield_unknown_foreach_type_ident);
- post_do_visit(_yield_unknown_foreach_type_ident);
- }
}
diff --git a/SyntaxTree/tree/SyntaxTreeStreamReader.cs b/SyntaxTree/tree/SyntaxTreeStreamReader.cs
index b6aab7323..c99f2b2af 100644
--- a/SyntaxTree/tree/SyntaxTreeStreamReader.cs
+++ b/SyntaxTree/tree/SyntaxTreeStreamReader.cs
@@ -454,8 +454,6 @@ namespace PascalABCCompiler.SyntaxTree
return new yield_variable_definitions_with_unknown_type();
case 216:
return new yield_unknown_foreach_type();
- case 217:
- return new yield_unknown_foreach_type_ident();
}
return null;
}
@@ -3834,17 +3832,6 @@ namespace PascalABCCompiler.SyntaxTree
read_type_definition(_yield_unknown_foreach_type);
}
-
- public void visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- read_yield_unknown_foreach_type_ident(_yield_unknown_foreach_type_ident);
- }
-
- public void read_yield_unknown_foreach_type_ident(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- read_ident(_yield_unknown_foreach_type_ident);
- }
-
}
diff --git a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs
index 6da79e841..ecb55e5ba 100644
--- a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs
+++ b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs
@@ -6000,18 +6000,6 @@ namespace PascalABCCompiler.SyntaxTree
write_type_definition(_yield_unknown_foreach_type);
}
-
- public void visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- bw.Write((Int16)217);
- write_yield_unknown_foreach_type_ident(_yield_unknown_foreach_type_ident);
- }
-
- public void write_yield_unknown_foreach_type_ident(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident)
- {
- write_ident(_yield_unknown_foreach_type_ident);
- }
-
}
diff --git a/SyntaxTree/tree/Tree.cs b/SyntaxTree/tree/Tree.cs
index ec283d662..dfe738421 100644
--- a/SyntaxTree/tree/Tree.cs
+++ b/SyntaxTree/tree/Tree.cs
@@ -32020,89 +32020,6 @@ namespace PascalABCCompiler.SyntaxTree
}
- ///
- ///Узел для приведения типа enumerator.Current к типу переменной цикла foreach
- ///
- [Serializable]
- public partial class yield_unknown_foreach_type_ident : ident
- {
-
- ///
- ///Конструктор без параметров.
- ///
- public yield_unknown_foreach_type_ident()
- {
-
- }
-
-
- ///
- ///Конструктор с параметрами.
- ///
- public yield_unknown_foreach_type_ident(string _name)
- {
- this._name=_name;
- }
-
- ///
- ///Конструктор с параметрами.
- ///
- public yield_unknown_foreach_type_ident(string _name,SourceContext sc)
- {
- this._name=_name;
- source_context = sc;
- }
-
- ///
- ///Свойство для получения количества всех подузлов без элементов поля типа List
- ///
- public override Int32 subnodes_without_list_elements_count
- {
- get
- {
- return 0;
- }
- }
- ///
- ///Свойство для получения количества всех подузлов. Подузлом также считается каждый элемент поля типа List
- ///
- public override Int32 subnodes_count
- {
- get
- {
- return 0;
- }
- }
- ///
- ///Индексатор для получения всех подузлов
- ///
- public override syntax_tree_node this[Int32 ind]
- {
- get
- {
- if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
- throw new IndexOutOfRangeException();
- return null;
- }
- set
- {
- if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1)
- throw new IndexOutOfRangeException();
- }
- }
- ///
- ///Метод для обхода дерева посетителем
- ///
- ///Объект-посетитель.
- ///Return value is void
- public override void visit(IVisitor visitor)
- {
- visitor.visit(this);
- }
-
- }
-
-
}
diff --git a/SyntaxTree/tree/TreeHelper.cs b/SyntaxTree/tree/TreeHelper.cs
index 4ebff6240..b7e7a8bde 100644
--- a/SyntaxTree/tree/TreeHelper.cs
+++ b/SyntaxTree/tree/TreeHelper.cs
@@ -1404,19 +1404,6 @@ namespace PascalABCCompiler.SyntaxTree
}
- // frninja 12/05/16 - хелпер для yield. Хранит типы локальных переменных метода-итератора
- [Serializable]
- public class yield_locals_type_map_helper
- {
- public Dictionary vars_type_map { get; private set; }
-
- public yield_locals_type_map_helper()
- {
- vars_type_map = new Dictionary();
- }
- }
- // end frninja
-
// frninja 12/05/16 - хелперы для yield
public partial class yield_unknown_expression_type : type_definition
{
@@ -1428,56 +1415,24 @@ namespace PascalABCCompiler.SyntaxTree
set { _Vds = value; }
}
- public yield_locals_type_map_helper MapHelper { get; private set; }
-
- public yield_unknown_expression_type(var_def_statement vds, yield_locals_type_map_helper map_helper)
+ public yield_unknown_expression_type(var_def_statement vds)
{
this.Vds = vds;
- this.MapHelper = map_helper;
}
}
public partial class yield_var_def_statement_with_unknown_type : statement
{
- public yield_locals_type_map_helper map_helper { get; private set; }
-
- public yield_var_def_statement_with_unknown_type(var_def_statement vds, yield_locals_type_map_helper map_helper)
- {
- this.vars = vds;
- this.map_helper = map_helper;
- }
-
public override string ToString()
{
var sb = new System.Text.StringBuilder();
sb.Append(vars.ToString());
- /*if (vars_type != null)
- {
- sb.Append(": ");
- sb.Append(vars_type.ToString());
- }
- if (inital_value != null)
- {
- sb.Append(" := ");
- sb.Append(inital_value.ToString());
- }*/
return sb.ToString();
}
}
- public partial class yield_variable_definitions_with_unknown_type : declaration
- {
- public yield_locals_type_map_helper map_helper { get; private set; }
-
- public yield_variable_definitions_with_unknown_type(variable_definitions vd, yield_locals_type_map_helper map_helper)
- {
- this.vars = vd;
- this.map_helper = map_helper;
- }
- }
-
public partial class yield_unknown_ident : ident
{
protected ident _UnknownID;
diff --git a/SyntaxTree/tree/Visitor.cs b/SyntaxTree/tree/Visitor.cs
index 241d479bf..8b68ec973 100644
--- a/SyntaxTree/tree/Visitor.cs
+++ b/SyntaxTree/tree/Visitor.cs
@@ -1306,12 +1306,6 @@ namespace PascalABCCompiler.SyntaxTree
///Node to visit
/// Return value is void
void visit(yield_unknown_foreach_type _yield_unknown_foreach_type);
- ///
- ///Method to visit yield_unknown_foreach_type_ident.
- ///
- ///Node to visit
- /// Return value is void
- void visit(yield_unknown_foreach_type_ident _yield_unknown_foreach_type_ident);
}
diff --git a/SyntaxTree/tree/tree.nin b/SyntaxTree/tree/tree.nin
index 144717dc5..0061a5f0f 100644
Binary files a/SyntaxTree/tree/tree.nin and b/SyntaxTree/tree/tree.nin differ
diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas
index a727bc7f0..a2f55d87a 100644
--- a/TestSuite/CompilationSamples/PABCSystem.pas
+++ b/TestSuite/CompilationSamples/PABCSystem.pas
@@ -1698,6 +1698,8 @@ var
ExitCode := 0; // TODO Сделать возврат в Main
///--
DefaultEncoding: Encoding;
+ ///--
+ PrintDelimDefault: string := ' ';
///--
var
@@ -7939,7 +7941,7 @@ end;
/// Выводит последовательность на экран, используя пробел в качестве разделителя
function Print(Self: sequence of T): sequence of T; extensionmethod;
begin
- Result := Self.Print(' ');
+ Result := Self.Print(PrintDelimDefault);
end;
/// Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку
@@ -7953,7 +7955,7 @@ end;
/// Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку
function Println(Self: sequence of T): sequence of T; extensionmethod;
begin
- Result := Self.Println(' ');
+ Result := Self.Println(PrintDelimDefault);
end;
/// Выводит последовательность строк в файл
diff --git a/TestSuite/CompilationSamples/PT4.pas b/TestSuite/CompilationSamples/PT4.pas
index 0e18976a9..a3f4148bf 100644
--- a/TestSuite/CompilationSamples/PT4.pas
+++ b/TestSuite/CompilationSamples/PT4.pas
@@ -1,4 +1,4 @@
-/// Модуль электронного задачника Programming Taskbook 4
+/// Модуль электронного задачника Programming Taskbook 4
unit PT4;
//------------------------------------------------------------------------------
@@ -1255,6 +1255,7 @@ var __initialized := false;
procedure __InitModule;
begin
CurrentIOSystem := new IOPT4System;
+ PrintDelimDefault := '';
loadNodes := new ArrayList;
ExecuteBeforeProcessTerminateIn__Mode += PT4_ExecuteBeforeProcessTerminateIn__Mode;
StartPT(512);
diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs
index 5dd157c66..eb4a6afe4 100644
--- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs
+++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs
@@ -4669,15 +4669,6 @@ namespace PascalABCCompiler.TreeConverter
}
// end frninja
- // frninja 29/05/16 - для приведения типов в lowered foreach
- if (_method_call.dereferencing_value is yield_unknown_foreach_type_ident)
- {
- var nodeToVisit = new method_call(GetForeachVariableTypeName((_method_call.dereferencing_value as yield_unknown_foreach_type_ident).unknown_foreach), _method_call.parameters);
- visit(nodeToVisit);
- return;
- }
- // end frninja
-
//lroman
if (_method_call.dereferencing_value is closure_substituting_node)
{
@@ -15770,8 +15761,6 @@ namespace PascalABCCompiler.TreeConverter
else AddError(to.location, "Не могу вывести тип при наличии yield: "+ to.type.full_name);
//to.type = from.type; // и без всякого real_type!
}
- //else if (to.type is compiled_type_node)
- //else if (to.type.name.StartsWith("IEnumerable")) // Сделать не сравнением строк!!!
else if (to.type is compiled_generic_instance_type_node && (to.type as compiled_generic_instance_type_node).instance_params[0] is ienumerable_auto_type)
{
var tt = to.type;
@@ -19127,7 +19116,6 @@ namespace PascalABCCompiler.TreeConverter
{
// Отвечает за типизацию всех переменных с автовыведением типа
// Пробую сделать по-другому: перевести в auto_type и потом на присваивании перехватить
- // _unk_expr.MapHelper.vars_type_map[_unk_expr.Vds].visit(this);
var t = new semantic_type_node(new auto_type(get_location(_unk_expr)));
t.visit(this);
}
@@ -19135,90 +19123,22 @@ namespace PascalABCCompiler.TreeConverter
// frninja - заполнение хелпера типов локальных переменных для yield
public override void visit(SyntaxTree.yield_var_def_statement_with_unknown_type _vars)
{
- /*if ((object)_vars.vars.vars_type != null)
- {
- // Visit stored vars
- _vars.vars.visit(this);
- return;
- }
- var t = convert_strong(_vars.vars.inital_value);
- _vars.map_helper.vars_type_map[_vars.vars] = new SyntaxTree.semantic_type_node(t.type);
-
- */
- // Visit stored vars
_vars.vars.visit(this);
}
- // frninja - заполнение хелпера типов локальных переменных для yield// frninja - заполнение хелпера типов локальных переменных для yield
+ // frninja - заполнение хелпера типов локальных переменных для yield
public override void visit(SyntaxTree.yield_variable_definitions_with_unknown_type _vars)
{
- /*foreach (var vd in _vars.vars.list)
- {
- if ((object)vd.vars_type != null)
- {
- continue;
- }
- var t = convert_strong(vd.inital_value);
- _vars.map_helper.vars_type_map[vd] = new SyntaxTree.semantic_type_node(t.type);
- }*/
-
- // Visit stored vars
_vars.vars.visit(this);
}
- private Dictionary _yieldForeachTypeMap = new Dictionary();
-
// frninja 29/05/16 - выявляем тип перемнной в foreach
public override void visit(SyntaxTree.yield_unknown_foreach_type _unk)
{
-
- /*var _foreach_stmt = _unk.unknown_foreach;
-
- semantic_type_node t;
-
- if (_yieldForeachTypeMap.ContainsKey(_foreach_stmt.Guid))
- {
- t = _yieldForeachTypeMap[_foreach_stmt.Guid];
- }
- else
- {
- expression_node in_what = convert_strong(_foreach_stmt.in_what);
- type_node elem_type = null;
- if (!FindIEnumerableElementType(_foreach_stmt, in_what.type, ref elem_type))
- {
- AddError(in_what.location, "CAN_NOT_EXECUTE_FOREACH_BY_EXPR_OF_TYPE_{0}", in_what.type.name);
- }
- t = new SyntaxTree.semantic_type_node(elem_type);
- // Add to map
- _yieldForeachTypeMap.Add(_foreach_stmt.Guid, t);
- }*/
- // Visit type
-
var t = new semantic_type_node(new ienumerable_auto_type(get_location(_unk)));
t.visit(this);
}
- private ident GetForeachVariableTypeName(foreach_stmt _foreach_stmt)
- {
- type_node tn = null;
-
- if (_yieldForeachTypeMap.ContainsKey(_foreach_stmt.Guid))
- {
- tn = _yieldForeachTypeMap[_foreach_stmt.Guid].type as type_node;
- }
- return new SyntaxTree.ident(tn.name);
- }
-
- // frninja 29/05/16 - получаем имя типа переменной в foreach
- public override void visit(SyntaxTree.yield_unknown_foreach_type_ident _unk)
- {
- var t = this.GetForeachVariableTypeName(_unk.unknown_foreach);
- // Visit type
- t.visit(this);
- }
-
- // end frninja
-
/*public SyntaxTree.question_colon_expression ConvertToQCE(dot_question_node dqn)
{
// Неверно работает. Пока не используется. Доделать
diff --git a/TreeConverter/TreeRealization/generics.cs b/TreeConverter/TreeRealization/generics.cs
index 3bb4a1835..ae5b2a483 100644
--- a/TreeConverter/TreeRealization/generics.cs
+++ b/TreeConverter/TreeRealization/generics.cs
@@ -345,7 +345,7 @@ namespace PascalABCCompiler.TreeRealization
if (shouldAddToAllTypeInstances) //lroman// Если зашли сюда при выведении типов параметров лямбды, то тип инстанцироваться может с типом lambda_any_type_node. Поэтому, если выводим типы. То данную инстанцию не добавляем
{
- if (instance.instance_params[0] is ienumerable_auto_type)
+ if (instance.instance_params[0] is ienumerable_auto_type) // SSM 10.07.16 (yields) в эту таблицу не включаются типы IEnumerable, т.к. потом они всё равно автовыводятся
{
//instance = instance;
}
diff --git a/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs b/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs
index ca077c176..e452cf4c0 100644
--- a/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs
+++ b/Yield/SyntaxVisitors/YieldVisitors/LocalVariablesTypeDetectorHelperVisior.cs
@@ -16,11 +16,8 @@ namespace SyntaxVisitors
public List LocalDeletedVS = new List(); // var_statement's, потом объединим с LocalDeletedVD для верного порядка
- public yield_locals_type_map_helper VarTypeMap { get; private set; }
-
- public LocalVariablesTypeDetectorHelperVisior(yield_locals_type_map_helper varTypeMap)
+ public LocalVariablesTypeDetectorHelperVisior()
{
- this.VarTypeMap = varTypeMap;
}
public override void visit(yield_variable_definitions_with_unknown_type yvds)
@@ -33,7 +30,7 @@ namespace SyntaxVisitors
LocalDeletedVS.Insert(0, vs.var_def);
- ReplaceStatement(vs, new yield_var_def_statement_with_unknown_type(vs.var_def, this.VarTypeMap));
+ ReplaceStatement(vs, new yield_var_def_statement_with_unknown_type(vs.var_def));
}
public override void visit(variable_definitions vd)
@@ -43,7 +40,7 @@ namespace SyntaxVisitors
LocalDeletedDefs.Insert(0, v);
}
- Replace(vd, new yield_variable_definitions_with_unknown_type(vd, VarTypeMap));
+ Replace(vd, new yield_variable_definitions_with_unknown_type(vd));
// еще - не заходить в лямбды
}
diff --git a/Yield/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs b/Yield/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs
index 379afb7e2..4ea176bd1 100644
--- a/Yield/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs
+++ b/Yield/SyntaxVisitors/YieldVisitors/LoweringVisitor.cs
@@ -80,11 +80,6 @@ namespace SyntaxVisitors
// DO NOTHING
}
- public override void visit(yield_unknown_foreach_type_ident _unk)
- {
- // DO NOTHING
- }
-
// frninja 21/05/16
public override void visit(foreach_stmt frch)
{
@@ -101,7 +96,8 @@ namespace SyntaxVisitors
// var a: System.Collections.Generic.IEnumerable := l;
var foreachCollIdent = this.NewForeachCollectionName();
- var foreachCollType = new template_type_reference(new named_type_reference("System.Collections.Generic.IEnumerable"), new template_param_list(new yield_unknown_foreach_type(frch)));
+ var foreachCollType = new template_type_reference(new named_type_reference("System.Collections.Generic.IEnumerable"),
+ new template_param_list(new yield_unknown_foreach_type(frch)));
var foreachCollVarDef = new var_statement(foreachCollIdent, foreachCollType);
var ass = new assign(foreachCollIdent, frch.in_what);
@@ -164,20 +160,13 @@ namespace SyntaxVisitors
// Добавляем тело цикла в stl
var stl = new statement_list(st);
- ProcessNode(frch.stmt); //?? - видимо, для обработки вложенных конструкций
+ ProcessNode(frch.stmt); // для обработки вложенных конструкций
stl.Add(frch.stmt);
var whileNode = new while_node(new method_call(new dot_node(enumeratorIdent, "MoveNext"), new expression_list()),
stl,
WhileCycleType.While);
- /*ReplaceStatement(frch,
- SeqStatements(new var_statement(enumeratorIdent,
- new named_type_reference("System.Collections.IEnumerator"),
- // НЕБЕЗОПАСНО!
- new method_call(new dot_node(frch.in_what as addressed_value, new ident("GetEnumerator")), new expression_list())),
- whileNode));
- */
ReplaceStatement(frch,
SeqStatements(foreachCollVarDef, ass, enumeratorVarDef, whileNode)
);
diff --git a/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs b/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs
index 3d4c22645..94980b8d1 100644
--- a/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs
+++ b/Yield/SyntaxVisitors/YieldVisitors/ProcessYieldsCapturedVars.cs
@@ -82,8 +82,8 @@ namespace SyntaxVisitors
IEnumerable fields, // локальные переменные
IDictionary localsMap, // отображение для захваченных имен локальных переменных
IDictionary formalParamsMap, // отображение для захваченных имен формальных параметров
- IDictionary localsCloneMap, // отображение для оберток локальных переменных
- yield_locals_type_map_helper localTypeMapHelper) // вспомогательный узел для типов локальных переменных
+ IDictionary localsCloneMap // отображение для оберток локальных переменных
+ )
{
var fh = (pd.proc_header as function_header);
if (fh == null)
@@ -104,7 +104,7 @@ namespace SyntaxVisitors
if (vds.inital_value != null)
{
//return new var_def_statement(ids, new yield_unknown_expression_type(localsCloneMap[vds], varsTypeDetectorHelper), null);
- return new var_def_statement(ids, new yield_unknown_expression_type(localsCloneMap[vds], localTypeMapHelper), null);
+ return new var_def_statement(ids, new yield_unknown_expression_type(localsCloneMap[vds]), null);
}
else
{
@@ -606,7 +606,7 @@ namespace SyntaxVisitors
///
/// Объявление метода
/// Коллекция посещенных локальных переменных
- private void CreateLocalVariablesTypeProxies(procedure_definition pd, out IEnumerable localsClonesCollection, out yield_locals_type_map_helper localsTypeMapHelper)
+ private void CreateLocalVariablesTypeProxies(procedure_definition pd, out IEnumerable localsClonesCollection)
{
// Выполняем определение типов локальных переменных с автовыводом типов
@@ -616,8 +616,7 @@ namespace SyntaxVisitors
pdCloned.has_yield = false;
// Заменяем локальные переменные с неизвестным типом на обертки-хелперы (откладываем до семантики)
- localsTypeMapHelper = new yield_locals_type_map_helper();
- LocalVariablesTypeDetectorHelperVisior localsTypeDetectorHelperVisitor = new LocalVariablesTypeDetectorHelperVisior(localsTypeMapHelper);
+ LocalVariablesTypeDetectorHelperVisior localsTypeDetectorHelperVisitor = new LocalVariablesTypeDetectorHelperVisior();
pdCloned.visit(localsTypeDetectorHelperVisitor);
// frninja 16/03/16 - строим список локальных переменных в правильном порядке
@@ -927,9 +926,8 @@ namespace SyntaxVisitors
pd.visit(deleteBeginEndVisitor);
// Обработка метода для корректного захвата локальных переменных и их типов
- yield_locals_type_map_helper localsTypeMapHelper;
IEnumerable localsClonesCollection;
- CreateLocalVariablesTypeProxies(pd, out localsClonesCollection, out localsTypeMapHelper);
+ CreateLocalVariablesTypeProxies(pd, out localsClonesCollection);
// frninja 16/11/15: перенес ниже чтобы работал захват для lowered for
@@ -960,7 +958,7 @@ namespace SyntaxVisitors
(pd.proc_body as block).program_code = cfa.res;
// Конструируем определение класса
- var cct = GenClassesForYield(pd, dld.LocalDeletedDefs, CapturedLocalsNamesMap, CapturedFormalParamsNamesMap, localsCloneMap, localsTypeMapHelper); // все удаленные описания переменных делаем описанием класса
+ var cct = GenClassesForYield(pd, dld.LocalDeletedDefs, CapturedLocalsNamesMap, CapturedFormalParamsNamesMap, localsCloneMap); // все удаленные описания переменных делаем описанием класса
// Вставляем классы-хелперы
InsertYieldHelpers(pd, cct);
diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll
index 1380f8427..a1c705591 100644
Binary files a/bin/Lib/PABCRtl.dll and b/bin/Lib/PABCRtl.dll differ
diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas
index a727bc7f0..a2f55d87a 100644
--- a/bin/Lib/PABCSystem.pas
+++ b/bin/Lib/PABCSystem.pas
@@ -1698,6 +1698,8 @@ var
ExitCode := 0; // TODO Сделать возврат в Main
///--
DefaultEncoding: Encoding;
+ ///--
+ PrintDelimDefault: string := ' ';
///--
var
@@ -7939,7 +7941,7 @@ end;
/// Выводит последовательность на экран, используя пробел в качестве разделителя
function Print(Self: sequence of T): sequence of T; extensionmethod;
begin
- Result := Self.Print(' ');
+ Result := Self.Print(PrintDelimDefault);
end;
/// Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку
@@ -7953,7 +7955,7 @@ end;
/// Выводит последовательность на экран, используя пробел качестве разделителя, и переходит на новую строку
function Println(Self: sequence of T): sequence of T; extensionmethod;
begin
- Result := Self.Println(' ');
+ Result := Self.Println(PrintDelimDefault);
end;
/// Выводит последовательность строк в файл
diff --git a/bin/Lib/PT4.pas b/bin/Lib/PT4.pas
index 0e18976a9..a3f4148bf 100644
--- a/bin/Lib/PT4.pas
+++ b/bin/Lib/PT4.pas
@@ -1,4 +1,4 @@
-/// Модуль электронного задачника Programming Taskbook 4
+/// Модуль электронного задачника Programming Taskbook 4
unit PT4;
//------------------------------------------------------------------------------
@@ -1255,6 +1255,7 @@ var __initialized := false;
procedure __InitModule;
begin
CurrentIOSystem := new IOPT4System;
+ PrintDelimDefault := '';
loadNodes := new ArrayList;
ExecuteBeforeProcessTerminateIn__Mode += PT4_ExecuteBeforeProcessTerminateIn__Mode;
StartPT(512);