From: Daniel J S. <dan...@ie...> - 2006-05-31 07:15:28
|
Ethan A Merritt wrote: > On Tuesday 30 May 2006 10:04 am, Petr Mikulik wrote: > >>>Subtopic of functions: defined >>>`defined(X)` returns 1 if a variable named X has been defined, otherwise >>>it returns 0. >> >>I also vote for this convention. > > > OK. I found a way to make it work. > Patch uploaded to SourceForge #1497957. > I found one corner case that generates a strange error message > on strange input, but other than that it seems OK. > > Please test. In the code is a redundant a.type = 0; #if (1) /* Flag type a 0 because only the defined/undefined flag means anything */ a.type = 0; if (udv->udv_undef) a.v.int_val = 0; else a.v.int_val = 1; a.type = 0; push(&a); return; #else but conceptually I think it should be solid. The one issue is if somewhere an argument is passed in for which a.type was never set to INTGR CMPLX or STRINGS but neither is it a variable that had gone through PUSHV. Maybe a way to solve that would be to change: /* type_udv() will return 0 rather than type if udv does not exist */ enum DATA_TYPES { INTGR=1, CMPLX #ifdef GP_STRING_VARS , STRING #endif }; to /* type_udv() will return 0 rather than type if udv does not exist */ enum DATA_TYPES { INTGR=1, CMPLX, BOOLVAR #ifdef GP_STRING_VARS , STRING #endif }; then it would be a.type = BOOLVAR and if (a.type == BOOLVAR) push(Ginteger(&a, a.v.int_val)); else push(Ginteger(&a, 0)); [Maybe put an assert() in there to check if ever .type is zero.] Or is that abusing the DATA_TYPES too much? ... I see it is possible to have a function and variable of the same name. I'm OK with that, but this seems a little strange, in that it would bewilder a beginning programmer. :-) gnuplot> cos = 5 gnuplot> print cos(cos) 0.283662185463226 gnuplot> Dan |