From 010beefd28b7a1544a7808af86300c06ef11075c Mon Sep 17 00:00:00 2001 From: pierre Date: Tue, 29 Oct 2002 00:57:18 +0000 Subject: [PATCH] * procvar types checks for strings args should be stricter --- tests/test/tstprocv.pp | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 tests/test/tstprocv.pp diff --git a/tests/test/tstprocv.pp b/tests/test/tstprocv.pp new file mode 100644 index 0000000000..44a0783ed7 --- /dev/null +++ b/tests/test/tstprocv.pp @@ -0,0 +1,78 @@ +{ %FAIL } +{ this compilation should fail + because an ansitring should not be allowed + as equivalent to a normal short string + for procvars PM } + +{$mode fpc} +{$H-} + +uses + strings; + +Type + type_error_proc = procedure (Const St : String); + +Const + error_proc : type_error_proc = nil; + has_errors : boolean = false; +var + st : string; + ast : ansistring; + pst : pchar; + + + +procedure string_error_proc(const err : string); +begin +{$ifdef DEBUG} + writeln('String error proc: ',err); +{$endif DEBUG} + if err<>st then + has_errors:=true; +end; + +procedure ansistring_error_proc(const err : ansistring); +begin +{$ifdef DEBUG} + writeln('Ansistring error proc: ',err); +{$endif DEBUG} + if err<>ast then + has_errors:=true; +end; + +procedure pchar_error_proc(const err : pchar); +begin +{$ifdef DEBUG} + writeln('Pchar error proc: ',err); +{$endif DEBUG} + if strcomp(err,pst)<>0 then + has_errors:=true; +end; + +begin + st:='direct short string'; + string_error_proc(st); + ast:='direct ansistring'; + ansistring_error_proc(ast); + pst:='direct short string'; + pchar_error_proc(pst); + + error_proc:=@string_error_proc; + st:='short string via procvar'; + error_proc(st); + + error_proc:=@ansistring_error_proc; + ast:='ansistring via procvar'; + error_proc(ast); + + error_proc:=@pchar_error_proc; + pst:='pchar via procvar'; + error_proc(pst); + if has_errors then + begin + Writeln('Wrong code is generated'); + halt(1); + end; +end. +