55 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Factor
		
	
	
| USING: help.markup help.syntax kernel generic
 | |
| math hashtables quotations classes continuations ;
 | |
| IN: tools.interpreter
 | |
| 
 | |
| ARTICLE: "meta-interpreter" "Meta-circular interpreter"
 | |
| "The meta-circular interpreter is used to implement the walker tool in the UI. If you are simply interested in single stepping through a piece of code, use the " { $link "ui-walker" } "."
 | |
| $nl
 | |
| "On the other hand, if you want to implement a similar tool yourself, then you can use the words described in this section."
 | |
| $nl
 | |
| "Meta-circular interpreter words are found in the " { $vocab-link "tools.interpreter" } " vocabulary."
 | |
| $nl
 | |
| "Breakpoints can be inserted in user code:"
 | |
| { $subsection break }
 | |
| "Breakpoints invoke a hook:"
 | |
| { $subsection break-hook }
 | |
| "Single stepping with the meta-circular interpreter:"
 | |
| { $subsection step }
 | |
| { $subsection step-into }
 | |
| { $subsection step-out }
 | |
| { $subsection step-all } ;
 | |
| 
 | |
| ABOUT: "meta-interpreter"
 | |
| 
 | |
| HELP: interpreter
 | |
| { $class-description "An interpreter instance." } ;
 | |
| 
 | |
| HELP: step
 | |
| { $values { "interpreter" interpreter } }
 | |
| { $description "Evaluates the object in the single stepper using Factor evaluation semantics:"
 | |
|     { $list
 | |
|         { "If the object is a " { $link wrapper } ", then the wrapped object is pushed on the single stepper's data stack" }
 | |
|         { "If the object is a word, then the word is executed in the single stepper's continuation atomically" }
 | |
|         { "Otherwise, the object is pushed on the single stepper's data stack" }
 | |
|     }
 | |
| } ;
 | |
| 
 | |
| HELP: step-into
 | |
| { $values { "interpreter" interpreter } }
 | |
| { $description "Evaluates the object in the single stepper using Factor evaluation semantics:"
 | |
|     { $list
 | |
|         { "If the object is a " { $link wrapper } ", then the wrapped object is pushed on the single stepper's data stack" }
 | |
|         { "If the object is a compound word, then the single stepper enters the word definition" }
 | |
|         { "If the object is a primitive word or a word with special single stepper behavior, it is executed in the single stepper's continuation atomically" }
 | |
|         { "Otherwise, the object is pushed on the single stepper's data stack" }
 | |
|     }
 | |
| } ;
 | |
| 
 | |
| HELP: step-out
 | |
| { $values { "interpreter" interpreter } }
 | |
| { $description "Evaluates the remainder of the current quotation in the single stepper." } ;
 | |
| 
 | |
| HELP: step-all
 | |
| { $values { "interpreter" interpreter } }
 | |
| { $description "Executes the remainder of the single stepper's continuation. This effectively ends single stepping unless the continuation invokes " { $link break } " at a later point in time." } ;
 |