ml27192@uxa.cso.uiuc.edu (lanett mark) (12/30/90)
I'm writing a program using MacApp that for various reasons uses the generic
pascal i/o routines like open/close. When I try to call close from a method
of a TDocument class the compiler flags an error. The problem is that TDoc
_already_ has a method called close, with no arguments, and the compiler is
trying to use that one instead of the generic close. I am not using Self,
either. I could make the file reference variable a global, and call a special
globasl function to close it (which would not be in TDoc), but I'd like to
know if there's any way to avoid this sort of thing in the first place. For that
matter, why the h*** did Apple give a method a name that would cause this kind
of conflict. Yes, I know you don't normally use standard pascal i/o, but I
don't really want to rewrite the existing code that does it.
Example: I know this won't work. The trouble is it doesn't compile, though it
should. How do you get the compiler to use the regular close?
program sample (input, output);
type
foo = object
procedure run;
procedure close;
end;
procedure foo.run;
var z: text;
begin
close (z); (* *** Compiler wants to use foo.close (no args) *)
end;
procedure foo.close;
begin
writeln ('closing');
end;
var a: foo;
begin
new (a);
a.run;
end.
Thanks much,
Mark Lanett, ml27192@uxa.cs.uiuc.edulanett.mark@f20.n226.z1.FIDONET.ORG (lanett mark) (12/30/90)
Reply-To: ml27192@uxa.cso.uiuc.edu
I'm writing a program using MacApp that for various reasons uses the generic
pascal i/o routines like open/close. When I try to call close from a method
of a TDocument class the compiler flags an error. The problem is that TDoc
_already_ has a method called close, with no arguments, and the compiler is
trying to use that one instead of the generic close. I am not using Self,
either. I could make the file reference variable a global, and call a special
globasl function to close it (which would not be in TDoc), but I'd like to
know if there's any way to avoid this sort of thing in the first place. For
that
matter, why the h*** did Apple give a method a name that would cause this kind
of conflict. Yes, I know you don't normally use standard pascal i/o, but I
don't really want to rewrite the existing code that does it.
Example: I know this won't work. The trouble is it doesn't compile, though it
should. How do you get the compiler to use the regular close?
program sample (input, output);
type
foo = object
procedure run;
procedure close;
end;
procedure foo.run;
var z: text;
begin
close (z); (* *** Compiler wants to use foo.close (no args)
*)
end;
procedure foo.close;
begin
writeln ('closing');
end;
var a: foo;
begin
new (a);
a.run;
end.
Thanks much,
Mark Lanett, ml27192@uxa.cs.uiuc.edu
+ Organization: University of Illinois at Urbana
--
lanett mark - via FidoNet node 1:105/14
UUCP: ...!{uunet!glacier, ..reed.bitnet}!busker!226!20!lanett.mark
INTERNET: lanett.mark@f20.n226.z1.FIDONET.ORGdaven@svc.portal.com (12/31/90)
In article <1990Dec30.044453.29640@ux1.cso.uiuc.edu> ml27192@uxa.cso.uiuc.edu (lanett mark) writes: >I'm writing a program using MacApp that for various reasons uses the generic >pascal i/o routines like open/close. When I try to call close from a method >of a TDocument class the compiler flags an error. The problem is that TDoc >_already_ has a method called close, with no arguments, and the compiler is >trying to use that one instead of the generic close. I am not using Self, >either. I can't think of any "slight of hand" that will make the Pascal compilier do what you want without forcing something to change it's name. Using a global routine that calls Close would be the easiest thing to do. I serious believe the MacApp team assumed that most people would be calling the Mac's FSClose routine instead of the Pacal I/O Close routine. -- ------------------------------------------------------------------------------- Dave Newman | daven@svc.portal.com | AppleLink: D0025 Sofware Ventures Corp. | AOL: MicroPhone | CIS: 76004,2161 Berkeley, CA 94705 | WELL: tinman@well.sf.ca.us | (415) 644-3232
Lawson.English@p88.f15.n300.z1.fidonet.org (Lawson English) (01/01/91)
lanett mark writes in a message to All
LM> close (z); (* *** Compiler wants to use foo.close (no args
Simple (I think):
procedure myClose(var z:text);
begin
close(z);
end;
That should work, as long as "myClose" isn't another method of foo (or any other
object, for that matter).
Lawson
--
Uucp: ...{gatech,ames,rutgers}!ncar!asuvax!stjhmc!300!15.88!Lawson.English
Internet: Lawson.English@p88.f15.n300.z1.fidonet.org