GnuSmalltalkUsersGuide:BaseChapter 012
- BlockContext
BlockContext
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: ContextPart
범주: 언어-구현
- 나의 인스턴스들은 실행 스몰토크 블록, 즉 자신이 선언된 환경으로 접근성을 가진 실행 가능 코드의 일부를 표현하고, 매개변수를 취하며, 현재 클래스 외부에서 메서드에 의해 실행되도록 생성된 BlockClosure 객체로부터 발생한다. 블록 컨텍스트는 closure의 값을 계산하기 위해 전송된 메시지에 의해 생성된다. 검사 또는 디버깅에 사용 가능한 메서드 일부와 스택을 제공하기도 한다.
BlockContext: 접근하기
caller
수신자를 호출한 컨텍스트를 응답하라.
home
수신자가 참조하는 MethodContext 를 응답하거나, optimized away일 경우 nil을 응답하라.
isBlock
수신자가 블록 컨텍스트인지 여부를 응답하라.
isDisabled
리턴을 실행 시 건너뛰는 컨텍스트는 항상 MethodContexts이므로 false를 응답하라. Non-local 리턴이 이루어질 때마다 체인에서 BlockContexts가 제거되고, #ensure: 블록으로부터 non-local 리턴이 이루어지지 않는 경우 MethodContexts는 그 자리에 유지될 필요가 있다.
isEnvironment
해석기가 시작되기 전에도 그에 유효한 실행 환경을 생성하기 위해 GST는 선택자가 nil이고 현재 실행 환경에 대한 마커(marker)로서 사용 가능한 가상 컨텍스트(fake context)를 생성한다. 수신자가 그러한 유형의 컨텍스트인지 여부를 응답하라 (그러한 컨텍스트는 항상 MethodContexts에 해당하므로 항시 false가 될 것이다).
isUnwind
non-local 리턴(블록의 enclosing 메서드로부터 리턴, 또는 ContextPart의 #continue: 메서드로의 호출) 이후에도 컨텍스트가 실행을 계속해야 하는지 응답하라.
nthOuterContext: n
수신자에 대한 n 번째 외부 블록/메서드 컨텍스트를 응답하라.
outerContext
수신자에 대한 외부 블록/메서드 컨텍스트를 응답하라.
BlockContext: 디버깅하기
isInternalExceptionHandlingContext
실행추적(backtrace)을 표현할 때 수신자는 사용자에게 숨겨야 하는 컨텍스트인지 응답하라. 블록은 이러한 컨텍스트가 절대 될 수 없지만 나머지 체인도 확인하라.
BlockContext: 인쇄하기
printOn: aStream
수신자에 대한 표현을 aStream 상에 인쇄하라.