|
@@ -915,6 +915,8 @@ type
|
|
|
Procedure TestTypeHelper_EnumDotValueFail;
|
|
|
Procedure TestTypeHelper_EnumHelperDotProcFail;
|
|
|
Procedure TestTypeHelper_Enumerator;
|
|
|
+ Procedure TestTypeHelper_String;
|
|
|
+ Procedure TestTypeHelper_Boolean;
|
|
|
Procedure TestTypeHelper_Constructor_NewInstance;
|
|
|
Procedure TestTypeHelper_InterfaceFail;
|
|
|
|
|
@@ -17079,6 +17081,54 @@ begin
|
|
|
ParseProgram;
|
|
|
end;
|
|
|
|
|
|
+procedure TTestResolver.TestTypeHelper_String;
|
|
|
+begin
|
|
|
+ StartProgram(false);
|
|
|
+ Add([
|
|
|
+ '{$modeswitch typehelpers}',
|
|
|
+ 'type',
|
|
|
+ ' TStringHelper = type helper for String',
|
|
|
+ ' procedure DoIt;',
|
|
|
+ ' end;',
|
|
|
+ ' TCharHelper = type helper for char',
|
|
|
+ ' procedure Fly;',
|
|
|
+ ' end;',
|
|
|
+ 'procedure TStringHelper.DoIt;',
|
|
|
+ 'begin',
|
|
|
+ ' Self[1]:=Self[2];',
|
|
|
+ 'end;',
|
|
|
+ 'procedure TCharHelper.Fly;',
|
|
|
+ 'begin',
|
|
|
+ ' Self:=''c'';',
|
|
|
+ ' Self:=Self;',
|
|
|
+ 'end;',
|
|
|
+ 'begin',
|
|
|
+ ' ''abc''.DoIt;',
|
|
|
+ ' ''xyz''.DoIt();',
|
|
|
+ ' ''c''.Fly;',
|
|
|
+ '']);
|
|
|
+ ParseProgram;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TTestResolver.TestTypeHelper_Boolean;
|
|
|
+begin
|
|
|
+ StartProgram(false);
|
|
|
+ Add([
|
|
|
+ '{$modeswitch typehelpers}',
|
|
|
+ 'type',
|
|
|
+ ' THelper = type helper for boolean',
|
|
|
+ ' procedure DoIt;',
|
|
|
+ ' end;',
|
|
|
+ 'procedure THelper.DoIt;',
|
|
|
+ 'begin',
|
|
|
+ ' Self:=not Self;',
|
|
|
+ 'end;',
|
|
|
+ 'begin',
|
|
|
+ ' false.DoIt;',
|
|
|
+ ' true.DoIt();']);
|
|
|
+ ParseProgram;
|
|
|
+end;
|
|
|
+
|
|
|
procedure TTestResolver.TestTypeHelper_Constructor_NewInstance;
|
|
|
var
|
|
|
aMarker: PSrcMarker;
|