Lecture 9: Procedures & Functions CS 540 George Mason University.

Slides:



Advertisements
Similar presentations
The University of Adelaide, School of Computer Science
Advertisements

CSI 3120, Implementing subprograms, page 1 Implementing subprograms The environment in block-structured languages The structure of the activation stack.
Lecture 6: MIPS Instruction Set Today’s topic –Control instructions –Procedure call/return 1.
CPS3340 COMPUTER ARCHITECTURE Fall Semester, /17/2013 Lecture 12: Procedures Instructor: Ashraf Yaseen DEPARTMENT OF MATH & COMPUTER SCIENCE CENTRAL.
Implementing Subprograms
(1) ICS 313: Programming Language Theory Chapter 10: Implementing Subprograms.
1 Storage Registers vs. memory Access to registers is much faster than access to memory Goal: store as much data as possible in registers Limitations/considerations:
1 Chapter 7: Runtime Environments. int * larger (int a, int b) { if (a > b) return &a; //wrong else return &b; //wrong } int * larger (int *a, int *b)
1 Handling nested procedures Method 1 : static (access) links –Reference to the frame of the lexically enclosing procedure –Static chains of such links.
The Procedure Abstraction Part III: Allocating Storage & Establishing Addressability Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all.
ISBN Chapter 10 Implementing Subprograms.
Runtime Environments Source language issues Storage organization
Honors Compilers Addressing of Local Variables Mar 19 th, 2002.
1 Pertemuan 20 Run-Time Environment Matakuliah: T0174 / Teknik Kompilasi Tahun: 2005 Versi: 1/6.
Run time vs. Compile time
Semantics of Calls and Returns
Chapter 9: Subprogram Control
1 Run time vs. Compile time The compiler must generate code to handle issues that arise at run time Representation of various data types Procedure linkage.
Presented by Dr Ioanna Dionysiou
Chapter 7: Runtime Environment –Run time memory organization. We need to use memory to store: –code –static data (global variables) –dynamic data objects.
Runtime Environments What is in the memory? Runtime Environment2 Outline Memory organization during program execution Static runtime environments.
13/02/2009CA&O Lecture 04 by Engr. Umbreen Sabir Computer Architecture & Organization Instructions: Language of Computer Engr. Umbreen Sabir Computer Engineering.
Runtime Environments Compiler Construction Chapter 7.
Programming Language Principles Lecture 24 Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Subroutines.
Compiler Construction
Chapter 10 Implementing Subprograms. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 10 Topics The General Semantics of Calls and Returns.
CSc 453 Runtime Environments Saumya Debray The University of Arizona Tucson.
1 Copyright © 1998 by Addison Wesley Longman, Inc. Chapter 9 Def: The subprogram call and return operations of a language are together called its subprogram.
CPSC 388 – Compiler Design and Construction Runtime Environments.
1 Run-Time Environments. 2 Procedure Activation and Lifetime A procedure is activated when called The lifetime of an activation of a procedure is the.
Lecture 18: 11/5/2002CS170 Fall CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University.
COP4020 Programming Languages Subroutines and Parameter Passing Prof. Xin Yuan.
Runtime Environments. Support of Execution  Activation Tree  Control Stack  Scope  Binding of Names –Data object (values in storage) –Environment.
Activation Records (in Tiger) CS 471 October 24, 2007.
Lecture 19: 11/7/2002CS170 Fall CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University.
CSC3315 (Spring 2008)1 CSC 3315 Subprograms Hamid Harroud School of Science and Engineering, Akhawayn University
1 CIS 461 Compiler Design and Construction Winter 2012 Lecture-Module #16 slides derived from Tevfik Bultan, Keith Cooper, and Linda Torczon.
ISBN Chapter 10 Implementing Subprograms.
Implementing Subprograms What actions must take place when subprograms are called and when they terminate? –calling a subprogram has several associated.
BİL 744 Derleyici Gerçekleştirimi (Compiler Design)1 Run-Time Environments How do we allocate the space for the generated target code and the data object.
國立台灣大學 資訊工程學系 薛智文 98 Spring Run Time Environments (textbook ch# 7.1–7.3 )
CSC 8505 Compiler Construction Runtime Environments.
1 Chapter 10 © 2002 by Addison Wesley Longman, Inc The General Semantics of Calls and Returns - Def: The subprogram call and return operations of.
7. Runtime Environments Zhang Zhizheng
1 Run-Time Environments Chapter 7 COP5621 Compiler Construction Copyright Robert van Engelen, Florida State University, 2005.
Chapter 10 Implementing Subprograms. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 10 Topics The General Semantics of Calls and Returns.
Implementing Subprograms
Subprograms - implementation. Calling a subprogram  transferring control to a subprogram: save conditions in calling program pass parameters allocate.
1 Compiler Construction Run-time Environments,. 2 Run-Time Environments (Chapter 7) Continued: Access to No-local Names.
LECTURE 19 Subroutines and Parameter Passing. ABSTRACTION Recall: Abstraction is the process by which we can hide larger or more complex code fragments.
Runtime Environments Chapter 7. Support of Execution  Activation Tree  Control Stack  Scope  Binding of Names –Data object (values in storage) –Environment.
Run-Time Environments Presented By: Seema Gupta 09MCA102.
Run-Time Environments Chapter 7
Implementing Subprograms Chapter 10
COMPILERS Activation Records
Implementing Subprograms
Introduction to Compilers Tim Teitelbaum
Run-Time Environments
Chapter 10: Implementing Subprograms Sangho Ha
The University of Adelaide, School of Computer Science
Run-Time Environments
Topic 3-a Calling Convention 1/10/2019.
Activation records Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Section
UNIT V Run Time Environments.
Run Time Environments 薛智文
Runtime Environments What is in the memory?.
Where is all the knowledge we lost with information? T. S. Eliot
Activation records Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Section
Chapter 10 Def: The subprogram call and return operations of
Presentation transcript:

Lecture 9: Procedures & Functions CS 540 George Mason University

CS 540 Spring 2009 GMU2 Procedures/Functions Control Abstraction –call/return semantics, parameters, recursion Controlled Namespace –Scope (local/non-local), binding, addressing External Interface –separate compilation, libraries (not dealing with here)

CS 540 Spring 2009 GMU3 Procedures as Control Abstractions Relationship between caller and callee is asymmetric Control flow (call and return) Data flow (call and return): parameters and return values Recursion Variable addressing The way this data/control flow is achieved is strictly defined and the given rules must be adhered to by the compiler

CS 540 Spring 2009 GMU4 Data Structure: Call Graph A call graph is a directed multi-graph where: the nodes are the procedures of the program and the edges represent calls between these procedures. Used in optimization phase. Acyclic  no recursion in the program Can be computed statically.

CS 540 Spring 2009 GMU5 Example var a: array [0.. 10] of integer; procedure readarray var i: integer begin … a[i] … end function partition(y,z: integer): integer var i,j,x,v: integer begin … end procedure quicksort(m,n: integer) var i: integer begin i := partition(m,n); quicksort(m,i-1); quicksort(i+1,n) end procedure main begin readarray(); quicksort(1,9); end Main quicksort readarray partition

CS 540 Spring 2009 GMU6 Data Structure: Call Tree A call tree is a tree where: –the nodes are the procedure activations of the program and –the edges represent calls between these procedure activations. Dynamic – typically different every time the program is run

CS 540 Spring 2009 GMU7 Run-time Control Flow Call Tree - cannot be computed statically main r()q (1,9) p (1,9) q(1,3) q (5,9) p (1,3) q(1,0) q (2,3)p (5,9) q(5,5) q (7,9) p (2,3) q(2,1) q (3,3)p (7,9) q(7,7) q (9,9)

CS 540 Spring 2009 GMU8 Run-time Control Flow Paths in the call tree from root to some node represent a sequence of active calls at runtime main r()q (1,9) p (1,9) q(1,3) q (5,9) p (1,3) q(1,0) q (2,3)p (5,9) q(5,5) q (7,9) p (2,3) q(2,1) q (3,3)p (7,9) q(7,7) q (9,9)

CS 540 Spring 2009 GMU9 Static Allocation Historically, the first approach to solving the run- time control flow problem (Fortran) All space allocated at compile time  No recursion –Code area – machine instructions for each procedure –Static area – single data area allocated for each procedure. –local vars, parameters, return value, saved registers return address for each procedure.

CS 540 Spring 2009 GMU10 Static Allocation Code area Data area for procedure A Data area for procedure B Code generated for A Code generated for B return addr Local data, parameters, return value, registers for A Local data, parameters, return value, registers for B

CS 540 Spring 2009 GMU11 Call/Return processing in Static Allocation When A calls B: –in A: evaluate and save actual parameters, save any registers and status data needed, save RA, finally update the program counter (PC) to B’s code –In B: deal with parameters and RA (if needed) When the call returns –in B: save return value, update PC to value in RA –in A: get return value, restore any saved registers or status data Save options: data areas (A or B), registers

CS 540 Spring 2009 GMU12 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: … return PC Call tree: A Local data, parameters, return value, registers for A Local data, parameters, return value, registers for B

CS 540 Spring 2009 GMU13 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: … return L1 Local data for A Local data for B PC Call tree: A B

CS 540 Spring 2009 GMU14 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: … return L1 Local data for A Local data for B PC Call tree: A

CS 540 Spring 2009 GMU15 Managing Control Flow: Spim 1.Set aside extra space for return address and local info for each function. FN_RA:.word0 FN_Regs:.space48 # save 8 $t + 4 $a registers FN_Params:.word …

CS 540 Spring 2009 GMU16 Managing Control Flow: Spim 2.Add code at the point of the call: sw $t0, FN1_Regs sw $t1, FN1_Regs+4 … move $a0, $t … jal function lw $t0, FN1_Regs lw $t1, FN1_Regs +4 … move $t x,$v0 Save and restore local registers in use Pass in parameters and get the return value jal – save the address of the next statement in $ra and then jump to the given label

CS 540 Spring 2009 GMU17 Managing Control Flow: Spim 3. Add code in the called function –Prologue: sw $ra, FN2_RA sw $a0, FN2_Param1 … –Epilogue move $v0,$t y lw $t x, FN2_RA jr $t x If there is a return value… jal put return address in $ra

CS 540 Spring 2009 GMU18 result := f(a,bb);.data main_Regs:.word 0,0,0,0,0,0,0,0 main_RA:.word0.text lw $t0,a move $a0,$t0 lw $t0,bb move $a1,$t0 sw $t0,main_Regs sw $t1,main_Regs+4 sw $t2,main_Regs+8 … jal label_f lw $t0,main_Regs lw $t1,main_Regs+4 lw $t2,main_Regs+8 move $t0,$v0 sw $t0,result

CS 540 Spring 2009 GMU19 int f(int x, int y) {… return max; }.data f_RA:.word 0 # return addr.text label_f: sw $ra,F_RA.data x:.word 0 # param 1.text sw $a0,x.data y:.word 0 # param 2.text sw $a1,y body of f lw $v0,max # return val lw $t0,f_RA jr $t0

CS 540 Spring 2009 GMU20 Runtime Addressing in Static Allocation Variable addresses hard-coded, usually as offset from data area where variable is declared. –addr(x) = start of x's local scope + x's offset In Spim, we are going to save the local variable using a label and when needed, we can use lw to get the value (or la to get the address).

CS 540 Spring 2009 GMU21 Static Allocation: Recursion? Code area Activation for procedure A Activation for procedure B A: call B return addr Local data for A Local data for B B: call B L2: What happens???

CS 540 Spring 2009 GMU22 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: call A L2: return Local data for A Local data for B PC Call tree: A

CS 540 Spring 2009 GMU23 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: call B L2: return Local data for A Local data for B PC L1 Call tree: A B

CS 540 Spring 2009 GMU24 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: call B L2: return Local data for A Local data for B PC L2 Call tree: A B

CS 540 Spring 2009 GMU25 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: call B L2: return Local data for A Local data for B PC L2 Call tree: A B

CS 540 Spring 2009 GMU26 Static Allocation Code area Activation for procedure A Activation for procedure B A: call B L1: B: call B L2: return Local data for A Local data for B PC L2 Call tree: A B We’ve lost the L1 label so we can’t get back to A

CS 540 Spring 2009 GMU27 Stack Allocation Need a different approach to handle recursion. Code area – machine code for procedures Static data – often not associated with procedures Stack – runtime information –Activation records – allocated at call time onto a runtime stack. Holds return addresses, local information –Dynamic – can grow and shrink

CS 540 Spring 2009 GMU28 Process Address Space Each process has its own address space: –Text section (text segment) contains the executable code –Data section (data segment) contains the global variables –Stack contains temporary data (local variables, return addresses..) –Heap, which contains memory that is dynamically allocated at run-time. text data heap stack

CS 540 Spring 2009 GMU29 Activation Records (frame) Information needed by a single instance of a procedure. Local data –Parameter storage –Return value storage Saved registers Control links for stack Return address

CS 540 Spring 2009 GMU30 Activation Records Different procedures/functions will have different size activation records. Activation record size can be determined at compile time. At call time, we push a new activation on the runtime stack. At call termination time, we pop the activation off the stack.

CS 540 Spring 2009 GMU31 Stack Allocation - 1 Call Tree Stack (growing downward) Main readarray Main a: array readarray i: integer

CS 540 Spring 2009 GMU32 Stack Allocation - 2 Call Tree Stack (growing downward) Main readarray Main a: array quick(1,9) i: integer quick(1,9)

CS 540 Spring 2009 GMU33 Stack Allocation - 3 Call Tree Stack (growing downward) Main readarray Main a: array quick(1,9) i: integer quick(1,9) quick(1,3) quick(1,0) p(1,9) quick(1,3) i: integer quick(1,0) i: integer

CS 540 Spring 2009 GMU34 Call Processing: Caller Create new (callee) activation record on stack. Evaluate actual parameters and place them on stack (or register). Save registers and other status data Store a return address, dynamic link (= current stack pointer), and static link information into callee activation then Make stack pointer (SP) point at new activation. Update the program counter (PC) to the code area for the called procedure. Added at the point of the call

CS 540 Spring 2009 GMU35 Call Processing: Callee Initialize local data, including moving parameters (if needed) Save return address if needed Stack maintenance Begin local execution Added at the start of the function

CS 540 Spring 2009 GMU36 Return Processing: Callee Place return value (if any) in activation. Stack maintenance Restore PC (from saved RA). Added at the ‘return’ point(s) of the function

CS 540 Spring 2009 GMU37 Return Processing: Caller Restore the stack pointer Restore registers and status Copy the return value (if any) from activation Continue local execution Added after the point of the call

CS 540 Spring 2009 GMU38 OffsetDataSize 0Return address4 4old frame ptr4 8$t registers32 40$a registers16 56local vars? … Spim Example: Activation

CS 540 Spring 2009 GMU39 Spim Example Assume a function f with two integer parameters named x and y that are passed by value. f returns a single integer. Also in function f are two local variables a and b. Function f's prolog : sw $ra,0($sp) # save return address sw $a0,56($sp) # parameter x sw $a1,60($sp) # parameter y NOTE: local variables a and b can be stored at offsets 64 and 68 respectively. Function f's epilog: move $v0,$t1 lw $t1,0($sp) jr $t1

CS 540 Spring 2009 GMU40 At f(a,b) # saving registers sw $t0,8($sp) sw $t1,12($sp)... sw $a0,40($sp) … # get actual parameters lw $a0,a_global lw $a1,b_global #stack maintenance sw $fp,4($sp) subu $sp,$sp,104 addiu $fp,$sp,100 # set frame ptr jal outputnums move $t0,$v0 # grab return value addiu $sp,$sp,104 # reset sp lw $fp,4($sp) # reset frame pointer lw $t0,8($sp) # restoring registers lw $t1,12($sp)... lw $a0,40($sp) …

CS 540 Spring 2009 GMU41 Runtime Addressing Given a variable reference in the code, how can we find the correct instance of that variable? Things are trickier – variables can live on the stack. Tied to issues of scope

CS 540 Spring 2009 GMU42 Types of Scoping Static – scope of a variable determined from the source code. Scope A is enclosed in scope B if A's source code is nested inside B's source code. Dynamic – current call tree determines the relevant declaration of a variable use.

CS 540 Spring 2009 GMU43 Static Scoping: Most Closely Nested Rule The scope of a particular declaration is given by the most closely nested rule The scope of a variable declared in block B, includes B. If x is not declared in block B, then an occurrence of x in B is in the scope of a declaration of x in some enclosing block A, such that A has a declaration of x and A is more closely nested around B than any other block with a declaration of x.

CS 540 Spring 2009 GMU44 Example Program Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main

CS 540 Spring 2009 GMU45 Example Program: Static Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main What is visible at this point (globally)?

CS 540 Spring 2009 GMU46 Example Program: Static Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main What is visible at this point (sub1)?

CS 540 Spring 2009 GMU47 Example Program: Static Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main What is visible at this point (sub3)?

CS 540 Spring 2009 GMU48 Example Program: Static Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main What is visible at this point (sub2)?

CS 540 Spring 2009 GMU49 Variables from Example ProcedureEnclosingLocal:addr = offset Non-local: addr =(scope,offset) main-a:0,b:1,c:2- sub1maina:0,d:1b:(main,1),c:(main,2) sub2sub1c:0,d:1b:(main,1) a:(sub1,0) sub3sub1a:0b:(main,1),c:(main,2) d:(sub1,1)

CS 540 Spring 2009 GMU50 Control Links in Stack Allocation Dynamic – points to caller’s activation (old frame pointer) Static (access) link – points to enclosing scope

CS 540 Spring 2009 GMU51 Static Chain Maintenance How to set the static link? –Let P sd be the static_depth of P, and Q sd be the static_depth of Q –Assume Q calls P –There are three possible cases: 1. Q sd = P sd 2. Q sd < P sd 3. Q sd > P sd

CS 540 Spring 2009 GMU52 Static Chain Maintenance: Q calls P Q sd = P sd - They are at same static depth P’s static link should be the same as Q’s since they must occur in same enclosing scope – Q copies its link to P Q’s ar P’s ar

CS 540 Spring 2009 GMU53 Static Chain Maintenance: Q calls P Q sd < P sd - P must be enclosed directly in Q P’s static link should point at Q’s activation Q’s ar P’s ar

CS 540 Spring 2009 GMU54 Static Chain Maintenance: Q calls P Q sd > P sd - Q is n levels down in the nesting – must follow Q’s static chain n levels and copy that pointer Q’s ar P’s ar … … Suppose n is 2 P R Q S R’s ar P’s ar S’s ar

CS 540 Spring 2009 GMU55 Runtime Addressing in Stack Allocation At runtime, we can’t know where the relevant activation record holding the variable exists on the stack Use static (access) links to enable quick location –addr(x) = # static links + x's offset –Local: (0,offset) –Immediately enclosing scope: (1,offset)

CS 540 Spring 2009 GMU56 Example Program Program main; procedure sub1(a: int,b:int); procedure sub2(c: int); if c > 0 call sub2(c-1) procedure sub3() body of sub3 call sub3(b); call sub2(a); call sub1(3,4);

CS 540 Spring 2009 GMU57 Example Program at runtime 1 Code area main: call sub1(3,4) s1: sub1: call sub3(b) s2:call sub2(a) s3: sub2: call sub2(c-1) s4: sub3: PC stack

CS 540 Spring 2009 GMU58 Example Program at runtime 2 Code area main: call sub1(3,4) s1: sub1: call sub3(b) s2:call sub2(a) s3: sub2: call sub2(c-1) s4: sub3: PC stack 3 a b RA DP SP 4 s1 sub1

CS 540 Spring 2009 GMU59 Example Program at runtime 3 Code area main: call sub1(3,4) s1: sub1: call sub3(b) s2:call sub2(a) s3: sub2: call sub2(c-1) s4: sub3: PCstack 3 a b RA DP SP 4 s1 main RA DP SP s2 sub1 main sub1 sub3

CS 540 Spring 2009 GMU60 Example Program at runtime 4 Code area main: call sub1(3,4) s1: sub1: call sub3(b) s2:call sub2(a) s3: sub2: call sub2(c-1) s4: sub3: PC stack 3 a b RA DP SP 4 s1 main RA DP SP c s3 sub1 main 3 sub1 sub2

CS 540 Spring 2009 GMU61 Example Program at runtime 5 Code area main: call sub1(3,4) s1: sub1: call sub3(b) s2:call sub2(a) s3: sub2: call sub2(c-1) s4: sub3: PC stack 3 a b RA DP SP 4 s1 RA DP SP c s3 3 RA DP SP c 2 s4 sub1 sub2

CS 540 Spring 2009 GMU62 Display Alternate representation for access information. The current static chain kept in an array – entry n points to the activation record at level n in the static chain. Q’s ari … … R’s ari P’s ari S’s ari Q’s ari … … R’s ari P’s ari S’s ari

CS 540 Spring 2009 GMU63 Display Maintenance For Q calls P … Q sd < P sd - P must be enclosed directly in Q If entry n points at Q, entry n+1 points at P Q’s ar.... P’s ar.... becomes

CS 540 Spring 2009 GMU64 Display Maintenance For Q calls P … Q sd = P sd - They are at same static depth Update entry n to point to P What happens when P ends? Must save the old entry n in P’s ar to make things work properly. Q’s ar.... P’s ar.... becomes

CS 540 Spring 2009 GMU65 Display Maintenance Q sd > P sd - Q is n levels down in the nesting – update that pointer n levels down Q’s ari … … R’s ari P’s ari S’s ari Q’s ari … … R’s ari P’s ari S’s ari P’s ari

CS 540 Spring 2009 GMU66 Display Advantages: faster addressing Disadvantages: additional data structure to store and maintain.

CS 540 Spring 2009 GMU67 Parameter Passing Various approaches to passing data into and out of a procedure via parameters 1.Call-by-value – data is copied at the callee into activation and any item changes do not affect values in the caller. 2.Call-by-reference – pointer to data is placed in the callee activation and any changes made by the callee are indirect references to the actual value in the caller. 3.Call-by-value-result (copy-restore) – hybrid of call-by- value and call-by-reference. Data copied at the callee. During the call, changes do not affect the actual parameter. After the call, the actual value is updated. 4.Call-by-name – the actual parameter is in-line substituted into the called procedure. This means it is not evaluated until it is used.

CS 540 Spring 2009 GMU68 Call-by-value var a,b : integer procedure s (x,y : integer); var t: integer; begin t := x; x := y; y := t; end; a := 1; b := 2; s (a,b); write ('a = ',a); write ('b = ',b); end. ab xy x and y are integers initialized to a’s and b’s values 2.At end of s, x = 2 and y = 1 3.No change to a and b on return 12

CS 540 Spring 2009 GMU69 Call-by-reference var a,b : integer procedure s (x,y : integer); var t: integer; begin t := x; x := y; y := t; end; begin a := 1; b := 2; s (a,b); write ('a = ',a); write ('b = ',b); end. begin ab xy Pointers x and y are initialized to a’s and b’s addresses 2.At end of s, x (and a) = 2 and y (and b) = 1 21

CS 540 Spring 2009 GMU70 Call-by-value/result var a,b : integer procedure s (x,y : integer); var t: integer; begin t := x; x := y; y := t; end; begin a := 1; b := 2; s (a,b); write ('a = ',a); write ('b = ',b); end. ab xy x and y are integers initialized to a’s and b’s values 2.At end of s, x = 2 and y = 1 3.At return, a is given x’s value and b is give y’s value 12 21

CS 540 Spring 2009 GMU71 Call-by-name var a,b : integer procedure s (x,y : integer); var t: integer; begin t := x; x := y; y := t; end; begin a := 1; b := 2; s (a,b); write ('a = ',a); write ('b = ',b); end. begin ab1 221 procedure s var t: integer; begin t := a; a := b; b := t; end;

CS 540 Spring 2009 GMU72 Call-by-value-result vs. Call-by-reference var a: integer procedure foo(x: integer); begin a := a + 1; x := x + 1; end; begin a := 1; foo(a); write ('a = ',a); end. Value-resultreference write(a)23