diff --git a/.gitattributes b/.gitattributes index ddbf356074..d7d09981e2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -51,6 +51,8 @@ components/codetools/codetree.pas svneol=native#text/pascal components/codetools/customcodetool.pas svneol=native#text/pascal components/codetools/definetemplates.pas svneol=native#text/pascal components/codetools/eventcodetool.pas svneol=native#text/pascal +components/codetools/examples/methodjumping.pas svneol=native#text/plain +components/codetools/examples/tgeneric2.pp svneol=native#text/plain components/codetools/expreval.pas svneol=native#text/pascal components/codetools/extractproctool.pas svneol=native#text/pascal components/codetools/fileprocs.pas svneol=native#text/pascal diff --git a/components/codetools/examples/methodjumping.pas b/components/codetools/examples/methodjumping.pas new file mode 100644 index 0000000000..9f80390e3f --- /dev/null +++ b/components/codetools/examples/methodjumping.pas @@ -0,0 +1,42 @@ +{ Copyright (C) 2005 Mattias Gaertner + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License + for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + + Abstract: + Example, how to setup the codetools, load a pascal unit and jump from + the declaration of a unit to its body. +} +program MethodJumping; + +{$mode objfpc}{$H+} + +uses + Classes, SysUtils, CodeToolManager, CodeCache; + +var + ExpandedFilename: String; + CodeBuf: TCodeBuffer; + NewCode: TCodeBuffer; + NewX, NewY, NewTopLine: integer; + RevertableJump: boolean; +begin + ExpandedFilename:=ExpandFileName('tgeneric2.pp'); + CodeBuf:=CodeToolBoss.LoadFile(ExpandedFilename,true,false); + CodeToolBoss.JumpToMethod(CodeBuf,10,8,NewCode,NewX,NewY,NewTopLine, + RevertableJump); + writeln(NewCode.Filename,' ',NewX,',',NewY,' TopLine=',NewTopLine,' RevertableJump=',RevertableJump); +end. + diff --git a/components/codetools/examples/tgeneric2.pp b/components/codetools/examples/tgeneric2.pp new file mode 100644 index 0000000000..3ed8b131c6 --- /dev/null +++ b/components/codetools/examples/tgeneric2.pp @@ -0,0 +1,29 @@ +program TGeneric2; + +{$mode objfpc} + +type + TList=generic(_T) class(TObject) + data : _T; + procedure Add(item: _T); + end; + +procedure TList.Add(item: _T); +var + i : integer; +begin + { The next line should fail for TList(string) } + i:=item; + data:=item; +end; + +type + TMyStringList = specialize TList(string); + +var + slist : TMyStringList; +begin + slist := TMyStringList.Create; + slist.Add('Test'); + writeln(slist.data); +end.