bug fix issue #16

This commit is contained in:
Бондарев Иван 2015-12-14 21:42:08 +01:00
parent a09615ff30
commit 5b19c6a60a
4 changed files with 274 additions and 16 deletions

View file

@ -318,27 +318,27 @@ function ReadArrString(n: integer): array of string;
/// Вводит n целых чисел
/// и возвращает введенные числа в виде последовательности
function ReadSeqInteger(n: integer): System.Collections.Generic.IEnumerable<integer>;
function ReadSeqInteger(n: integer): sequence of integer;
/// Вводит n вещественных чисел
/// и возвращает введенные числа в виде последовательности
function ReadSeqReal(n: integer): System.Collections.Generic.IEnumerable<real>;
function ReadSeqReal(n: integer): sequence of real;
/// Вводит n строк
/// и возвращает введенные строки в виде последовательности
function ReadSeqString(n: integer): System.Collections.Generic.IEnumerable<string>;
function ReadSeqString(n: integer): sequence of string;
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqInteger(): System.Collections.Generic.IEnumerable<integer>;
function ReadSeqInteger(): sequence of integer;
/// Вводит размер набора вещественных чисел и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqReal(): System.Collections.Generic.IEnumerable<real>;
function ReadSeqReal(): sequence of real;
/// Вводит размер набора строк и его элементы
/// и возвращает введенный набор в виде последовательности
function ReadSeqString(): System.Collections.Generic.IEnumerable<string>;
function ReadSeqString(): sequence of string;
/// Вводит размер набора целых чисел и его элементы
/// и возвращает введенный набор в виде массива
@ -370,6 +370,48 @@ function ReadMatrString(m,n: integer): array [,] of string;
/// Вводит размеры матрицы и затем строковую матрицу указанных размеров по строкам
function ReadMatrString(): array [,] of string;
procedure ReadMatr(var m, n: integer; var a: array [,] of integer);
procedure ReadMatr(var m, n: integer; var a: array [,] of real);
procedure ReadMatr(var m, n: integer; var a: array [,] of string);
procedure ReadMatr(var m: integer; var a: array [,] of integer);
procedure ReadMatr(var m: integer; var a: array [,] of real);
procedure ReadMatr(var m: integer; var a: array [,] of string);
procedure ReadMatr(var m, n: integer; var a: array of array of integer);
procedure ReadMatr(var m, n: integer; var a: array of array of real);
procedure ReadMatr(var m, n: integer; var a: array of array of string);
procedure ReadMatr(var m: integer; var a: array of array of integer);
procedure ReadMatr(var m: integer; var a: array of array of real);
procedure ReadMatr(var m: integer; var a: array of array of string);
procedure ReadMatr(var m, n: integer; var a: List<List<integer>>);
procedure ReadMatr(var m, n: integer; var a: List<List<real>>);
procedure ReadMatr(var m, n: integer; var a: List<List<string>>);
procedure ReadMatr(var m: integer; var a: List<List<integer>>);
procedure ReadMatr(var m: integer; var a: List<List<real>>);
procedure ReadMatr(var m: integer; var a: List<List<string>>);
procedure WriteMatr<T>(a: array[,] of T);
procedure WriteMatr<T>(a: array of array of T);
procedure WriteMatr<T>(a: List<List<T>>);
// == Конец дополнений к версии 4.14 ==
implementation
@ -1400,32 +1442,32 @@ end;
// == Версия 4.14. Дополнения ==
function ReadSeqInteger(): System.Collections.Generic.IEnumerable<integer>;
function ReadSeqInteger(): sequence of integer;
begin
result := Range(1, GetInteger()).Select(e -> GetInteger()).ToArray();
end;
function ReadSeqReal(): System.Collections.Generic.IEnumerable<real>;
function ReadSeqReal(): sequence of real;
begin
result := Range(1, GetInteger()).Select(e -> GetReal()).ToArray();
end;
function ReadSeqString(): System.Collections.Generic.IEnumerable<string>;
function ReadSeqString(): sequence of string;
begin
result := Range(1, GetInteger()).Select(e -> GetString()).ToArray();
end;
function ReadSeqInteger(n: integer): System.Collections.Generic.IEnumerable<integer>;
function ReadSeqInteger(n: integer): sequence of integer;
begin
result := Range(1, n).Select(e -> GetInteger()).ToArray();
end;
function ReadSeqReal(n: integer): System.Collections.Generic.IEnumerable<real>;
function ReadSeqReal(n: integer): sequence of real;
begin
result := Range(1, n).Select(e -> GetReal()).ToArray();
end;
function ReadSeqString(n: integer): System.Collections.Generic.IEnumerable<string>;
function ReadSeqString(n: integer): sequence of string;
begin
result := Range(1, n).Select(e -> GetString()).ToArray();
end;
@ -1499,9 +1541,179 @@ begin
result := ReadMatrString(ReadInteger,ReadInteger);
end;
procedure ReadMatr(var m, n: integer; var a: array [,] of integer);
begin
read(m); read(n);
a := new integer[m, n];
for var i := 0 to m - 1 do
for var j := 0 to n - 1 do
read(a[i,j]);
end;
procedure ReadMatr(var m, n: integer; var a: array [,] of real);
begin
read(m); read(n);
a := new real[m, n];
for var i := 0 to m - 1 do
for var j := 0 to n - 1 do
read(a[i,j]);
end;
procedure ReadMatr(var m, n: integer; var a: array [,] of string);
begin
read(m); read(n);
a := new string[m, n];
for var i := 0 to m - 1 do
for var j := 0 to n - 1 do
read(a[i,j]);
end;
procedure ReadMatr(var m: integer; var a: array [,] of integer);
begin
read(m);
a := new integer[m, m];
for var i := 0 to m - 1 do
for var j := 0 to m - 1 do
read(a[i,j]);
end;
procedure ReadMatr(var m: integer; var a: array [,] of real);
begin
read(m);
a := new real[m, m];
for var i := 0 to m - 1 do
for var j := 0 to m - 1 do
read(a[i,j]);
end;
procedure ReadMatr(var m: integer; var a: array [,] of string);
begin
read(m);
a := new string[m, m];
for var i := 0 to m - 1 do
for var j := 0 to m - 1 do
read(a[i,j]);
end;
procedure ReadMatr(var m, n: integer; var a: array of array of integer);
begin
read(m); read(n);
SetLength(a, m);
for var i := 0 to m - 1 do
a[i] := ReadArrInteger(n);
end;
procedure ReadMatr(var m, n: integer; var a: array of array of real);
begin
read(m); read(n);
SetLength(a, m);
for var i := 0 to m - 1 do
a[i] := ReadArrReal(n);
end;
procedure ReadMatr(var m, n: integer; var a: array of array of string);
begin
read(m); read(n);
SetLength(a, m);
for var i := 0 to m - 1 do
a[i] := ReadArrString(n);
end;
procedure ReadMatr(var m: integer; var a: array of array of integer);
begin
read(m);
SetLength(a, m);
for var i := 0 to m - 1 do
a[i] := ReadArrInteger(m);
end;
procedure ReadMatr(var m: integer; var a: array of array of real);
begin
read(m);
SetLength(a, m);
for var i := 0 to m - 1 do
a[i] := ReadArrReal(m);
end;
procedure ReadMatr(var m: integer; var a: array of array of string);
begin
read(m);
SetLength(a, m);
for var i := 0 to m - 1 do
a[i] := ReadArrString(m);
end;
procedure ReadMatr(var m, n: integer; var a: List<List<integer>>);
begin
read(m); read(n);
a := new List<List<integer>>(m);
for var i := 0 to m - 1 do
a.Add(ReadSeqInteger(n).ToList);
end;
procedure ReadMatr(var m, n: integer; var a: List<List<real>>);
begin
read(m); read(n);
a := new List<List<real>>(m);
for var i := 0 to m - 1 do
a.Add(ReadSeqReal(n).ToList);
end;
procedure ReadMatr(var m, n: integer; var a: List<List<string>>);
begin
read(m); read(n);
a := new List<List<string>>(m);
for var i := 0 to m - 1 do
a.Add(ReadSeqString(n).ToList);
end;
procedure ReadMatr(var m: integer; var a: List<List<integer>>);
begin
read(m);
a := new List<List<integer>>(m);
for var i := 0 to m - 1 do
a.Add(ReadSeqInteger(m).ToList);
end;
procedure ReadMatr(var m: integer; var a: List<List<real>>);
begin
read(m);
a := new List<List<real>>(m);
for var i := 0 to m - 1 do
a.Add(ReadSeqReal(m).ToList);
end;
procedure ReadMatr(var m: integer; var a: List<List<string>>);
begin
read(m);
a := new List<List<string>>(m);
for var i := 0 to m - 1 do
a.Add(ReadSeqString(m).ToList);
end;
procedure WriteMatr<T>(a: array[,] of T);
begin
for var i := 0 to a.GetLength(0)-1 do
for var j := 0 to a.GetLength(1)-1 do
write(a[i,j]);
end;
procedure WriteMatr<T>(a: array of array of T);
begin
for var i := 0 to a.Length-1 do
for var j := 0 to a[i].Length-1 do
write(a[i][j]);
end;
procedure WriteMatr<T>(a: List<List<T>>);
begin
for var i := 0 to a.Count-1 do
for var j := 0 to a[i].Count-1 do
write(a[i][j]);
end;
/// Выводит размер и элементы последовательности
procedure System.Collections.Generic.IEnumerable<T>.WriteAll();
procedure WriteAll<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
PT4.Put(b.Length);
@ -1510,7 +1722,7 @@ begin
end;
/// Выводит элементы последовательности
procedure System.Collections.Generic.IEnumerable<T>.Write();
procedure Write<T>(self: sequence of T); extensionmethod;
begin
var b := self.ToArray();
foreach e : T in b do

