FillParentNodesVisitor

This commit is contained in:
miks1965 2016-10-13 00:56:12 +03:00
parent 81bc22856e
commit 7dae60aba0
15 changed files with 54 additions and 26 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3"; public const string Major = "3";
public const string Minor = "2"; public const string Minor = "2";
public const string Build = "0"; public const string Build = "0";
public const string Revision = "1319"; public const string Revision = "1323";
public const string MainVersion = Major + "." + Minor; public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=0 %COREVERSION%=0
%REVISION%=1319 %REVISION%=1323
%MINOR%=2 %MINOR%=2
%MAJOR%=3 %MAJOR%=3

Binary file not shown.

View file

@ -1207,6 +1207,17 @@
</Node> </Node>
</Items> </Items>
</Node> </Node>
<Node Name="var pdCloned = ObjectCopier.Clone(pd);" NL="0,8837891" NG="0,5507813">
<FileName>\syntaxvisitors\yieldvisitors\processyieldscapturedvars.cs</FileName>
<Text>var pdCloned = ObjectCopier.Clone(pd);</Text>
<OCtx>
<i Type="Method">private void CreateErrorCheckerHelper ( procedure_definition pd )</i>
<i Type="ClassOrNamespace">public class ProcessYieldCapturedVarsVisitor : BaseChangeVisitor</i>
<i Type="ClassOrNamespace">namespace SyntaxVisitors</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items> </Items>
</Node> </Node>
<Node Name="a.Sort((row1, row2) -&gt; 1)" NL="0" NG="0"> <Node Name="a.Sort((row1, row2) -&gt; 1)" NL="0" NG="0">

View file

@ -1 +1 @@
!define VERSION '3.2.0.1319' !define VERSION '3.2.0.1323'

View file

@ -11,7 +11,7 @@ namespace PascalABCCompiler.SyntaxTreeConverters
public string Name { get; } = "Standard"; public string Name { get; } = "Standard";
public syntax_tree_node Convert(syntax_tree_node root) public syntax_tree_node Convert(syntax_tree_node root)
{ {
//FillParentNodeVisitor.New.ProcessNode(root); // прошивание ссылками на Parent nodes FillParentNodeVisitor.New.ProcessNode(root); // прошивание ссылками на Parent nodes
// Пока нельзя вызывать - если это делать, то ObjectCopier.Clone провоцирует катастрофически долгое время работы!!! // Пока нельзя вызывать - если это делать, то ObjectCopier.Clone провоцирует катастрофически долгое время работы!!!
return root; return root;
} }

View file

@ -17,7 +17,7 @@ namespace PascalABCCompiler.SyntaxTree
public override void Enter(syntax_tree_node st) public override void Enter(syntax_tree_node st)
{ {
base.Enter(st); base.Enter(st);
//st.Parent = UpperNode(); st.Parent = UpperNode();
} }
} }
} }

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using PascalABCCompiler.SyntaxTree;
namespace SyntaxVisitors namespace SyntaxVisitors
{ {
@ -25,18 +26,18 @@ namespace SyntaxVisitors
/// <param className="source">The object instance to copy.</param> /// <param className="source">The object instance to copy.</param>
/// <returns>The copied object.</returns> /// <returns>The copied object.</returns>
public static T Clone<T>(T source) public static T Clone<T>(T source)
where T: syntax_tree_node
{ {
if (!typeof(T).IsSerializable)
{
throw new ArgumentException("The type must be serializable.", "source");
}
// Don't serialize a null object, simply return the default for that object
if (Object.ReferenceEquals(source, null)) if (Object.ReferenceEquals(source, null))
{ {
return default(T); return default(T);
} }
/*if (!typeof(T).IsSerializable)
{
throw new ArgumentException("The type must be serializable.", "source");
}
IFormatter formatter = new BinaryFormatter(); IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream(); Stream stream = new MemoryStream();
using (stream) using (stream)
@ -44,7 +45,8 @@ namespace SyntaxVisitors
formatter.Serialize(stream, source); formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin); stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream); return (T)formatter.Deserialize(stream);
} }*/
return (T)source.Clone();
} }
} }
} }

View file

@ -213,7 +213,10 @@ namespace SyntaxVisitors
if (decls != null) if (decls != null)
{ {
// frninja 12/05/16 - забыли копировать return // frninja 12/05/16 - забыли копировать return
function_header nfh = ObjectCopier.Clone(fh); //function_header nfh = ObjectCopier.Clone(fh);
function_header nfh = fh.TypedClone();
//function_header nfh = new function_header(); //function_header nfh = new function_header();
//nfh.name = new method_name(fh.name.meth_name.name); //nfh.name = new method_name(fh.name.meth_name.name);
@ -415,6 +418,7 @@ namespace SyntaxVisitors
if (pd.proc_header.where_defs != null) if (pd.proc_header.where_defs != null)
{ {
return ObjectCopier.Clone(pd.proc_header.where_defs); return ObjectCopier.Clone(pd.proc_header.where_defs);
//return pd.proc_header.where_defs.TypedClone();
} }
else else
{ {
@ -426,6 +430,7 @@ namespace SyntaxVisitors
if (pdPredefs.Count() > 0) if (pdPredefs.Count() > 0)
{ {
return ObjectCopier.Clone(pdPredefs.First().proc_header.where_defs); return ObjectCopier.Clone(pdPredefs.First().proc_header.where_defs);
//return pdPredefs.First().proc_header.where_defs.TypedClone();
} }
} }
} }
@ -587,7 +592,8 @@ namespace SyntaxVisitors
private void CreateErrorCheckerHelper(procedure_definition pd) private void CreateErrorCheckerHelper(procedure_definition pd)
{ {
// Клонируем исходный метод для проверок ошибок бэкендом // Клонируем исходный метод для проверок ошибок бэкендом
var pdCloned = ObjectCopier.Clone(pd); //var pdCloned = ObjectCopier.Clone(pd);
var pdCloned = (procedure_definition)pd.Clone();
pdCloned.has_yield = false; pdCloned.has_yield = false;
@ -613,7 +619,8 @@ namespace SyntaxVisitors
// Клонируем исходный метод для вставки оберток-хелперов для локальных переменных и дальнейшей обработки на семантике // Клонируем исходный метод для вставки оберток-хелперов для локальных переменных и дальнейшей обработки на семантике
var pdCloned = ObjectCopier.Clone(pd); var pdCloned = ObjectCopier.Clone(pd);
//var pdCloned = pd; //pd.
//var pdCloned = (procedure_definition)pd.Clone();
pdCloned.has_yield = false; pdCloned.has_yield = false;

View file

@ -3755,17 +3755,20 @@ end;
function SeqRandom(n: integer; a: integer; b: integer): sequence of integer; function SeqRandom(n: integer; a: integer; b: integer): sequence of integer;
begin begin
Result := Range(1,n).Select(i->Random(a,b)) for var i:=1 to n do
yield Random(a,b)
end; end;
function SeqRandomInteger(n: integer; a: integer; b: integer): sequence of integer; function SeqRandomInteger(n: integer; a: integer; b: integer): sequence of integer;
begin begin
Result := Range(1,n).Select(i->Random(a,b)) for var i:=1 to n do
yield Random(a,b)
end; end;
function SeqRandomReal(n: integer; a: real; b: real): sequence of real; function SeqRandomReal(n: integer; a: real; b: real): sequence of real;
begin begin
Result := Range(1,n).Select(i->Random()*(b-a)+a) for var i:=1 to n do
yield Random()*(b-a)+a
end; end;
function Arr<T>(params a: array of T): array of T; function Arr<T>(params a: array of T): array of T;

Binary file not shown.

View file

@ -3755,17 +3755,20 @@ end;
function SeqRandom(n: integer; a: integer; b: integer): sequence of integer; function SeqRandom(n: integer; a: integer; b: integer): sequence of integer;
begin begin
Result := Range(1,n).Select(i->Random(a,b)) for var i:=1 to n do
yield Random(a,b)
end; end;
function SeqRandomInteger(n: integer; a: integer; b: integer): sequence of integer; function SeqRandomInteger(n: integer; a: integer; b: integer): sequence of integer;
begin begin
Result := Range(1,n).Select(i->Random(a,b)) for var i:=1 to n do
yield Random(a,b)
end; end;
function SeqRandomReal(n: integer; a: real; b: real): sequence of real; function SeqRandomReal(n: integer; a: real; b: real): sequence of real;
begin begin
Result := Range(1,n).Select(i->Random()*(b-a)+a) for var i:=1 to n do
yield Random()*(b-a)+a
end; end;
function Arr<T>(params a: array of T): array of T; function Arr<T>(params a: array of T): array of T;

View file

@ -7,3 +7,4 @@ TUPLE_TYPE_ERROR=Bad element in Tuple type
INTEGER_VALUE_EXPECTED=Integer value expected INTEGER_VALUE_EXPECTED=Integer value expected
BAD_SLICE_OBJECT=Slices are allowed for strings, dynamic arrays and lists only BAD_SLICE_OBJECT=Slices are allowed for strings, dynamic arrays and lists only
ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Only in short function definitions you can omit the return type ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Only in short function definitions you can omit the return type
ONE_TKIDENTIFIER=Type here must be identifier

View file

@ -7,3 +7,4 @@ TUPLE_TYPE_ERROR=Ошибочная конструкция при построе
INTEGER_VALUE_EXPECTED=Ожидалось значение целого типа INTEGER_VALUE_EXPECTED=Ожидалось значение целого типа
BAD_SLICE_OBJECT=Срезы допустимы только для строк, динамических массивов и списков BAD_SLICE_OBJECT=Срезы допустимы только для строк, динамических массивов и списков
ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Только в коротких определениях функций можно не указывать тип возвращаемого значения ONLY_IN_SHORT_FUNC_DEFS_RETURN_TYPE_CANBE_OMITTED=Только в коротких определениях функций можно не указывать тип возвращаемого значения
ONE_TKIDENTIFIER=В качестве типа ожидался идентификатор

View file

@ -18,19 +18,19 @@ string
boolean boolean
[f] [f]
for |:= to do for var |:= to do
[fb] [fb]
for |:= to do for var |:= to do
begin begin
end; end;
[fore] [fore]
foreach |: in do foreach var |: in do
[foreb] [foreb]
foreach |: in do foreach var |: in do
begin begin
end; end;
@ -91,7 +91,7 @@ begin
end; end;
[ar] [ar]
array[1..|] of ; array of |;
[try] [try]
try try