reflection stack as an object
play

Reflection: Stack as an Object Damien Cassou, Stphane Ducasse and - PowerPoint PPT Presentation

Reflection: Stack as an Object Damien Cassou, Stphane Ducasse and Luc Fabresse W7S06 http://www.pharo.org Just to Reveal a Bit of It To let you know that it exists On demand the stack can be turned into an object We can walk but also


  1. Reflection: Stack as an Object Damien Cassou, Stéphane Ducasse and Luc Fabresse W7S06 http://www.pharo.org

  2. Just to Reveal a Bit of It To let you know that it exists � On demand the stack can be turned into an object � We can walk but also modify it W7S06 2 / 13

  3. Coding in the Debugger � When a method is not found, we may end up with a debugger � In the debugger, we can ask for the creation of a method on the fly � The system compiles on the spot a special method � Then it reexecutes the method � It raises a shouldBeImplemented exception � Then you can edit the method in the debugger � Then proceed and the program continues to run W7S06 3 / 13

  4. Operation Supporting Coding in the Debugger � On the fly method definition � Stack navigation / manipulation W7S06 4 / 13

  5. Stack Frame as an Object � Execution stack can be turned into a live object � By default the stack is not an object ◦ Can be reified on demand � Support exception definitions from within the language � Basis for continuations and web serving W7S06 5 / 13

  6. thisContext � thisContext is one of the three pseudovariables with self and super � Returns an object that represents the method activation � Can walk and change the stack � Put self halt in the code to see it and walk W7S06 6 / 13

  7. Example: Better Deprecated Message We declare deprecation A >> foo self deprecated: 'Use bar.' on: '31/12/2015' in: 'Pharo50'. self bar should print: ’Message foo is deprecated in Pharo50. Use bar’ W7S06 7 / 13

  8. Example: Better Deprecated Message deprecated: anExplanationString on: date in: version "Warn that the sending method has been deprecated" (Deprecation method: thisContext sender method explanation: anExplanationString on: date in: version) signal thisContext sender method returns compiled method A>>#foo W7S06 8 / 13

  9. Example: Conditional Halt and Test � How to halt a method that is heavily used? � How to stop execution only from a given execution flow? foo ... Halt if: #testSetInitialized ... Only halt if executed from testSetInitialized W7S06 9 / 13

  10. if: Implementation Halt class >> if: condition "This is the typical message to use for inserting breakpoints during debugging. The argument can be one of the following: − a block: if the Block has one arg, the calling object is bound to that. − an expression − a selector: Halt if found in the call chain" condition isSymbol ifTrue: [ ^ self haltIfCallChainContains: condition ]. condition isBlock ifTrue: [ ^ self haltIfBlockWithCallingObject: condition]. condition ifTrue: [self signal]. W7S06 10 / 13

  11. How if: is implemented? Halt class >> haltIfCallChainContains: aSelector | cntxt | cntxt := thisContext. [ cntxt sender isNil ] whileFalse: [ cntxt := cntxt sender. (cntxt selector = aSelector) ifTrue: [ self signal ] ]. W7S06 11 / 13

  12. Foundation for Innovation � Continuations � Seaside: Powerful dynamic web framework for dynamic web applications ◦ http://www.seaside.st ◦ http://book.seaside.st W7S06 12 / 13

  13. A course by and in collaboration with Inria 2016 Except where otherwise noted, this work is licensed under CC BY-NC-ND 3.0 France https://creativecommons.org/licenses/by-nc-nd/3.0/fr/

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend