This commit is contained in:
miks1965 2016-08-06 15:23:20 +03:00
parent 132b1e2de2
commit c6e66a4599
15 changed files with 471 additions and 320 deletions

View file

@ -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 = "1291";
public const string Revision = "1295";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=0
%REVISION%=1291
%REVISION%=1295
%MINOR%=1
%MAJOR%=3

View file

@ -0,0 +1,11 @@
uses ГрафическиеИсполнители;
begin
var КнопкаЯндекс := СоздатьКнопку('Яндекс');
var КнопкаВКШ := СоздатьКнопку('ВКШ');
var Браузер := СоздатьБраузер;
КнопкаЯндекс.ПриНажатии += Браузер.ОтобразитьСайт('http://www.yandex.ru');
КнопкаВКШ.ПриНажатии += Браузер.ОтобразитьСайт('http://sunschool.mmcs.sfedu.ru');
end.

View file

@ -0,0 +1,54 @@
unit ГрафическиеИсполнители;
uses FormsABC;
type
WebBrowser2 = class(WebBrowser)
public
procedure Отобразить(адрес: string) := Navigate(адрес);
function ОтобразитьСайт(адрес: string): () -> () :=
() -> Self.Отобразить(адрес);
end;
Button2 = class(Button)
private
procedure ppp(sender: Object; e: System.EventArgs);
public
event ПриНажатии: procedure;
constructor Create(text: string);
begin
inherited Create(text);
b.Click += ppp;
end;
end;
procedure Button2.ppp(sender: Object; e: System.EventArgs);
begin
if ПриНажатии<>nil then
ПриНажатии
end;
procedure Init();
begin
MainForm.SetSize(1024,768);
end;
function СоздатьКнопку(Заголовок: string): Button2;
begin
ParentControl := MainPanel;
Result := new Button2(Заголовок);
end;
function СоздатьБраузер: WebBrowser2;
begin
MainPanel.Dock := Dockstyle.Left;
MainPanel.Width := 130;
ParentControl := MainForm;
Result := new WebBrowser2;
Result.Dock := DockStyle.Fill;
end;
begin
Init();
end.

Binary file not shown.

View file

