Академический Документы
Профессиональный Документы
Культура Документы
method call
How are parameters passed?
Looks simple enough…
We will see seven techniques
b: 4 y: 4
return address z: ?
newHead: 3
c: x:
When alter
return address return address
is starting
previous previous
activation record activation record
newHead: 3
c: null x:
When alter
return address return address
is finishing
previous previous
activation record activation record
b: 4 y: 4
c: ? z: ?
b: 4 y: 4
c: 7 z: ?
b: 4 y: 4
c: 7 z: 7
a: 4 x: 3
b: 3 return address
previous
return address
activation record
When plus previous
is starting activation record
a: 4 x: 3
b: 7 return address
previous
return address
activation record
When plus is previous
ready to return activation record
a: 4 x: 7
b: 7 return address
previous
return address
activation record
When plus previous
has returned activation record
a: 4 x: 3
b: return address
previous
return address
When plus activation record
is starting previous
activation record
a: 4 x: 7
b: return address
previous
return address
When plus activation record
has made the previous
activation record
assignment
A[i]=A[j]+A[k];
expanded a = ((b)<(c)?(b):(c))
source:
expanded a = ((b++)<(c++)?(b++):(c++))
source:
int main() {
expanded int temp=1, b=2;
source: {int temp= temp ; temp = b ; b =temp;} ;
printf("%d, %d\n", temp, b);
}
a: i: 3
b: return address
When f is return address
previous
activation record
starting
previous
result: ?
activation record
a: i: 3
b: return address
When f is return address
previous
activation record
starting
previous
result: ?
activation record
boolean g() {
while (true) { Here, andand is short-circuiting,
} like ML’s andalso and Java’s
return true; && operators.
} The method f will terminate.