From 48340c1a8ca465a19f0606392d0ae77b0927ff72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 31 Jul 2016 16:28:30 +0200 Subject: [PATCH] bug fix #260 --- Compiler/PCU/PCUReader.cs | 6 ++++- TestSuite/params9.pas | 47 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 TestSuite/params9.pas 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