diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 89c953b8de..2cab80d7f5 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -14433,7 +14433,7 @@ begin // set ancestor aClass.AncestorType := DestType; - {$IFDEF CheckPasTreeRefCount}DestType.ChangeRefId('TPasAliasType.DestType','TPasClassType.AncestorType');{$ENDIF} + {$IFDEF CheckPasTreeRefCount}DestType.ChangeRefId('ResolveTypeReference','TPasClassType.AncestorType');{$ENDIF} FinishScope(stAncestors,aClass); end; end; diff --git a/packages/pastojs/src/pas2jscompiler.pp b/packages/pastojs/src/pas2jscompiler.pp index 365f221da3..ac344461e8 100644 --- a/packages/pastojs/src/pas2jscompiler.pp +++ b/packages/pastojs/src/pas2jscompiler.pp @@ -776,6 +776,8 @@ begin FreeAndNil(FScanner); FreeAndNil(FFileResolver); FreeAndNil(FPasResolver); + if FPasModule<>nil then + FPasModule.ReleaseUsedUnits; ReleaseAndNil(TPasElement(FPasModule){$IFDEF CheckPasTreeRefCount},'CreateElement'{$ENDIF}); inherited Destroy; end; diff --git a/packages/pastojs/src/pas2jsfiler.pp b/packages/pastojs/src/pas2jsfiler.pp index 7e516fc108..d5381fdeac 100644 --- a/packages/pastojs/src/pas2jsfiler.pp +++ b/packages/pastojs/src/pas2jsfiler.pp @@ -4398,10 +4398,7 @@ var Scope: TPasPropertyScope absolute Data; begin if RefEl is TPasProperty then - begin - Scope.AncestorProp:=TPasProperty(RefEl); - RefEl.AddRef{$IFDEF CheckPasTreeRefCount}('TPasPropertyScope.AncestorProp'){$ENDIF}; - end + Scope.AncestorProp:=TPasProperty(RefEl) else RaiseMsg(20180213214723,Scope.Element,GetObjName(RefEl)); end; diff --git a/packages/pastojs/tests/tcmodules.pas b/packages/pastojs/tests/tcmodules.pas index 6ea05f42c8..b9ac1a167f 100644 --- a/packages/pastojs/tests/tcmodules.pas +++ b/packages/pastojs/tests/tcmodules.pas @@ -1137,7 +1137,7 @@ end; procedure TCustomTestModule.SetUp; begin {$IFDEF EnablePasTreeGlobalRefCount} - FElementRefCountAtSetup:=FModule.GlobalRefCount; + FElementRefCountAtSetup:=TPasElement.GlobalRefCount; {$ENDIF} inherited SetUp; FSkipTests:=false; @@ -1246,7 +1246,7 @@ begin El:=El.NextRefEl; end; {$ENDIF} - //Halt; + Halt; Fail('TCustomTestModule.TearDown Was='+IntToStr(FElementRefCountAtSetup)+' Now='+IntToStr(TPasElement.GlobalRefCount)); end; {$ENDIF} diff --git a/packages/pastojs/tests/tcunitsearch.pas b/packages/pastojs/tests/tcunitsearch.pas index 7d5656d3e2..7c3c158824 100644 --- a/packages/pastojs/tests/tcunitsearch.pas +++ b/packages/pastojs/tests/tcunitsearch.pas @@ -27,7 +27,8 @@ interface uses Classes, SysUtils, contnrs, fpcunit, testregistry, - PScanner, Pas2jsFileUtils, Pas2jsCompiler, Pas2jsFileCache, Pas2jsLogger, + PScanner, PasTree, PasResolveEval, + Pas2jsFileUtils, Pas2jsCompiler, Pas2jsFileCache, Pas2jsLogger, tcmodules; type @@ -84,6 +85,9 @@ type FFiles: TObjectList; // list of TCLIFile FLogMsgs: TObjectList; // list ot TCLILogMsg FParams: TStringList; + {$IFDEF EnablePasTreeGlobalRefCount} + FElementRefCountAtSetup: int64; + {$ENDIF} function GetExitCode: integer; function GetFiles(Index: integer): TCLIFile; function GetLogMsgs(Index: integer): TCLILogMsg; @@ -211,6 +215,9 @@ end; procedure TCustomTestCLI.SetUp; begin + {$IFDEF EnablePasTreeGlobalRefCount} + FElementRefCountAtSetup:=TPasElement.GlobalRefCount; + {$ENDIF} inherited SetUp; FDefaultFileAge:=DateTimeToFileDate(Now); {$IFDEF Windows} @@ -228,6 +235,11 @@ begin end; procedure TCustomTestCLI.TearDown; +{$IFDEF CheckPasTreeRefCount} +var + El: TPasElement; + i: integer; +{$ENDIF} begin FreeAndNil(FCompiler); FParams.Clear; @@ -239,6 +251,24 @@ begin FErrorCol:=0; FErrorNumber:=0; inherited TearDown; + {$IFDEF EnablePasTreeGlobalRefCount} + if FElementRefCountAtSetup<>TPasElement.GlobalRefCount then + begin + writeln('TCustomTestCLI.TearDown GlobalRefCount Was='+IntToStr(FElementRefCountAtSetup)+' Now='+IntToStr(TPasElement.GlobalRefCount)); + {$IFDEF CheckPasTreeRefCount} + El:=TPasElement.FirstRefEl; + while El<>nil do + begin + writeln(' ',GetObjName(El),' RefIds.Count=',El.RefIds.Count,':'); + for i:=0 to El.RefIds.Count-1 do + writeln(' ',El.RefIds[i]); + El:=El.NextRefEl; + end; + {$ENDIF} + Halt; + Fail('TCustomTestCLI.TearDown Was='+IntToStr(FElementRefCountAtSetup)+' Now='+IntToStr(TPasElement.GlobalRefCount)); + end; + {$ENDIF} end; procedure TCustomTestCLI.DoLog(Sender: TObject; const Msg: String);