GnuSmalltalkUsersGuide:BaseChapter 040

From 흡혈양파의 번역工房
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
ContextPart

ContextPart

네임스페이스 Smalltalk에 정의됨

슈퍼클래스: Object

범주: 언어-구현


나의 인스턴스들은 실행 가능한 코드의 로컬 환경을 나타내는 스몰토크 실행 코드를 표현한다. 그들은 스택을 포함할뿐만 아니라 검사 또는 디버깅에 사용 가능한 메서드를 제공한다.


ContextPart 클래스: 빌드된 ins

thisContext

thisContext 변수의 값을 리턴하라. 변수로 접근 시 내부적으로 호출된다.


ContextPart 클래스: 예외 처리

backtrace

호출자(caller)부터 스택의 bottom까지 실행추적을 Transcript 상에 인쇄하라.

backtraceOn: aStream

호출자부터 스택의 bottom까지 실행추적추적을 aStream상에 인쇄하라.


ContextPart: 접근하기

client

이 컨텍스트의 클라이언트, 즉 이 컨텍스트를 생성한 메시지를 전송한 객체를 응답하라. 수신자가 부모를 갖고 있지 않은 경우 실패한다.

currentFileName

메서드 소스 코드가 위치한 파일명을 응답하라.

environment

해석기가 시작되기 전에 그에 유효한 실행 환경을 실행하기 위해 GST는 선택자가 nil이고 현재 실행 환경을 위한 마커(marker)로 사용 가능한 가상 컨텍스트(fake context)를 생성한다. 해당 메서드는 그 컨텍스트를 응답한다. 프로세스를 위해서는 프로세스 블록 자체를 응답한다.

home

수신자가 참조하는 MethodContext를 응답하라.

initialIP

실행이 현재 컨텍스트에서 시작할 때 명령어 포인터의 값을 응답하라.

ip

수신자 내에서 현재 명령어 포인터를 응답하라.

ip: newIP

수신자에 대한 명령어 포인터를 설정하라.

isBlock

수신자가 블록 컨텍스트인지 응답하라.

isDisabled

