GnuSmalltalkUsersGuide:BaseChapter 037
- CompiledBlock
CompiledBlock
네임스페이스 Smalltalk에 정의됨
슈퍼클래스: CompiledCode
범주: 언어-구현
- 나는 컴파일된 블록을 표현한다.
CompiledBlock 클래스: 인스턴스 생성
new: numBytecodes header: anInteger method: outerMethod
주어진 바이트코드 수와 주어진 헤더(header)의 공간이 있는 수신자의 새 인스턴스를 응답하라.
numArgs: args numTemps: temps bytecodes: bytecodes depth: depth literals: literalArray
(거의) 완전한 CompiledBlock을 응답하라. 이를 완전하게 만들기 위해서는 새 객체의 'method' 변수를 설정하거나, 이것을 BlockClosure로 넣고 BlockClosure를 CompiledMethod의 리터럴로 넣어야 한다. 블록의 cleanness는 자동으로 계산된다.
CompiledBlock: 접근하기
flags
블록의 'cleanness'를 응답하라. 0 = 깨끗함; 1 = 수신자 변수와/또는 self로 접근; 2-30 = 1-29 컨텍스트 떨어진 변수로 접근; 31 = 메서드로부터 리턴 또는 thisContext를 밀어넣음
method
수신자가 상추하는 CompiledMethod 를 응답하라.
methodClass
수신자가 설치된 클래스를 응답하라.
methodClass: methodClass
수신자의 클래스 인스턴스 변수를 설정하라.
numArgs
수신자에게 전달되는 인자 수를 응답하라.
numLiterals
수신자에 대한 리터럴 수를 응답하라.
numTemps
수신자가 사용하는 임시 변수의 수를 응답하라.
selector
메서드가 어떤 선택자를 통해 호출되는지 응답하라.
selector: aSymbol
메서드가 어떤 선택자를 통해 호출되는지 설정하라.
sourceCodeLinesDelta
LINE NUMBER 바이트코드 내 번호부터 소스 코드 행 번호까지 delta를 응답하라.
sourceCodeMap
바이트코드 색인을 소스 코드 행 번호로 매핑하는 배열을 응답하라. 0 값은 유효하지 않은 명령어 포인터 색인을 나타낸다.
stackDepth
수신자에게 필요한 스택 슬롯의 개수를 응답하라.
CompiledBlock: 기본
= aMethod
수신자가 aMethod와 같은지 응답하라.
methodCategory
메서드 범주를 응답하라.
methodCategory: aCategory
메서드 범주를 주어진 문자열로 설정하라.
methodSourceCode
메서드 소스 코드를 응답하라 (FileSegment, String, nil 중 하나)
methodSourceFile
메서드 소스 코드가 보관되는 파일을 응답하라.
methodSourcePos
methodSourceFile 내에서 메서드 소스 코드가 보관되는 위치를 응답하라.
methodSourceString
메서드 소스 코드를 문자열로 응답하라.
CompiledBlock: 인쇄하기
printOn: aStream
수신자의 클래스와 선택자를 aStream 상에 인쇄하라.
CompiledBlock: 저장하기와 로딩하기
binaryRepresentationObject
해당 메서드는 PluggableProxy를 CompiledBlock와 함께 사용하도록 만들기 위해 구현된다. 수신자를 포함하는 CompiledMethod로 #blockAt: 을 전송하는 DirectedMessage를 응답하라.