@ -2,6 +2,258 @@
<AspectFile Version="3">
<Node>
<Items>
<Node Name="!Исправленные ошибки">
<Items>
<Node Name="Sum(e-&gt;e) ошибка">
<Items>
<Node Name="new SeveralFunctionsCanBeCalled">
<FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName>
<Text>return AddError&lt;function_node&gt;(new SeveralFunctionsCanBeCalled(loc,set_of_possible_functions));</Text>
<OCtx>
<i Type="Method">public function_node select_function ( expressions_list parameters , SymbolInfo functions , location loc , List &lt; SyntaxTree . expression &gt; syntax_nodes_parameters = null )</i>
<i Type="ClassOrNamespace">public class convertion_data_and_alghoritms</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="if (funcs.Count == 2)">
<FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName>
<Text>if (funcs.Count == 2)</Text>
<OCtx>
<i Type="Method">public function_node select_function ( expressions_list parameters , SymbolInfo functions , location loc , List &lt; SyntaxTree . expression &gt; syntax_nodes_parameters = null )</i>
<i Type="ClassOrNamespace">public class convertion_data_and_alghoritms</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="PVS Studio Detected">
<Items>
<Node Name="Нужно использовать &amp;&amp; вместо ||">
<FileName>\codecompletion\domconverter.cs</FileName>
<Text>if (pattern != null || pattern != "")</Text>
<OCtx>
<i Type="Method">public SymInfo [ ] GetTypeByPattern ( string pattern , int line , int col , bool all_names , int nest_level )</i>
<i Type="ClassOrNamespace">public class DomConverter</i>
<i Type="ClassOrNamespace">namespace CodeCompletion</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Неиспользуемый результат Replace">
<FileName>\visualplugins\languageconverter\source\textformatter.cs</FileName>
<Text>_word.Replace(specSymbol, "");</Text>
<OCtx>
<i Type="Method">public string FormatWordWithKeyWord ( string _word , object _node )</i>
<i Type="ClassOrNamespace">public class TextFormatter</i>
<i Type="ClassOrNamespace">namespace Converter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Неиспользуемый результат OrderBy">
<FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\services\refactoringservice\refactoringservice.cs</FileName>
<Text>result.OrderBy(node =&gt; node.Content.FullyQualifiedName);</Text>
<OCtx>
<i Type="Method">static IEnumerable &lt; ITreeNode &lt; IClass &gt; &gt; FindDerivedClassesTree ( IClass baseClass , IEnumerable &lt; IProjectContent &gt; projectContents , HashSet &lt; IClass &gt; seenClasses )</i>
<i Type="ClassOrNamespace">public static class RefactoringService</i>
<i Type="ClassOrNamespace">namespace ICSharpCode . SharpDevelop . Refactoring</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Одинаковые подвыражения в условии">
<Items>
<Node Name="1">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (_pascal_set_constant.values != null &amp;&amp; _pascal_set_constant.values != null)</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . pascal_set_constant _pascal_set_constant )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="2">
<FileName>\visualpascalabcnet\workbench\runnermanagerhandlers.cs</FileName>
<Text>if (File.Exists(pdbFileName) &amp;&amp; File.Exists(pdbFileName))</Text>
<OCtx>
<i Type="Method">void WaitCallback_DeleteEXEAndPDB ( object state )</i>
<i Type="ClassOrNamespace">public partial class WorkbenchRunService : VisualPascalABCPlugins . IWorkbenchRunService</i>
<i Type="ClassOrNamespace">namespace VisualPascalABC</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Самая интересная ошибка">
<FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\editor\codecompletion\nrefactoryinsightwindowhandler.cs</FileName>
<Note>Вот здесь то место, где не учитывается один вариант открывающих скобок
Вместо одного из openBracketToken нужно написать openBracesToken</Note>
<Text>if (token.Kind == openParensToken || token.Kind == openBracketToken || token.Kind == openBracketToken) {</Text>
<OCtx>
<i Type="Method">public void InitializeOpenedInsightWindow ( ITextEditor editor , IInsightWindow insightWindow )</i>
<i Type="ClassOrNamespace">public class NRefactoryInsightWindowHandler : IInsightWindowHandler</i>
<i Type="ClassOrNamespace">namespace ICSharpCode . SharpDevelop . Editor . CodeCompletion</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Всегда истинные выражения">
<Items>
<Node Name="1">
<FileName>\treeconverter\systemlib\static_executors.cs</FileName>
<Text>if (value &gt;= int.MinValue &amp;&amp; value &lt;= int.MaxValue)</Text>
<OCtx>
<i Type="Method">private static int check_int_overflow ( location loc , int value )</i>
<i Type="ClassOrNamespace">public static class static_executors</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SystemLibrary</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="2">
<FileName>\treeconverter\systemlib\static_executors.cs</FileName>
<Text>if (value &gt;= long.MinValue &amp;&amp; value &lt;= long.MaxValue)</Text>
<OCtx>
<i Type="Method">private static long check_long_overflow ( location loc , long value )</i>
<i Type="ClassOrNamespace">public static class static_executors</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SystemLibrary</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="3">
<FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text>
<OCtx>
<i Type="Method">private void ConvertInc ( IExpressionNode e )</i>
<i Type="ClassOrNamespace">public class ILConverter : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . NETGenerator</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="4">
<FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text>
<OCtx>
<i Type="Method">private void ConvertDec ( IExpressionNode e )</i>
<i Type="ClassOrNamespace">public class ILConverter : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . NETGenerator</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="5">
<FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Ldarga_S, pos);</Text>
<OCtx>
<i Type="Method">private void AddrOfParameterNode ( ICommonParameterReferenceNode value )</i>
<i Type="ClassOrNamespace">public class ILConverter : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . NETGenerator</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Повторная проверка условия">
<FileName>\codecompletion\findreferences.cs</FileName>
<Note>Двумя строчками ниже
(Здесь сказывается недостаток моего инструмента - если в методе есть две одинаковые строчки - переход осуществляется только на первую, а надо на вторую)</Note>
<Text>if (ret_tn != null)</Text>
<OCtx>
<i Type="Method">public override void visit ( indexer _indexer )</i>
<i Type="ClassOrNamespace">public class ReferenceFinder : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace CodeCompletion</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Дважды проверяется if (left is int64_const)">
<FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName>
<Note>597 и 631 строки в текущей версии</Note>
<Text>else if (left is int64_const)</Text>
<OCtx>
<i Type="Method">public void CompareInternal ( expression left , expression right )</i>
<i Type="ClassOrNamespace">public class SyntaxTreeComparer</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SyntaxTree</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Трижды проверяется if (left is case_node)">
<FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName>
<Note>1599
1611
1615 строки</Note>
<Text>else if (left is case_node)</Text>
<OCtx>
<i Type="Method">public void CompareInternal ( statement left , statement right )</i>
<i Type="ClassOrNamespace">public class SyntaxTreeComparer</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SyntaxTree</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Ошибка read(x,s)">
<Items>
<Node Name="make_read_call вызов">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>expression_node bfcint = make_read_call(si, _method_call.parameters, subloc2);</Text>
<OCtx>
<i Type="Method">internal void visit_method_call ( SyntaxTree . method_call _method_call )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="make_read_call - описание">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="readln_string_file = true;">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Note>Это - непонятное место из-за которого происходит ошибка</Note>
<Text>readln_string_file = true;</Text>
<OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="!readln_string_file">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>if (!readln_string_file)</Text>
<OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
</Items>
</Node>
<Node Name="Добавляем t[1] где t - Tuple">
<Items>
<Node Name="visit(SyntaxTree.indexer _indexer)">
@ -616,263 +868,8 @@
</Node>
</Items>
</Node>
<Node Name="PVS Studio Detected">
<Items>
<Node Name="Нужно использовать &amp;&amp; вместо ||">
<FileName>\codecompletion\domconverter.cs</FileName>
<Text>if (pattern != null || pattern != "")</Text>
<OCtx>
<i Type="Method">public SymInfo [ ] GetTypeByPattern ( string pattern , int line , int col , bool all_names , int nest_level )</i>
<i Type="ClassOrNamespace">public class DomConverter</i>
<i Type="ClassOrNamespace">namespace CodeCompletion</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Неиспользуемый результат Replace">
<FileName>\visualplugins\languageconverter\source\textformatter.cs</FileName>
<Text>_word.Replace(specSymbol, "");</Text>
<OCtx>
<i Type="Method">public string FormatWordWithKeyWord ( string _word , object _node )</i>
<i Type="ClassOrNamespace">public class TextFormatter</i>
<i Type="ClassOrNamespace">namespace Converter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Неиспользуемый результат OrderBy">
<FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\services\refactoringservice\refactoringservice.cs</FileName>
<Text>result.OrderBy(node =&gt; node.Content.FullyQualifiedName);</Text>
<OCtx>
<i Type="Method">static IEnumerable &lt; ITreeNode &lt; IClass &gt; &gt; FindDerivedClassesTree ( IClass baseClass , IEnumerable &lt; IProjectContent &gt; projectContents , HashSet &lt; IClass &gt; seenClasses )</i>
<i Type="ClassOrNamespace">public static class RefactoringService</i>
<i Type="ClassOrNamespace">namespace ICSharpCode . SharpDevelop . Refactoring</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Одинаковые подвыражения в условии">
<Items>
<Node Name="1">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (_pascal_set_constant.values != null &amp;&amp; _pascal_set_constant.values != null)</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . pascal_set_constant _pascal_set_constant )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="2">
<FileName>\visualpascalabcnet\workbench\runnermanagerhandlers.cs</FileName>
<Text>if (File.Exists(pdbFileName) &amp;&amp; File.Exists(pdbFileName))</Text>
<OCtx>
<i Type="Method">void WaitCallback_DeleteEXEAndPDB ( object state )</i>
<i Type="ClassOrNamespace">public partial class WorkbenchRunService : VisualPascalABCPlugins . IWorkbenchRunService</i>
<i Type="ClassOrNamespace">namespace VisualPascalABC</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Самая интересная ошибка">
<FileName>\visualpascalabcnet\formsdesignerbinding\dependecies\src\main\base\project\src\editor\codecompletion\nrefactoryinsightwindowhandler.cs</FileName>
<Note>Вот здесь то место, где не учитывается один вариант открывающих скобок
Вместо одного из openBracketToken нужно написать openBracesToken</Note>
<Text>if (token.Kind == openParensToken || token.Kind == openBracketToken || token.Kind == openBracketToken) {</Text>
<OCtx>
<i Type="Method">public void InitializeOpenedInsightWindow ( ITextEditor editor , IInsightWindow insightWindow )</i>
<i Type="ClassOrNamespace">public class NRefactoryInsightWindowHandler : IInsightWindowHandler</i>
<i Type="ClassOrNamespace">namespace ICSharpCode . SharpDevelop . Editor . CodeCompletion</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Всегда истинные выражения">
<Items>
<Node Name="1">
<FileName>\treeconverter\systemlib\static_executors.cs</FileName>
<Text>if (value &gt;= int.MinValue &amp;&amp; value &lt;= int.MaxValue)</Text>
<OCtx>
<i Type="Method">private static int check_int_overflow ( location loc , int value )</i>
<i Type="ClassOrNamespace">public static class static_executors</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SystemLibrary</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="2">
<FileName>\treeconverter\systemlib\static_executors.cs</FileName>
<Text>if (value &gt;= long.MinValue &amp;&amp; value &lt;= long.MaxValue)</Text>
<OCtx>
<i Type="Method">private static long check_long_overflow ( location loc , long value )</i>
<i Type="ClassOrNamespace">public static class static_executors</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SystemLibrary</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="3">
<FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text>
<OCtx>
<i Type="Method">private void ConvertInc ( IExpressionNode e )</i>
<i Type="ClassOrNamespace">public class ILConverter : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . NETGenerator</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="4">
<FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Starg_S, pos);</Text>
<OCtx>
<i Type="Method">private void ConvertDec ( IExpressionNode e )</i>
<i Type="ClassOrNamespace">public class ILConverter : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . NETGenerator</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="5">
<FileName>\NETGenerator\NETGenerator.cs</FileName>
<Text>if (pos &lt;= 255) il.Emit(OpCodes.Ldarga_S, pos);</Text>
<OCtx>
<i Type="Method">private void AddrOfParameterNode ( ICommonParameterReferenceNode value )</i>
<i Type="ClassOrNamespace">public class ILConverter : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . NETGenerator</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Повторная проверка условия">
<FileName>\codecompletion\findreferences.cs</FileName>
<Note>Двумя строчками ниже
(Здесь сказывается недостаток моего инструмента - если в методе есть две одинаковые строчки - переход осуществляется только на первую, а надо на вторую)</Note>
<Text>if (ret_tn != null)</Text>
<OCtx>
<i Type="Method">public override void visit ( indexer _indexer )</i>
<i Type="ClassOrNamespace">public class ReferenceFinder : AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace CodeCompletion</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Дважды проверяется if (left is int64_const)">
<FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName>
<Note>597 и 631 строки в текущей версии</Note>
<Text>else if (left is int64_const)</Text>
<OCtx>
<i Type="Method">public void CompareInternal ( expression left , expression right )</i>
<i Type="ClassOrNamespace">public class SyntaxTreeComparer</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SyntaxTree</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Трижды проверяется if (left is case_node)">
<FileName>\parsertools\syntaxtreevisitors\syntaxtreecomparer.cs</FileName>
<Note>1599
1611
1615 строки</Note>
<Text>else if (left is case_node)</Text>
<OCtx>
<i Type="Method">public void CompareInternal ( statement left , statement right )</i>
<i Type="ClassOrNamespace">public class SyntaxTreeComparer</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . SyntaxTree</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Ошибка read(x,s)">
<Items>
<Node Name="make_read_call вызов">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>expression_node bfcint = make_read_call(si, _method_call.parameters, subloc2);</Text>
<OCtx>
<i Type="Method">internal void visit_method_call ( SyntaxTree . method_call _method_call )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="make_read_call - описание">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="readln_string_file = true;">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Note>Это - непонятное место из-за которого происходит ошибка</Note>
<Text>readln_string_file = true;</Text>
<OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="!readln_string_file">
<FileName>\TreeConverter\TreeConversion\syntax_tree_visitor.cs</FileName>
<Text>if (!readln_string_file)</Text>
<OCtx>
<i Type="Method">private expression_node make_read_call ( SymbolInfo si , SyntaxTree . expression_list parameters , location loc )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="visit_program_code(_block.program_code)">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>visit_program_code(_block.program_code);</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . block _block )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="lab.is_defined">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>if (lab.is_defined)</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . labeled_statement _labeled_statement )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="Yield">
<Items>
<Node Name="Осн. визитор visit(procedure_definition pd)">
<FileName>\SyntaxVisitors\YieldVisitors\ProcessYieldsCapturedVars.cs</FileName>
<Text>public override void visit(procedure_definition pd)</Text>
<OCtx>
<i Type="Method">public override void visit ( 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>
<Node Name="root.visit(new ProcessYieldCapturedVarsVisitor());">
<FileName>\Yield\YieldConversionSyntax\YieldDesugarSyntaxTreeConverter.cs</FileName>
<Text>root.visit(new ProcessYieldCapturedVarsVisitor());</Text>
@ -884,6 +881,17 @@
</i>
</OCtx>
</Node>
<Node Name="Осн. визитор visit(procedure_definition pd)">
<FileName>\SyntaxVisitors\YieldVisitors\ProcessYieldsCapturedVars.cs</FileName>
<Text>public override void visit(procedure_definition pd)</Text>
<OCtx>
<i Type="Method">public override void visit ( 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>
<Node Name="NewConstructFiniteAutomata">
<Items>
<Node Name="ConstructFiniteAutomata1">
@ -1149,32 +1157,6 @@
</Node>
</Items>
</Node>
<Node Name="Sum(e-&gt;e) ошибка">
<Items>
<Node Name="new SeveralFunctionsCanBeCalled">
<FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName>
<Text>return AddError&lt;function_node&gt;(new SeveralFunctionsCanBeCalled(loc,set_of_possible_functions));</Text>
<OCtx>
<i Type="Method">public function_node select_function ( expressions_list parameters , SymbolInfo functions , location loc , List &lt; SyntaxTree . expression &gt; syntax_nodes_parameters = null )</i>
<i Type="ClassOrNamespace">public class convertion_data_and_alghoritms</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="if (funcs.Count == 2)">
<FileName>\TreeConverter\TreeConversion\convertion_data_and_alghoritms.cs</FileName>
<Text>if (funcs.Count == 2)</Text>
<OCtx>
<i Type="Method">public function_node select_function ( expressions_list parameters , SymbolInfo functions , location loc , List &lt; SyntaxTree . expression &gt; syntax_nodes_parameters = null )</i>
<i Type="ClassOrNamespace">public class convertion_data_and_alghoritms</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="a.Sort((row1, row2) -&gt; 1)">
<Items>
<Node Name="visit_method_call">
@ -1216,6 +1198,72 @@
</Node>
</Items>
</Node>
<Node Name="[::]">
<Items>
<Node Name="visit(slice_expr">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . slice_expr sl )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
<Node Name="Таблица символов">
<Items>
<Node Name="class DSSymbolTable">
<FileName>\TreeConverter\SymbolTable\DSST\SymbolTable.cs</FileName>
<Text>public class DSSymbolTable</Text>
<OCtx>
<i Type="ClassOrNamespace">public class DSSymbolTable</i>
<i Type="ClassOrNamespace">namespace SymbolTable</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
<ICtx>
<i Type="Field">public List &lt; Scope &gt; ScopeTable</i>
<i Type="Field">private DSHashTable HashTable</i>
<i Type="Field">internal bool CaseSensitive</i>
<i Type="Field">private Scope LastScope</i>
<i Type="Field">private Scope CurrentScope</i>
<i Type="Method">public DSSymbolTable ( int hash_size , bool case_sensitive )</i>
<i Type="Method">public void Clear ( )</i>
<i Type="Method">public LambdaScope CreateLambdaScope ( Scope TopScope )</i>
<i Type="Method">public Scope CreateScope ( Scope TopScope )</i>
<i Type="Method">public ClassScope CreateClassScope ( Scope TopScope , Scope BaseClass )</i>
</ICtx>
</Node>
</Items>
</Node>
<Node Name="DockError">
<Items>
<Node Name="visit(SyntaxTree.assign">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.assign _assign)</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . assign _assign )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
<Node Name="visit(function_lambda_definition">
<FileName>\treeconverter\treeconversion\syntax_tree_visitor.cs</FileName>
<Text>public override void visit(SyntaxTree.function_lambda_definition _function_lambda_definition)</Text>
<OCtx>
<i Type="Method">public override void visit ( SyntaxTree . function_lambda_definition _function_lambda_definition )</i>
<i Type="ClassOrNamespace">public class syntax_tree_visitor : SyntaxTree . AbstractVisitor</i>
<i Type="ClassOrNamespace">namespace PascalABCCompiler . TreeConverter</i>
<i Type="CS_TreeNode">
</i>
</OCtx>
</Node>
</Items>
</Node>
</Items>
</Node>
</AspectFile>