View file

@ -11,4 +11,8 @@ begin
assert(s.Count = s.Length);
var j := s.Count;
assert(j = s.Count);
s := 'abcdef';
var q1 := s.Min;
assert(q1 = 'a');
assert(s.Min = 'a');
end.

View file

@ -1567,6 +1567,10 @@ namespace PascalABCCompiler.TreeConverter
else
fnl.AddElement(fn);
}
}
else
{
}
si = si.Next;
}
@ -8445,16 +8449,24 @@ namespace PascalABCCompiler.TreeConverter
}
else
{
function_node[] empty_param_methods = dm.empty_param_methods;
SymbolInfo si = new SymbolInfo(empty_param_methods[0]);
SymbolInfo root_si = si;
for (int i = 1; i < empty_param_methods.Length; i++)
{
si.Next = new SymbolInfo(empty_param_methods[i]);
si = si.Next;
}
compiled_function_node cfn = fn as compiled_function_node;
if ((fn.parameters.Count == 1 || cfn != null && fn.parameters.Count == 2 && cfn.ConnectedToType != null)
&& (fn.parameters[fn.parameters.Count - 1].is_params || fn.parameters[fn.parameters.Count - 1].default_value != null))
{
fn = convertion_data_and_alghoritms.select_function(bfc.parameters, new SymbolInfo(fn), bfc.location);
fn = convertion_data_and_alghoritms.select_function(bfc.parameters, root_si, bfc.location);
bfc = create_static_method_call_with_params(fn, bfc.location, fn.return_value_type, true, bfc.parameters);
}
else if (fn.parameters.Count == 1 && cfn != null && cfn.ConnectedToType != null)
{
fn = convertion_data_and_alghoritms.select_function(bfc.parameters, new SymbolInfo(fn), bfc.location);
fn = convertion_data_and_alghoritms.select_function(bfc.parameters, root_si, bfc.location);
bfc = create_static_method_call_with_params(fn, bfc.location, fn.return_value_type, true, bfc.parameters);
}
}

