|
@@ -0,0 +1,96 @@
|
|
|
+{ original: peter5a.pas from the GNU Pascal testsuite }
|
|
|
+
|
|
|
+{ Mac Pascal objects }
|
|
|
+
|
|
|
+{$mode macpas}
|
|
|
+
|
|
|
+program peter5a;
|
|
|
+
|
|
|
+ type
|
|
|
+ Str = String[100];
|
|
|
+ BaseObject = object
|
|
|
+ v1: Str;
|
|
|
+ function m1: Str;
|
|
|
+ function m2: Str;
|
|
|
+ end;
|
|
|
+ SuperObject = object(BaseObject)
|
|
|
+ v2: Str;
|
|
|
+ v3: Str;
|
|
|
+ function m1: Str; override;
|
|
|
+ function m2: Str; override;
|
|
|
+ function m3: Str;
|
|
|
+ end;
|
|
|
+
|
|
|
+ var
|
|
|
+ good: Boolean;
|
|
|
+
|
|
|
+ function BaseObject.m1: Str;
|
|
|
+ begin
|
|
|
+ return 'BaseObject.' + v1;
|
|
|
+ end;
|
|
|
+
|
|
|
+ function BaseObject.m2: Str;
|
|
|
+ begin
|
|
|
+ return 'BaseObject.nov2';
|
|
|
+ end;
|
|
|
+
|
|
|
+ function SuperObject.m1: Str;
|
|
|
+ begin
|
|
|
+ return 'SuperObject.' + (inherited m1) + '.' + v1;
|
|
|
+ end;
|
|
|
+
|
|
|
+ function SuperObject.m2: Str;
|
|
|
+ begin
|
|
|
+ return 'SuperObject.' + (inherited m2) + '.' + v2;
|
|
|
+ end;
|
|
|
+
|
|
|
+ function SuperObject.m3: Str;
|
|
|
+ begin
|
|
|
+ return 'SuperObject.' + v3;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure CheckEqual( const param, s1, s2: Str );
|
|
|
+ begin
|
|
|
+ if s1 <> s2 then begin
|
|
|
+ good := false;
|
|
|
+ WriteLn( 'Failed: ', param, ' = ', s1, ' is not equal to ', s2 );
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ var
|
|
|
+ base: BaseObject;
|
|
|
+ super: SuperObject;
|
|
|
+ reallysuper: BaseObject;
|
|
|
+begin
|
|
|
+ New(base);
|
|
|
+ base.v1 := 'basev1';
|
|
|
+
|
|
|
+ New(super);
|
|
|
+ super.v1 := 'superv1';
|
|
|
+ super.v2 := 'superv2';
|
|
|
+ super.v3 := 'superv3';
|
|
|
+
|
|
|
+ reallysuper := super; { reference copy only! }
|
|
|
+
|
|
|
+ good := true;
|
|
|
+
|
|
|
+ CheckEqual( 'base.m1', base.m1, 'BaseObject.basev1' );
|
|
|
+ CheckEqual( 'base.m2', base.m2, 'BaseObject.nov2' );
|
|
|
+
|
|
|
+ CheckEqual( 'super.m1', super.m1, 'SuperObject.BaseObject.superv1.superv1' );
|
|
|
+ CheckEqual( 'super.m2', super.m2, 'SuperObject.BaseObject.nov2.superv2' );
|
|
|
+ CheckEqual( 'super.m3', super.m3, 'SuperObject.superv3' );
|
|
|
+
|
|
|
+ CheckEqual( 'reallysuper.m1', reallysuper.m1, 'SuperObject.BaseObject.superv1.superv1' );
|
|
|
+ CheckEqual( 'reallysuper.m2', reallysuper.m2, 'SuperObject.BaseObject.nov2.superv2' );
|
|
|
+
|
|
|
+ if good then begin
|
|
|
+ WriteLn( 'OK' );
|
|
|
+ end
|
|
|
+ else begin
|
|
|
+ halt(1);
|
|
|
+ end;
|
|
|
+
|
|
|
+ Dispose( base );
|
|
|
+ Dispose( super );
|
|
|
+end.
|