View file

@ -1 +1 @@
!define VERSION '3.1.0.1291'
!define VERSION '3.1.0.1295'

View file

@ -56,7 +56,7 @@ namespace SyntaxVisitors
//PrintInfo = false;
}
public override void Enter(syntax_tree_node st)
/*public override void Enter(syntax_tree_node st)
{
base.Enter(st);
countNodesVisited++;
@ -66,7 +66,7 @@ namespace SyntaxVisitors
{
visitNode = false; // фильтр - куда не заходить
}
}
}*/
/*public override void visit(class_members cm)
{
@ -367,7 +367,7 @@ namespace SyntaxVisitors
{
// Объявление функции в классе?
var classDef = UpperNode(3) as class_definition;
if ((UpperNode(3) as class_definition) != null)
if (classDef != null)
{
var td = UpperNode(4) as type_declaration;
if (td != null)

View file

@ -68,6 +68,7 @@ namespace SyntaxVisitors
{
if (!first_time_visit_function_header) // чтобы в лямбдах не заходить в формальные параметры. Во вложенных тоже не зайдёт
return;
// SSM переименование формальных параметров (нужно если мы их изменяем внутри)
++CurrentLevel;
BlockNamesStack.Add(new Dictionary<string, string>());
if (fp != null)

View file

@ -1,4 +1,4 @@
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit FormsABC;
@ -70,7 +70,7 @@ type
/// Кнопка
Button = class
private
protected
b := new System.Windows.Forms.Button;
procedure BClick(sender: Object; e: EventArgs);
public
@ -240,6 +240,11 @@ type
private
function GetText: string;
procedure SetText(s: string);
function GetDocumentStream: System.IO.Stream := (f as System.Windows.Forms.WebBrowser).DocumentStream;
procedure SetDocumentStream(s: System.IO.Stream);
begin
(f as System.Windows.Forms.WebBrowser).DocumentStream := s;
end;
function GetAddress: string;
procedure WBDocumentCompleted(sender: Object; e: WebBrowserDocumentCompletedEventArgs);
public
@ -251,6 +256,7 @@ type
procedure GoForward;
procedure GoHome;
property Address: string read GetAddress;
property DocumentStream: System.IO.Stream read GetDocumentStream write SetDocumentStream;
end;
/// Окно для рисования
@ -998,6 +1004,7 @@ end;
constructor WebBrowser.Create();
begin
f := new System.Windows.Forms.WebBrowser;
(f as System.Windows.Forms.WebBrowser).ScriptErrorsSuppressed := True;
ParentControl.Add(f);
CurrentControl := f;
(f as System.Windows.Forms.WebBrowser).DocumentCompleted += WBDocumentCompleted;

View file

@ -23,24 +23,29 @@ namespace PascalABCCompiler.TreeConverter
_mot = motivation.expression_evaluation;
}
/// <summary>
/// синоним reset()
/// </summary>
public void set_motivation_to_expect_expression_evaluation()
{
_mot=motivation.expression_evaluation;
}
public void set_motivation_to_expect_address()
{
_mot=motivation.address_reciving;
}
public void set_motivation_to_except_semantic_node()
public void set_motivation_to_expect_semantic_node()
{
_mot=motivation.semantic_node_reciving;
}
public motivation motivation
{
//(ssyy) Darkstar!!! Данный код провоцирует ложные переходы в режиме трассировки!
get
{
motivation temp=_mot;
_mot=motivation.expression_evaluation;
return temp;
return _mot;
}
}

View file

@ -737,7 +737,7 @@ namespace PascalABCCompiler.TreeConverter
#endif
convertion_data_and_alghoritms.check_node_parser_error(tn);
motivation_keeper.set_motivation_to_except_semantic_node();
motivation_keeper.set_motivation_to_expect_semantic_node();
return ret.visit(tn);
}
@ -1722,7 +1722,10 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.inherited_message _inherited_message)
{
//throw new NotSupportedError(get_location(_inherited_message));
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.expression_evaluation: return_value(inherited_message_value_reciving(_inherited_message)); break;
//case motivation.symbol_info_reciving: return_symbol_value(blocks.find(_ident.name));break;
@ -1878,7 +1881,9 @@ namespace PascalABCCompiler.TreeConverter
{
if (_known_type_ident.type == PascalABCCompiler.SyntaxTree.known_type.string_type)
{
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: return_value(SystemLibrary.SystemLibrary.string_type); break;
case motivation.expression_evaluation: return_value(SystemLibrary.SystemLibrary.string_type); break;
@ -2384,7 +2389,9 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.inherited_ident _inherited_ident)
{
inherited_ident_processing = true;
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: return_addressed_value(inherited_ident_address_reciving(_inherited_ident)); break;
case motivation.expression_evaluation: return_value(inherited_ident_value_reciving(_inherited_ident)); break;
@ -4691,7 +4698,8 @@ namespace PascalABCCompiler.TreeConverter
}
//throw new ArgumentNullException("test");
motivation mot = motivation_keeper.motivation;
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
expression_node expr_node = null;
expressions_list exprs = new expressions_list();
@ -8145,8 +8153,8 @@ namespace PascalABCCompiler.TreeConverter
foreach (SyntaxTree.expression s_expr in _with_statement.do_with.expressions)
{
//expression_node expr = ret.visit(s_expr);
motivation mot = motivation_keeper.motivation;
motivation_keeper.set_motivation_to_except_semantic_node();
var mot = motivation_keeper.motivation;
motivation_keeper.set_motivation_to_expect_semantic_node();
semantic_node sn = ret.visit(s_expr as SyntaxTree.syntax_tree_node);
motivation_keeper.reset();
expression_node expr = sn as expression_node;
@ -9225,7 +9233,7 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.dot_node _dot_node)
{
motivation mot = motivation_keeper.motivation;
var mot = motivation_keeper.motivation;
SyntaxTree.ident id_left = _dot_node.left as SyntaxTree.ident;
SyntaxTree.ident id_right = _dot_node.right as SyntaxTree.ident;
if (_dot_node.right is ident_with_templateparams)
@ -9238,6 +9246,7 @@ namespace PascalABCCompiler.TreeConverter
visit(dotNodeToVisit);
return;
}
motivation_keeper.reset();
if (id_left != null)
{
@ -14432,7 +14441,8 @@ namespace PascalABCCompiler.TreeConverter
return;
}
motivation mot = motivation_keeper.motivation;
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
SyntaxTree.ident idi = _indexer.dereferencing_value as SyntaxTree.ident;
if (idi != null)
{
@ -14559,13 +14569,9 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.roof_dereference _roof_dereference)
{
expression_node exp = null;
motivation mot = motivation_keeper.motivation;
/*
if (mot == motivation.address_reciving)
{
tmp = motivation_keeper.motivation;
}
*/
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
exp = convert_strong(_roof_dereference.dereferencing_value);
if (exp is typed_expression) exp = convert_typed_expression_to_function_call(exp as typed_expression);
//Check this expression
@ -15472,7 +15478,9 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.ident _ident)
{
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: return_addressed_value(ident_address_reciving(_ident)); break;
case motivation.expression_evaluation: return_value(ident_value_reciving(_ident)); break;
@ -15496,7 +15504,9 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.double_const _double_const)
{
expression_node en = new double_const_node(_double_const.val, get_location(_double_const));
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: throw new CompilerInternalError("Addres reciving from constant"); break;
case motivation.expression_evaluation: return_value(en); break;
@ -15535,7 +15545,9 @@ namespace PascalABCCompiler.TreeConverter
}
*/
en = SystemLibrary.static_executors.make_int_const(int32.val, get_location(int32));
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: throw new CompilerInternalError("Addres reciving from constant"); break;
case motivation.expression_evaluation: return_value(en); break;
@ -15548,7 +15560,9 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.int64_const int64)
{
expression_node en = new long_const_node(int64.val, get_location(int64));
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: throw new CompilerInternalError("Addres reciving from constant"); break;
case motivation.expression_evaluation: return_value(en); break;
@ -15564,7 +15578,9 @@ namespace PascalABCCompiler.TreeConverter
// :-)
//throw new CompilerInternalError("Числа UInt64 доступны только в PascalABC.NET Professional Edition");
expression_node en = new ulong_const_node(uint64.val, get_location(uint64));
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: throw new CompilerInternalError("Addres reciving from constant"); break;
case motivation.expression_evaluation: return_value(en); break;
@ -15577,9 +15593,11 @@ namespace PascalABCCompiler.TreeConverter
public override void visit(SyntaxTree.bool_const _bool_const)
{
expression_node en = new bool_const_node(_bool_const.val, get_location(_bool_const));
switch (motivation_keeper.motivation)
var mot = motivation_keeper.motivation;
motivation_keeper.reset();
switch (mot)
{
case motivation.address_reciving: throw new CompilerInternalError("Address reciving from constant"); break;
case motivation.address_reciving: throw new CompilerInternalError("Address reciving from constant");
case motivation.expression_evaluation: return_value(en); break;
case motivation.semantic_node_reciving: return_semantic_value(en); break;
}

View file

@ -30,7 +30,7 @@ namespace YieldDesugarSyntaxTreeConverter
#if DEBUG
try
{
root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt"));
//root.visit(new SimplePrettyPrinterVisitor(@"d:\\zzz1.txt"));
}
catch
{

View file

@ -1,4 +1,4 @@
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// Copyright (c) Ivan Bondarev, Stanislav Mihalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
unit FormsABC;
@ -70,7 +70,7 @@ type
/// Кнопка
Button = class
private
protected
b := new System.Windows.Forms.Button;
procedure BClick(sender: Object; e: EventArgs);
public
@ -240,6 +240,11 @@ type
private
function GetText: string;
procedure SetText(s: string);
function GetDocumentStream: System.IO.Stream := (f as System.Windows.Forms.WebBrowser).DocumentStream;
procedure SetDocumentStream(s: System.IO.Stream);
begin
(f as System.Windows.Forms.WebBrowser).DocumentStream := s;
end;
function GetAddress: string;
procedure WBDocumentCompleted(sender: Object; e: WebBrowserDocumentCompletedEventArgs);
public
@ -251,6 +256,7 @@ type
procedure GoForward;
procedure GoHome;
property Address: string read GetAddress;
property DocumentStream: System.IO.Stream read GetDocumentStream write SetDocumentStream;
end;
/// Окно для рисования
@ -998,6 +1004,7 @@ end;
constructor WebBrowser.Create();
begin
f := new System.Windows.Forms.WebBrowser;
(f as System.Windows.Forms.WebBrowser).ScriptErrorsSuppressed := True;
ParentControl.Add(f);
CurrentControl := f;
(f as System.Windows.Forms.WebBrowser).DocumentCompleted += WBDocumentCompleted;

Binary file not shown.