incall ADDRESS,NARGS,bump=>STBUMP,point=>OP
"incall" calls a routine that does not need to be linked with the current module. No SYMREF is generated for the routine being called.
incall func,10
#generates
eppr p.entr,func
ldx x.bump,.highest(STACK)-.lowest(STACK),du
eppr p.ret,*+3,$
tra .call
zero nargs
{ #start of code block
last: .set .ic(S_ARG1) #argument area
.origin S_ARG1+10 #end of args
.origin last
}
In this example, "last" is a variable local to "incall". The two ".origin" statements in the code block move to the end of the argument area and back again to make sure that the stack's highwater mark takes into account the size of the arguments.
Copyright © 1996, Thinkage Ltd.