| Yes and No.
I presume what you are trying to REALLY do is put the value of a global
symbol in the parameter list. What you describe in .0 is a hack to do this
in (FORTRAN?, or some made up language?)
What you are really asking for then is...
external PRODUCT$ABC
pushl other-args
pushab G^PRODUCT$ABC
calls #n, ROUTINE
Yes, you can get this affect in VAX Ada, but not at all using the mechanism
you describe. Using your proposed mechanism a copy of the 32 bits starting
at PRODUCT$ABC would be moved to a stack temporary, and the address of this
stack temporary passed in the parameter list - not at all the affect you
want.
The way you would do it is...
with SYSTEM;
package MUMBLE is
type UNKNOWN is limited private;
PRODUCT_ABC : UNKNOWN;
pragma IMPORT_OBJECT(PRODUCT_ABC, external=>"PRODUCT$ABC");
procedure ROUTINE(TABLE : SYSTEM.ADDRESS, ...);
pragma INTERFACE(PRODUCT_ABC, ROUTINE);
pragma IMPORT_PROCEDURE(ROUTINE,
mechanism=>(VALUE,...));
private
type UNKNOWN is SYSTEM.UNSIGNED_BYTE; -- Who cares!
end;
with MUMBLE, SYSTEM;
procedure ... is
begin
ROUTINE( PRODUCT_ABC'address, ... );
end;
As you can see, Ada is explicitly designed to make hacks like the one you
describe difficult, and to force you to state EXACTLY what you intend in
such cases.
/Bevin
VAX Ada
|
| Bevin,
Thanks for the reply on ADA; that's quick service.
Yes, what we really want is the address of the global symbol in the
parameter list. I think the semi-syntax I suggested is a combination
of how it's actually done in FORTRAN and BASIC. (Please, you FORTRAN
and BASIC users, don't beat me up if I got it wrong.)
All I really need to know is if it's possible, hackishly or not in our
old fashioned and new fashioned languages. I guess I'm not surprised
ADA lets you state exactly what it is you want.
Dan
|
| In response to a kindly worded mail message, I'd like to make a comment to
head off anybody who thinks we might be slighting the interpreted languages.
We're doing this as part of an effort not to slight them. Currently LISP and
APL have trouble calling an announced product, FMS, because of a similar
architectural problem. What we're trying to do is avoid the same problem for
a new product. The interpreted languages would not have exactly the same
functionality as the compiled languages, but they would be able to use
99% of the important part of the product (which they can't do now with FMS).
|