|
@@ -51,7 +51,8 @@ type
|
|
|
|
|
|
TSystemUnitPart = (
|
|
TSystemUnitPart = (
|
|
supTObject,
|
|
supTObject,
|
|
- supTVarRec
|
|
|
|
|
|
+ supTVarRec,
|
|
|
|
+ supTypeInfo
|
|
);
|
|
);
|
|
TSystemUnitParts = set of TSystemUnitPart;
|
|
TSystemUnitParts = set of TSystemUnitPart;
|
|
|
|
|
|
@@ -816,6 +817,7 @@ type
|
|
Procedure TestRTTI_Interface_Corba;
|
|
Procedure TestRTTI_Interface_Corba;
|
|
Procedure TestRTTI_Interface_COM;
|
|
Procedure TestRTTI_Interface_COM;
|
|
Procedure TestRTTI_ClassHelper;
|
|
Procedure TestRTTI_ClassHelper;
|
|
|
|
+ Procedure TestRTTI_ExternalClass;
|
|
|
|
|
|
// Resourcestring
|
|
// Resourcestring
|
|
Procedure TestResourcestringProgram;
|
|
Procedure TestResourcestringProgram;
|
|
@@ -1557,7 +1559,7 @@ var
|
|
begin
|
|
begin
|
|
Intf:=TStringList.Create;
|
|
Intf:=TStringList.Create;
|
|
// interface
|
|
// interface
|
|
- if supTVarRec in Parts then
|
|
|
|
|
|
+ if [supTVarRec,supTypeInfo]*Parts<>[] then
|
|
Intf.Add('{$modeswitch externalclass}');
|
|
Intf.Add('{$modeswitch externalclass}');
|
|
Intf.Add('type');
|
|
Intf.Add('type');
|
|
Intf.Add(' integer=longint;');
|
|
Intf.Add(' integer=longint;');
|
|
@@ -1603,6 +1605,28 @@ begin
|
|
' TVarRecArray = array of TVarRec;',
|
|
' TVarRecArray = array of TVarRec;',
|
|
'function VarRecs: TVarRecArray; varargs;',
|
|
'function VarRecs: TVarRecArray; varargs;',
|
|
'']);
|
|
'']);
|
|
|
|
+ if supTypeInfo in Parts then
|
|
|
|
+ begin
|
|
|
|
+ Intf.AddStrings([
|
|
|
|
+ 'type',
|
|
|
|
+ ' TTypeInfo = class external name ''rtl.tTypeInfo'' end;',
|
|
|
|
+ ' TTypeInfoInteger = class external name ''rtl.tTypeInfoInteger''(TTypeInfo)',
|
|
|
|
+ ' end;',
|
|
|
|
+ ' TTypeInfoEnum = class external name ''rtl.tTypeInfoEnum''(TTypeInfoInteger) end;',
|
|
|
|
+ ' TTypeInfoSet = class external name ''rtl.tTypeInfoSet''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoStaticArray = class external name ''rtl.tTypeInfoStaticArray''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoDynArray = class external name ''rtl.tTypeInfoDynArray''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoProcVar = class external name ''rtl.tTypeInfoProcVar''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoMethodVar = class external name ''rtl.tTypeInfoMethodVar''(TTypeInfoProcVar) end;',
|
|
|
|
+ ' TTypeInfoClass = class external name ''rtl.tTypeInfoClass''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoClassRef = class external name ''rtl.tTypeInfoClassRef''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoExtClass = class external name ''rtl.tTypeInfoExtClass''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoRecord = class external name ''rtl.tTypeInfoRecord''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoPointer = class external name ''rtl.tTypeInfoPointer''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoHelper = class external name ''rtl.tTypeInfoHelper''(TTypeInfo) end;',
|
|
|
|
+ ' TTypeInfoInterface = class external name ''rtl.tTypeInfoInterface''(TTypeInfo) end;',
|
|
|
|
+ '']);
|
|
|
|
+ end;
|
|
Intf.Add('var');
|
|
Intf.Add('var');
|
|
Intf.Add(' ExitCode: Longint = 0;');
|
|
Intf.Add(' ExitCode: Longint = 0;');
|
|
|
|
|
|
@@ -27286,14 +27310,10 @@ end;
|
|
procedure TTestModule.TestRTTI_IntRange;
|
|
procedure TTestModule.TestRTTI_IntRange;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
'type',
|
|
'type',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo''',
|
|
|
|
- ' end;',
|
|
|
|
- ' TTypeInfoInteger = class external name ''rtl.tTypeInfoInteger''(TTypeInfo)',
|
|
|
|
- ' end;',
|
|
|
|
' TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;',
|
|
' TGraphicsColor = -$7FFFFFFF-1..$7FFFFFFF;',
|
|
' TColor = type TGraphicsColor;',
|
|
' TColor = type TGraphicsColor;',
|
|
'var',
|
|
'var',
|
|
@@ -27322,12 +27342,10 @@ end;
|
|
procedure TTestModule.TestRTTI_Double;
|
|
procedure TTestModule.TestRTTI_Double;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
'type',
|
|
'type',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo''',
|
|
|
|
- ' end;',
|
|
|
|
' TFloat = type double;',
|
|
' TFloat = type double;',
|
|
'var',
|
|
'var',
|
|
' p: TTypeInfo;',
|
|
' p: TTypeInfo;',
|
|
@@ -29032,16 +29050,12 @@ end;
|
|
procedure TTestModule.TestRTTI_TypeInfo_ExtTypeInfoClasses1;
|
|
procedure TTestModule.TestRTTI_TypeInfo_ExtTypeInfoClasses1;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
'type',
|
|
'type',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo'' end;',
|
|
|
|
- ' TTypeInfoInteger = class external name ''rtl.tTypeInfoInteger''(TTypeInfo) end;',
|
|
|
|
' TFlag = (up,down);',
|
|
' TFlag = (up,down);',
|
|
- ' TTypeInfoEnum = class external name ''rtl.tTypeInfoEnum''(TTypeInfoInteger) end;',
|
|
|
|
' TFlags = set of TFlag;',
|
|
' TFlags = set of TFlag;',
|
|
- ' TTypeInfoSet = class external name ''rtl.tTypeInfoSet''(TTypeInfo) end;',
|
|
|
|
'var',
|
|
'var',
|
|
' ti: TTypeInfo;',
|
|
' ti: TTypeInfo;',
|
|
' tiInt: TTypeInfoInteger;',
|
|
' tiInt: TTypeInfoInteger;',
|
|
@@ -29104,18 +29118,13 @@ end;
|
|
procedure TTestModule.TestRTTI_TypeInfo_ExtTypeInfoClasses2;
|
|
procedure TTestModule.TestRTTI_TypeInfo_ExtTypeInfoClasses2;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add('{$modeswitch externalclass}');
|
|
Add('{$modeswitch externalclass}');
|
|
Add('type');
|
|
Add('type');
|
|
- Add(' TTypeInfo = class external name ''rtl.tTypeInfo'' end;');
|
|
|
|
Add(' TStaticArr = array[boolean] of string;');
|
|
Add(' TStaticArr = array[boolean] of string;');
|
|
- Add(' TTypeInfoStaticArray = class external name ''rtl.tTypeInfoStaticArray''(TTypeInfo) end;');
|
|
|
|
Add(' TDynArr = array of string;');
|
|
Add(' TDynArr = array of string;');
|
|
- Add(' TTypeInfoDynArray = class external name ''rtl.tTypeInfoDynArray''(TTypeInfo) end;');
|
|
|
|
Add(' TProc = procedure;');
|
|
Add(' TProc = procedure;');
|
|
- Add(' TTypeInfoProcVar = class external name ''rtl.tTypeInfoProcVar''(TTypeInfo) end;');
|
|
|
|
Add(' TMethod = procedure of object;');
|
|
Add(' TMethod = procedure of object;');
|
|
- Add(' TTypeInfoMethodVar = class external name ''rtl.tTypeInfoMethodVar''(TTypeInfoProcVar) end;');
|
|
|
|
Add('var');
|
|
Add('var');
|
|
Add(' StaticArray: TStaticArr;');
|
|
Add(' StaticArray: TStaticArr;');
|
|
Add(' tiStaticArray: TTypeInfoStaticArray;');
|
|
Add(' tiStaticArray: TTypeInfoStaticArray;');
|
|
@@ -29175,18 +29184,13 @@ end;
|
|
procedure TTestModule.TestRTTI_TypeInfo_ExtTypeInfoClasses3;
|
|
procedure TTestModule.TestRTTI_TypeInfo_ExtTypeInfoClasses3;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add('{$modeswitch externalclass}');
|
|
Add('{$modeswitch externalclass}');
|
|
Add('type');
|
|
Add('type');
|
|
- Add(' TTypeInfo = class external name ''rtl.tTypeInfo'' end;');
|
|
|
|
Add(' TRec = record end;');
|
|
Add(' TRec = record end;');
|
|
- Add(' TTypeInfoRecord = class external name ''rtl.tTypeInfoRecord''(TTypeInfo) end;');
|
|
|
|
// ToDo: ^PRec
|
|
// ToDo: ^PRec
|
|
Add(' TObject = class end;');
|
|
Add(' TObject = class end;');
|
|
- Add(' TTypeInfoClass = class external name ''rtl.tTypeInfoClass''(TTypeInfo) end;');
|
|
|
|
Add(' TClass = class of tobject;');
|
|
Add(' TClass = class of tobject;');
|
|
- Add(' TTypeInfoClassRef = class external name ''rtl.tTypeInfoClassRef''(TTypeInfo) end;');
|
|
|
|
- Add(' TTypeInfoPointer = class external name ''rtl.tTypeInfoPointer''(TTypeInfo) end;');
|
|
|
|
Add('var');
|
|
Add('var');
|
|
Add(' Rec: trec;');
|
|
Add(' Rec: trec;');
|
|
Add(' tiRecord: ttypeinforecord;');
|
|
Add(' tiRecord: ttypeinforecord;');
|
|
@@ -29245,7 +29249,7 @@ end;
|
|
procedure TTestModule.TestRTTI_TypeInfo_FunctionClassType;
|
|
procedure TTestModule.TestRTTI_TypeInfo_FunctionClassType;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
'type',
|
|
'type',
|
|
@@ -29254,8 +29258,6 @@ begin
|
|
' function MyClass: TClass;',
|
|
' function MyClass: TClass;',
|
|
' class function ClassType: TClass;',
|
|
' class function ClassType: TClass;',
|
|
' end;',
|
|
' end;',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo'' end;',
|
|
|
|
- ' TTypeInfoClass = class external name ''rtl.tTypeInfoClass''(TTypeInfo) end;',
|
|
|
|
'function TObject.MyClass: TClass;',
|
|
'function TObject.MyClass: TClass;',
|
|
'var t: TTypeInfoClass;',
|
|
'var t: TTypeInfoClass;',
|
|
'begin',
|
|
'begin',
|
|
@@ -29398,7 +29400,7 @@ end;
|
|
procedure TTestModule.TestRTTI_Interface_Corba;
|
|
procedure TTestModule.TestRTTI_Interface_Corba;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$interfaces corba}',
|
|
'{$interfaces corba}',
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
@@ -29410,8 +29412,6 @@ begin
|
|
' procedure SetItem(Value: longint);',
|
|
' procedure SetItem(Value: longint);',
|
|
' property Item: longint read GetItem write SetItem;',
|
|
' property Item: longint read GetItem write SetItem;',
|
|
' end;',
|
|
' end;',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo'' end;',
|
|
|
|
- ' TTypeInfoInterface = class external name ''rtl.tTypeInfoInterface''(TTypeInfo) end;',
|
|
|
|
'procedure DoIt(t: TTypeInfoInterface); begin end;',
|
|
'procedure DoIt(t: TTypeInfoInterface); begin end;',
|
|
'var',
|
|
'var',
|
|
' i: IBird;',
|
|
' i: IBird;',
|
|
@@ -29463,7 +29463,7 @@ end;
|
|
procedure TTestModule.TestRTTI_Interface_COM;
|
|
procedure TTestModule.TestRTTI_Interface_COM;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$interfaces com}',
|
|
'{$interfaces com}',
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
@@ -29480,8 +29480,6 @@ begin
|
|
' procedure SetItem(Value: longint);',
|
|
' procedure SetItem(Value: longint);',
|
|
' property Item: longint read GetItem write SetItem;',
|
|
' property Item: longint read GetItem write SetItem;',
|
|
' end;',
|
|
' end;',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo'' end;',
|
|
|
|
- ' TTypeInfoInterface = class external name ''rtl.tTypeInfoInterface''(TTypeInfo) end;',
|
|
|
|
'var',
|
|
'var',
|
|
' i: IBird;',
|
|
' i: IBird;',
|
|
' t: TTypeInfoInterface;',
|
|
' t: TTypeInfoInterface;',
|
|
@@ -29540,7 +29538,7 @@ end;
|
|
procedure TTestModule.TestRTTI_ClassHelper;
|
|
procedure TTestModule.TestRTTI_ClassHelper;
|
|
begin
|
|
begin
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
- StartProgram(false);
|
|
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
Add([
|
|
Add([
|
|
'{$interfaces com}',
|
|
'{$interfaces com}',
|
|
'{$modeswitch externalclass}',
|
|
'{$modeswitch externalclass}',
|
|
@@ -29552,8 +29550,6 @@ begin
|
|
' function GetItem: longint;',
|
|
' function GetItem: longint;',
|
|
' property Item: longint read GetItem;',
|
|
' property Item: longint read GetItem;',
|
|
' end;',
|
|
' end;',
|
|
- ' TTypeInfo = class external name ''rtl.tTypeInfo'' end;',
|
|
|
|
- ' TTypeInfoHelper = class external name ''rtl.tTypeInfoHelper''(TTypeInfo) end;',
|
|
|
|
'function THelper.GetItem: longint;',
|
|
'function THelper.GetItem: longint;',
|
|
'begin',
|
|
'begin',
|
|
'end;',
|
|
'end;',
|
|
@@ -29587,6 +29583,40 @@ begin
|
|
'']));
|
|
'']));
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+procedure TTestModule.TestRTTI_ExternalClass;
|
|
|
|
+begin
|
|
|
|
+ Converter.Options:=Converter.Options-[coNoTypeInfo];
|
|
|
|
+ StartProgram(true,[supTypeInfo]);
|
|
|
|
+ Add([
|
|
|
|
+ '{$modeswitch externalclass}',
|
|
|
|
+ 'type',
|
|
|
|
+ ' TJSObject = class external name ''Object''',
|
|
|
|
+ ' end;',
|
|
|
|
+ ' TJSArray = class external name ''Array'' (TJSObject)',
|
|
|
|
+ ' end;',
|
|
|
|
+ 'var',
|
|
|
|
+ ' p: Pointer;',
|
|
|
|
+ ' tc: TTypeInfoExtClass;',
|
|
|
|
+ 'begin',
|
|
|
|
+ ' p:=typeinfo(TJSArray);']);
|
|
|
|
+ ConvertProgram;
|
|
|
|
+ CheckSource('TestRTTI_ExternalClass',
|
|
|
|
+ LinesToStr([ // statements
|
|
|
|
+ '$mod.$rtti.$ExtClass("TJSObject", {',
|
|
|
|
+ ' jsclass: "Object"',
|
|
|
|
+ '});',
|
|
|
|
+ '$mod.$rtti.$ExtClass("TJSArray", {',
|
|
|
|
+ ' ancestor: $mod.$rtti["TJSObject"],',
|
|
|
|
+ ' jsclass: "Array"',
|
|
|
|
+ '});',
|
|
|
|
+ 'this.p = null;',
|
|
|
|
+ 'this.tc = null;',
|
|
|
|
+ '']),
|
|
|
|
+ LinesToStr([ // $mod.$main
|
|
|
|
+ '$mod.p = $mod.$rtti["TJSArray"];',
|
|
|
|
+ '']));
|
|
|
|
+end;
|
|
|
|
+
|
|
procedure TTestModule.TestResourcestringProgram;
|
|
procedure TTestModule.TestResourcestringProgram;
|
|
begin
|
|
begin
|
|
StartProgram(false);
|
|
StartProgram(false);
|
|
@@ -29880,7 +29910,6 @@ begin
|
|
'constructor THelper.Create(Id: word); begin end;',
|
|
'constructor THelper.Create(Id: word); begin end;',
|
|
'begin',
|
|
'begin',
|
|
' if typeinfo(TMyInt)=nil then ;']);
|
|
' if typeinfo(TMyInt)=nil then ;']);
|
|
- //SetExpectedConverterError('aaa',123);
|
|
|
|
ConvertProgram;
|
|
ConvertProgram;
|
|
end;
|
|
end;
|
|
|
|
|