This commit is contained in:
Бондарев Иван 2016-07-31 16:28:30 +02:00
parent e6f4a08cc1
commit 48340c1a8c
2 changed files with 52 additions and 1 deletions

View file

@ -287,7 +287,7 @@ namespace PascalABCCompiler.PCU
ChangeState(this, PCUReaderWriterState.EndReadTree, unit); ChangeState(this, PCUReaderWriterState.EndReadTree, unit);
return unit; return unit;
} }
catch (Exception) catch (Exception ex)
{ {
CloseUnit(); CloseUnit();
throw; throw;
@ -476,7 +476,11 @@ namespace PascalABCCompiler.PCU
type_node tn = GetSpecialTypeReference(names[i].offset); type_node tn = GetSpecialTypeReference(names[i].offset);
if (tn is compiled_type_node) if (tn is compiled_type_node)
{
if ((tn as compiled_type_node).scope == null)
(tn as compiled_type_node).init_scope();
(tn as compiled_type_node).scope.AddSymbol(names[i].name, si); (tn as compiled_type_node).scope.AddSymbol(names[i].name, si);
}
else if (tn is generic_instance_type_node) else if (tn is generic_instance_type_node)
tn.Scope.AddSymbol(names[i].name, si); tn.Scope.AddSymbol(names[i].name, si);
else if (tn is common_type_node) else if (tn is common_type_node)

47
TestSuite/params9.pas Normal file
View file

@ -0,0 +1,47 @@
procedure Test(params arr: array of integer);
begin
assert(arr[0]=1);
assert(arr[1]=2);
end;
function Testsum(params arr: array of integer): integer;
begin
Result := arr[0]+arr[1];
end;
procedure Test2;
var i2 := Testsum(1,2);
procedure Nested;
begin
Test(1,2);
var i := Testsum(1,2);
assert(i = 3);
assert(i2 = 3);
end;
begin
Test(1,2);
Nested;
var i := Testsum(1,2);
assert(i = 3);
assert(i2 = 3);
end;
type TClass = class
i := Testsum(1,2);
constructor;
begin
assert(i = 3);
Test(1,2);
end;
end;
var i2 := Testsum(1,2);
begin
Test(1,2);
Test2;
var i := Testsum(1,2);
assert(i = 3);
assert(i2 = 3);
var obj := new TClass;
end.