@@ -0,0 +1,39 @@
+{$mode tp}
+{ args for destructors
+ are allowed in TP mode for compatibility only PM }
+
+program test_destructor_with_args;
+var
+ z : longint;
+ type
+ tt = object
+ constructor dummy;
+ destructor done(x : longint);virtual;
+ end;
+ constructor tt.dummy;
+ begin
+ destructor tt.done;
+ Writeln('x in tt.done is ',x);
+ z:=x;
+ var
+ pt : ^tt;
+begin
+ Writeln('ln(5)=',ln(5));
+ new(pt,dummy);
+ pt^.done(4);
+ if z<>4 then
+ Halt(1);
+ pt^.dummy;
+ dispose(pt,done(5));
+ if z<>5 then
+end.
@@ -3,8 +3,7 @@
PROCEDURE a;
VAR v,v2,v3:integer;
- PROCEDURE b;
- BEGIN
+ PROCEDURE b;assembler;
ASM
MOV AX,v
mov v2,AX
@@ -13,7 +12,6 @@ VAR v,v2,v3:integer;
MOV AX,[EBP+OFFSET v]
MOV v3,AX
END;
- END;
BEGIN
v:=5;
@@ -0,0 +1,17 @@
+{$mode objfpc}
+Type
+ ts = set of (tse);
+ ts2 = set of (t1,t2);
+ enum3 = (tm1:=-1,t0,tp1);
+ ts3 = set of t0 .. tp1;
+ f:ts;
+ f2 : ts2;
+ f3 : ts3;
+ f2:=f2+[t2];
+ f2:=f2+[t1];
+ f:=f+[tse]; // compiler says that set elements are not compatible
+ { f3:=[tm1];}
@@ -0,0 +1,24 @@
+program prueba;
+uses crt;
+ resultado,exponente:integer;
+ exponente := 3;
+ resultado := -1 ** exponente;
+ writeln (resultado);
+ if resultado<>-1 then
+ exponente := 4;
+ resultado := -(1 ** exponente);
+ resultado := (-1) ** exponente;
+ if resultado<>1 then
@@ -0,0 +1,21 @@
+uses sysUtils;
+ t = object
+ f:integer;
+ function m: AnsiString;
+ function t.m: AnsiString;
+ result:=IntToStr(f);
+ var ti:t;
+ ti.f:=1; // no vmt for t - constructor call is not needed
+ writeln(format('%s', [ti.m])); // this works
+ writeln(format('%s, %s', [ti.m, ti.m])); // this does not - the same story with classes