Melvin Smith <[EMAIL PROTECTED]> writes:

> At 11:45 AM 11/24/2003 +0300, Vladimir Lipsky wrote:
> >Hi everyone!
> >
> >In t/src/io.c, specifically test 9 and 10, I wonder if the PIO_eof check up
> >works anywhere; because I didn't manage to find any place where the
> >PIO_F_EOF flag is set up when the PIO_*_open function fails neither
> >in io_stdio.c, io_unix.c nor io_win32.c
> 
> In PIO_open the ParrotIO object never gets created if there is
> an error condition.

But PIO_open returns a valid IO-PMC which just has a NULL in its data
segment. Maybe it should return PMCNULL if the open fails.

BTW: None of the PIO_* functions check if the incoming PMC is really a IO-PMC.
Maybe its a good idea to add glib-like return_if_fail like assertion
in the beginning of the functions. This reduces the speed but makes
debugging easier. Toughts?

> PIO_eof() returns true if the PMC has a null IO object or if
> the PIO_F_EOF flag is set.
> 
> >Is the "io == NULL" testing prohibited in Parrot embedding system?
> >
> >0x4c56
> 
> Currently it isn't prohibitied. That is the only way to detect an error
> from PIO_open* at this time.

No, even that is wrong. PIO_open returns a PMC with NULL data.
So the test would be PMC_data(io) == NULL, but I think the better idea
is to return PMCNULL.

> If someone convinces me that it is better to return a ParrotIO object
> with error flags set rather than skip creating it, I might consider it.

No, I think we need to rethink the wrapping technology (which I
introduced). Something like:
struct parrot_io_t {
  PObj pobj;
  UINTVAL flags;
  PIOHANDLE fd;
  ...
};
But this needs to allocate garbage-collected memory of 
sizeof(struct parrot_io_t) instead of sizeof(PMC). I don't know if
something like that is already possible. Furthermore there are issues
with morph: You simply just can't morph another object to an IO
without reallocation.

> It is probably more likely that we simply need documentation.

Sure, documentation is missing.
boe
-- 
Juergen Boemmels                        [EMAIL PROTECTED]
Fachbereich Physik                      Tel: ++49-(0)631-205-2817
Universitaet Kaiserslautern             Fax: ++49-(0)631-205-3906
PGP Key fingerprint = 9F 56 54 3D 45 C1 32 6F  23 F6 C7 2F 85 93 DD 47

Reply via email to