This commit is contained in:
miks1965 2015-08-26 13:48:16 +03:00
parent a45982f64d
commit dac8a1a369
9 changed files with 29 additions and 11 deletions

View file

@ -2,7 +2,7 @@
// This CSharp output file generated by Gardens Point LEX
// Version: 1.1.3.301
// Machine: SSM
// DateTime: 20.08.2015 13:05:17
// DateTime: 25.08.2015 22:41:39
// UserName: ?????????
// GPLEX input file <ABCPascal.lex>
// GPLEX frame file <embedded resource>

View file

@ -2,7 +2,7 @@
// GPPG version 1.3.6
// Machine: SSM
// DateTime: 20.08.2015 13:05:18
// DateTime: 25.08.2015 22:41:40
// UserName: ?????????
// Input file <ABCPascal.y>

View file

@ -78,5 +78,6 @@ script=

View file

@ -18992,7 +18992,7 @@ namespace PascalABCCompiler.SyntaxTree
///<summary>
///Конструктор с параметрами.
///</summary>
public template_type_reference(named_type_reference _name,template_param_list _params_list)
public template_type_reference(named_type_reference _name, template_param_list _params_list)
{
this._name=_name;
this._params_list=_params_list;

View file

@ -184,6 +184,15 @@ namespace PascalABCCompiler.SyntaxTree
public partial class bin_expr
{
public static bin_expr Greater(expression left, expression right)
{
return new bin_expr(left, right, Operators.Greater);
}
public static bin_expr Less(expression left, expression right)
{
return new bin_expr(left, right, Operators.Less);
}
public override string ToString()
{
return string.Format("{0} {2} {1}", left, right, OperatorServices.ToString(operation_type, LanguageId.PascalABCNET));

View file

@ -381,6 +381,11 @@ namespace TreeConverter.LambdaExpressions.Closure
}
}
public override void visit(unnamed_type_object uto) // SSM 26/08/15 - Роман подсказал
{
ProcessNode(uto.ne_list);
}
public override void visit(foreach_stmt _foreach_stmt)
{
var loopIdentName = _foreach_stmt.identifier.name.ToLower();

View file

@ -37,5 +37,7 @@ namespace SyntaxVisitors
d.defs.Remove(vd); // может ли остаться список declarations пустым?
}
// еще - не заходить в лямбды
}
}

View file

@ -150,10 +150,11 @@ namespace SyntaxVisitors
if (!hasYields) // т.е. мы разобрали функцию и уже выходим. Это значит, что пока yield будет обрабатываться только в функциях. Так это и надо.
return;
var dld = new DeleteLocalDefs(mids.vars); // mids.vars - все захваченные переменные
pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все захваченные переменные
var dld = new DeleteAllLocalDefs(); // mids.vars - все захваченные переменные
pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все переменные и вынести их в отдельный список var_def_statement
mids.vars.Except(dld.LocalDeletedDefsNames); // параметры остались. Их тоже надо исключать - они и так будут обработаны
// В результате работы в mids.vars что-то осталось. Это не локальные переменные и с ними непонятно что делать
dld.AfterProcTraverse();
LoweringVisitor.Accept(pd);
@ -162,7 +163,7 @@ namespace SyntaxVisitors
(pd.proc_body as block).program_code = cfa.res;
// Конструируем определение класса
var cct = GenClassesForYield(pd, dld.BlockDeletedIds.Union(dld.LocalDeletedIds));
var cct = GenClassesForYield(pd, dld.LocalDeletedDefs); // все удаленные описания переменных делаем описанием класса
UpperNodeAs<declarations>().InsertBefore(pd, cct);

View file

@ -1,9 +1,9 @@
function Gen(a,b: integer): sequence of integer;
function Gen(n: integer): sequence of integer;
var j,k: real;
begin
var i := 1;
j := 2;
while i<5 do
j := 5;
while i<j do
begin
yield i*i;
i += 1;
@ -11,6 +11,6 @@ begin
end;
begin
foreach var x in Gen(1,2) do
foreach var x in Gen(5) do
Print(x);
end.