| When can a variable be in a register? | |
| How does the compiler record this? | |
| FindEscape – determining escapes | |
| Using escape information | |
| Note – these slides are available on the web |
Consider these
programs…
which variables escape?
| let | |
| function f( x : string ) = | |
| print( x ) | |
| in | |
| f( “hello” ) | |
| end |
If any of your code is shakey……
| Remember that your CLASSPATH contains | ||
| .:$Tiger/java/classes | ||
| When running in your compiler directory | ||
| If your compiler is missing a particular packageName/blah.class | ||
| then it will look for blah.class in $Tiger/java/classes/packageName | ||
| I’ve installed correct versions of all executables in $Tiger/java/classes | ||
| If you know that any of your classes is not ok, or you want to see how a correct version operates, then simply delete the compiled version of the code for the moment | ||
| Copy and compile files as suggested in the e-mail I sent you | ||
| Get Slide 2 up in a browser near you | ||
| Type in the top left program | ||
| And the others if you’ve got time | ||
| Attempt to compile it | ||
| LetExp( | |
| DecList( | |
| FunctionDec(f | |
| FieldList( | |
| x, | |
| string, | |
| false, | |
| FieldList()), | |
| CallExp(print, | |
| ExpList( | |
| VarExp( | |
| SimpleVar(x)) | |
| :NAME(string) | |
| =STRING)) | |
| :VOID, | |
| FunctionDec()) | |
| What do you notice in the output? | ||
| Is it right? | ||
| Try again after deleting the file | ||
| FindEscape/FindEscape.class | ||
| Is that better? | ||
| … is missing some crucial code | |||
| Uses an extra environment to manage ‘escape’ information | |||
| Find out what information is held in the env | |||
| How can this be used to determine the escapees? | |||
| And particularly – when can it be used? | |||
| Add in the necessary management code | |||
| FindEscape is a quick sub-pass over the program, before any scope/type checking | ||
| Work out how the escapes information is used in the rest of the Semant phase? | ||
| Where is it accessed? | ||
| What effect does it have? | ||