Причёсываю PABCSystem.pas

This commit is contained in:
miks1965 2016-02-23 23:28:56 +03:00
parent 94c0db534a
commit 7908a033bd
9 changed files with 920 additions and 352 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 = "1173";
public const string Revision = "1174";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=0
%REVISION%=1173
%MINOR%=1
%REVISION%=1174
%COREVERSION%=0
%MAJOR%=3

View file

@ -1 +1 @@
!define VERSION '3.1.0.1173'
!define VERSION '3.1.0.1174'

View file

@ -1,10 +1,3 @@
{begin
var s := [1,2,3];
foreach var x in s do
begin
var y := x + x;
end;
end.}
type
TPair = auto class
Key: string;

13
TestSuite/foreachvar3.pas Normal file
View file

@ -0,0 +1,13 @@
procedure p<T>(s: set of T; f: T->T);
begin
foreach var x in s do
begin
var y := f(x);
Print(y);
end;
end;
begin
var s := [1,2,3,7,2,4];
p(s,x->x);
end.

View file

@ -16287,12 +16287,11 @@ namespace PascalABCCompiler.TreeConverter
}
}
foreach (SemanticTree.ITypeNode itn in tn.ImplementingInterfaces)
foreach (SemanticTree.ITypeNode itn in tn.ImplementingInterfaces) // если не нашли - ищем интерфейс IEnumerable и возвращаем object в качестве elem_type
{
//if (itn == ctn)
if (itn is compiled_type_node)
{
var itnc = (itn as compiled_type_node).compiled_type;
/*var itnc = (itn as compiled_type_node).compiled_type;
if (itnc.IsGenericType)
{
var my = itnc.GetGenericTypeDefinition();// = typeof(System.Collections.Generic.IEnumerable<>)
@ -16303,7 +16302,8 @@ namespace PascalABCCompiler.TreeConverter
return true;
}
}
else if (itn == ctn)
else */
if (itn == ctn)
{
elem_type = SystemLibrary.SystemLibrary.object_type;
return true;

Binary file not shown.

View file

@ -8,13 +8,39 @@
<PointOfInterest>
<Name>Стандартные константы</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Стандартные константы</Text>
<OuterContext>
<OuterContextItem Type="Defs">
<string>const</string>
</OuterContextItem>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
@ -71,37 +97,102 @@
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MinDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>Epsilon</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxReal</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>Стандартные типы</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>object = System.Object;</Text>
<Text>// Стандартные типы</Text>
<OuterContext>
<OuterContextItem Type="Field">
<string>object</string>
<string>=</string>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Object</string>
</OuterContextItem>
<OuterContextItem Type="" />
</OuterContext>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
<string>shortint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxByte</string>
<string>=</string>
<string>byte</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxSmallInt</string>
<string>=</string>
<string>smallint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxWord</string>
<string>=</string>
<string>word</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxLongWord</string>
<string>=</string>
<string>longword</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxInt64</string>
<string>=</string>
<string>int64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxUInt64</string>
<string>=</string>
<string>uint64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items>
<PointOfInterest>
<Name>Классы коллекций</Name>
@ -545,12 +636,98 @@
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>Подпрограммы ввода read</Name>
<Name>Процедуры и функции ввода Read</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// read - readln</Text>
<Text>// Процедуры и функции ввода Read</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
<string>shortint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxByte</string>
<string>=</string>
<string>byte</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxSmallInt</string>
<string>=</string>
<string>smallint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxWord</string>
<string>=</string>
<string>word</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxLongWord</string>
<string>=</string>
<string>longword</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxInt64</string>
<string>=</string>
<string>int64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxUInt64</string>
<string>=</string>
<string>uint64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items>
<PointOfInterest>
<Name>Ввод из текстового файла</Name>
@ -573,12 +750,98 @@
</Items>
</PointOfInterest>
<PointOfInterest>
<Name>Процедуры вывода write</Name>
<Name>Процедуры вывода Write</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// write - writeln</Text>
<Text>// Процедуры вывода Write - Writeln</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
<string>shortint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxByte</string>
<string>=</string>
<string>byte</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxSmallInt</string>
<string>=</string>
<string>smallint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxWord</string>
<string>=</string>
<string>word</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxLongWord</string>
<string>=</string>
<string>longword</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxInt64</string>
<string>=</string>
<string>int64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxUInt64</string>
<string>=</string>
<string>uint64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items />
</PointOfInterest>
<PointOfInterest>
@ -679,23 +942,96 @@
<PointOfInterest>
<Name>Подпрограммы для работы с текстовыми файлами</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>procedure Assign(f: Text; name: string);</Text>
<Text>// Подпрограммы для работы с текстовыми файлами</Text>
<OuterContext>
<OuterContextItem Type="MethodHeader">
<string>procedure</string>
<string>Assign</string>
<string>(</string>
<string>f</string>
<string>:</string>
<string>Text</string>
<string>;</string>
<string>name</string>
<string>:</string>
<string>string</string>
<string>)</string>
</OuterContextItem>
<OuterContextItem Type="" />
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
<string>shortint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxByte</string>
<string>=</string>
<string>byte</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxSmallInt</string>
<string>=</string>
<string>smallint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxWord</string>
<string>=</string>
<string>word</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxLongWord</string>
<string>=</string>
<string>longword</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxInt64</string>
<string>=</string>
<string>int64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxUInt64</string>
<string>=</string>
<string>uint64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items />
</PointOfInterest>
<PointOfInterest>
@ -816,7 +1152,7 @@
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>Функции работы со стандартными множествами</Name>
<Name>Процедуры для работы со стандартными множествами</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>procedure Include(var s: TypedSet; el: object);</Text>
<OuterContext>
@ -953,7 +1289,7 @@
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>П/п для работы с динамическими массивами</Name>
<Name>Подпрограммы для работы с динамическими массивами</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>function Low(i: System.Array): integer;</Text>
<OuterContext>
@ -975,9 +1311,9 @@
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>П/п для работы с последовательностями и дин. массивами</Name>
<Name>Подпрограммы для генерации последовательностей</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Sequences and dynamic arrays</Text>
<Text>// Подпрограммы для генерации последовательностей</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
@ -1070,7 +1406,102 @@
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>П/п для генерации случайных матриц</Name>
<Name>Подпрограммы для генерации динамических массивов</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Подпрограммы для генерации динамических массивов</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
<string>shortint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxByte</string>
<string>=</string>
<string>byte</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxSmallInt</string>
<string>=</string>
<string>smallint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxWord</string>
<string>=</string>
<string>word</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxLongWord</string>
<string>=</string>
<string>longword</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxInt64</string>
<string>=</string>
<string>int64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxUInt64</string>
<string>=</string>
<string>uint64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>Подпрограммы для генерации случайных матриц</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Matrices</Text>
<OuterContext>
@ -1165,18 +1596,104 @@
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>П/п Rec для созданияTuplов</Name>
<Name>Подпрограммы для создания кортежей</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Tuples</Text>
<Text>// Подпрограммы для создания кортежей</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
<InnerContext>
<InnerContextItem Type="Field">
<string>unit</string>
<string>PABCSystem</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>uses</string>
<string>System</string>
<string>.</string>
<string>Runtime</string>
<string>.</string>
<string>InteropServices</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>IO</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>,</string>
<string>System</string>
<string>.</string>
<string>Collections</string>
<string>.</string>
<string>Generic</string>
<string>,</string>
<string>System</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxShortInt</string>
<string>=</string>
<string>shortint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxByte</string>
<string>=</string>
<string>byte</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxSmallInt</string>
<string>=</string>
<string>smallint</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxWord</string>
<string>=</string>
<string>word</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxLongWord</string>
<string>=</string>
<string>longword</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxInt64</string>
<string>=</string>
<string>int64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxUInt64</string>
<string>=</string>
<string>uint64</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
<InnerContextItem Type="Field">
<string>MaxDouble</string>
<string>=</string>
<string>real</string>
<string>.</string>
<string>MaxValue</string>
</InnerContextItem>
</InnerContext>
<Items />
</PointOfInterest>
<PointOfInterest>
<Name>Подпрограммы создания Lst, HSet, SSet, Dict, KV</Name>
<Name>Короткие функции Lst, HSet, SSet, Dict, KV</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Lst, HSet, SSet, Dict, KV</Text>
<Text>// Короткие функции Lst, HSet, SSet, Dict, KV</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
@ -1271,7 +1788,7 @@
<PointOfInterest>
<Name>Стандартные классы исключений</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Standard Exceptions</Text>
<Text>// Стандартные классы исключений</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>
@ -1366,7 +1883,7 @@
<PointOfInterest>
<Name>Общедоступные переменные</Name>
<FileName>\PABCSystem.pas</FileName>
<Text>// Global variables</Text>
<Text>// Общедоступные переменные</Text>
<OuterContext>
<OuterContextItem Type="PAS_TreeNode" />
</OuterContext>

File diff suppressed because it is too large Load diff