diff --git a/Compiler/PCU/PCUReader.cs b/Compiler/PCU/PCUReader.cs index e90974266..0160c38dc 100644 --- a/Compiler/PCU/PCUReader.cs +++ b/Compiler/PCU/PCUReader.cs @@ -287,7 +287,7 @@ namespace PascalABCCompiler.PCU ChangeState(this, PCUReaderWriterState.EndReadTree, unit); return unit; } - catch (Exception) + catch (Exception ex) { CloseUnit(); throw; @@ -476,7 +476,11 @@ namespace PascalABCCompiler.PCU type_node tn = GetSpecialTypeReference(names[i].offset); 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); + } else if (tn is generic_instance_type_node) tn.Scope.AddSymbol(names[i].name, si); else if (tn is common_type_node) diff --git a/TestSuite/params9.pas b/TestSuite/params9.pas new file mode 100644 index 000000000..289e7be14 --- /dev/null +++ b/TestSuite/params9.pas @@ -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. \ No newline at end of file