View file

@ -3871,6 +3871,36 @@ namespace PascalABCCompiler.TreeRealization
}
}
public function_node[] empty_param_methods
{
get
{
List<function_node> funcs = new List<function_node>();
foreach (base_function_call bfc in _proper_methods)
{
if (bfc.simple_function_node.parameters.Count == 0 || bfc.simple_function_node.parameters.Count == 1 && (bfc.simple_function_node.parameters[0].default_value != null || bfc.simple_function_node.parameters[0].is_params))
{
funcs.Add(bfc.simple_function_node);
}
else if (bfc.function is common_namespace_function_node)
{
common_namespace_function_node cnfn = bfc.function as common_namespace_function_node;
if (cnfn.ConnectedToType != null && (bfc.simple_function_node.parameters.Count == 1 || bfc.simple_function_node.parameters.Count == 2 && (bfc.simple_function_node.parameters[1].is_params || bfc.simple_function_node.parameters[1].default_value != null)))
{
funcs.Add(bfc.simple_function_node);
}
}
else if (bfc.function is compiled_function_node)
{
compiled_function_node cfn = bfc.function as compiled_function_node;
if (cfn.ConnectedToType != null && (bfc.simple_function_node.parameters.Count == 1 || bfc.simple_function_node.parameters.Count == 2 && (bfc.simple_function_node.parameters[1].is_params || bfc.simple_function_node.parameters[1].default_value != null)))
funcs.Add(bfc.simple_function_node);
}
}
return funcs.ToArray();
}
}
public base_function_call empty_param_method
{
get