리턴을 실행 시 컨텍스트를 건너뛰는지 여부를 응답하라. Non-local 리턴이 실행될 때마다 컨텍스트가 disabled(비활성화됨)로 표시되고 (블록의 enclosing 메서드로부터 리턴되거나, #continue: method of ContextPark를 이용함으로써), #ensure: 이 생성하는 것과 같이 unwind 컨텍스트가 있다. 이후 unwind가 아닌 모든 컨텍스트는 disabled로 표시된다.

isEnvironment

해석기가 시작되기 전에 그에 유효한 실행 환경을 실행하기 위해 GST는 특수 “종료” 메서드를 호출하는 가상 컨텍스트(fake context)를 생성한다. 그러한 컨텍스트는 현재 실행 환경에 대한 마커(marker)로 사용 가능하다. 수신자가 그러한 유형의 컨텍스트인지 응답하라.

isProcess

수신자가 프로세스 컨텍스트, 가령 BlockClosure>>#newProcess 에 의해 생성된 컨텍스트를 표현하는지 응답하라. 그러한 컨텍스트는 부모가 없으나 그 플래그는 VM의 prepareExecutionEnvironment 함수가 생성한 컨텍스트의 플래그와 다르기 때문에 인식이 가능하다.

isUnwind

non-local 리턴 이후에도 컨텍스트가 실행을 계속해야 하는지 응답하라 (블록의 enclosing 메서드로부터 리턴 또는 ContextPart의 #continue: 메서드로의 호출). 그러한 컨텍스트는 #ensure: 에 의해 생성된다.

method

실행 중인 CompiledMethod를 리턴하라.

methodClass

실행 중인 CompiledMethod가 정의된 클래스를 리턴하라.

numArgs

수신자에게 전달되는 인자의 수를 응답하라.

numTemps

수신자가 사용하는 임시변수의 수를 응답하라.

parentContext

수신자를 호출한 컨텍스트를 응답하라.

parentContext: aContext

수신자가 리턴하게 될 컨텍스트를 응답하라.

push: anObject

수신자의 스택에서 객체를 밀어넣어라.

receiver

실행 중인 메서드에 대한 수신자(self)를 리턴하라.

selector

실행 중인 메서드에 대한 선택자를 리턴하라.

size

수신자에 유효한 필드의 개수를 응답하라. (self size +1)부터 (self basicSize)까지 읽기 접근은 정의되지 않은 결과를 갖고 있다 – 심지어 충돌까지 가능.

sp

수신자 내의 현재 스택 포인터를 응답하라.

sp: newSP

수신자에 대한 스택 포인터를 설정하라.

validSize

수신자 내 얼마나 많은 요소를 검사해야 하는지 응답하라.


ContextPart: 빌드된 ins

continue: anObject

수신자로부터 실행을 재개하고, 실행 체인의 최상단에서 컨텍스트가 anObject를 리턴한 것으로 가상으로 꾸민다(fake). 수신자는 실행 컨텍스트와 동일한 프로세스에 속해야 하는데, 그렇지 않을 경우 결과를 예측할 수 없다. 현재 실행 중인 컨텍스트와 수신자 간 모든 #ensure: (그리고 아마도 #ifCurtailed: 까지) 블록이 평가된다 (thisContext의 부모 컨텍스트에서 직접 bash했다면 일어나지 않았을 일이다).


ContextPart: 복사하기

copyStack

전체 스택의 복사본을 응답하라.

deepCopy

전체 스택의 복사본을 응답하되 컨텍스트의 다른 인스턴스 변수는 어떤 것도 복사하지 않는다.


ContextPart: 디버깅하기

currentLine

수신자의 명령어 포인터가 가리키는 1-based(1부터 시작하는) 행 번호를 응답하라. Debug Tool 패키지는 정보를 캐시 저장하므로 구현 속도가 더 빠르다.

currentLineInFile

메서드의 파일과 관련해 수신자의 명령어 포인터가 가리키는 1-based(1부터 시작하는) 행 번호를 응답하라. DebugTools 패키지가 로딩되어 있지 않은 이상 구현 속도가 느리다.

debugger

주어진 컨텍스트에 부착된 디버거를 응답하라. DebugTools 패키지가 로딩되어 있지 않은 이상 구현 속도가 느리다.

debuggerClass

현재 컨텍스트 체인을 디버깅하는 데 어떤 디버거를 사용해야 하는지 응답하라. 체인에서 언급한 것들 중에서 디버깅 우선순위가 가장 높은 클래스가 선택된다.

isInternalExceptionHandlingContext

추적을 표현할 때 컨텍스트를 사용자에게 숨겨야 하는지 응답하라.


ContextPart: 열거하기

scanBacktraceFor: selectors do: aBlock

선택자가 선택자들 내에 열거된 것들에 해당하는 컨텍스트의 추적을 스캔하라; 하나가 발견되면 컨텍스트를 전달하는 aBlock을 호출하라.

scanBacktraceForAttribute: selector do: aBlock

선택자 내에 열거된 속성 선택자를 가진 컨텍스트의 추적을 슼내하라; 하나가 발견되면 컨텍스트와 속성을 전달하는 aBlock을 호출하라.


ContextPart: 인쇄하기

backtrace

수신자부터 스택의 bottom까지 실행추적을 Transcript 상에 인쇄하라.

backtraceOn: aStream

호출자부터 스택의 bottom까지 실행추적을 aStream 상에 인쇄하라.


ContextPart: 보안 확인

checkSecurityFor: perm

수신자를 응답하라.

doSecurityCheckForName: name actions: actions target: target

해당 설명 없음.

securityCheckForName: name

해당 설명 없음.

securityCheckForName: name action: action

해당 설명 없음.

securityCheckForName: name actions: actions target: target

해당 설명 없음.

securityCheckForName: name target: target

해당 설명 없음.


Notes