<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=GnuSmalltalkUsersGuide%3ABaseChapter_039</id>
	<title>GnuSmalltalkUsersGuide:BaseChapter 039 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=GnuSmalltalkUsersGuide%3ABaseChapter_039"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=GnuSmalltalkUsersGuide:BaseChapter_039&amp;action=history"/>
	<updated>2026-05-02T09:00:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=GnuSmalltalkUsersGuide:BaseChapter_039&amp;diff=4026&amp;oldid=prev</id>
		<title>Onionmixer: GSUG CompiledMethod 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=GnuSmalltalkUsersGuide:BaseChapter_039&amp;diff=4026&amp;oldid=prev"/>
		<updated>2014-01-27T03:45:45Z</updated>

		<summary type="html">&lt;p&gt;GSUG CompiledMethod 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;;CompiledMethod&lt;br /&gt;
&lt;br /&gt;
==CompiledMethod==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;네임스페이스 Smalltalk에 정의됨&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;슈퍼클래스: CompiledCode&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;범주: 언어-구현&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:나는 컴파일된 메서드를 표현한다. 메서드의 소스 코드로부터 메서드를 재컴파일할 수 있고, Emacs를 호출하여 나의 인스턴스들 중 하나에 대한 소스 코드를 편집할 수 있으며, 내 인스턴스의 컴포넌트로 접근하는 방법을 알 수 있다. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod class: c call-outs===&lt;br /&gt;
&lt;br /&gt;
pragma&lt;br /&gt;
&lt;br /&gt;
====asyncCCall: descr numArgs: numArgs attributes: attributesArray====&lt;br /&gt;
&lt;br /&gt;
주어진 인자로 #asyncCCall:args: pragma에 해당하는 CompiledMethod를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
pragma&lt;br /&gt;
&lt;br /&gt;
====cCall: descr numArgs: numArgs attributes: attributesArray====&lt;br /&gt;
&lt;br /&gt;
주어진 인자로 #cCall:returning:args: pragma에 해당하는 CompiledMethod를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod 클래스: 인스턴스 생성===&lt;br /&gt;
&lt;br /&gt;
====literals: lits numArgs: numArg numTemps: numTemp attributes: attrArray bytecodes: bytecodes depth: depth====&lt;br /&gt;
&lt;br /&gt;
완전한 CompiledMethod를 응답하라. 매개변수로부터 메서드 헤더를 구성하고, 리터럴과 바이트코드는 제공된 것들로 설정하라. 또 바이트코드는 최적화되며, 내장된 CompiledBlocks는 이러한 리터럴과 새로 생성된 CompiledMethod를 참조하도록 수정된다.&lt;br /&gt;
&lt;br /&gt;
====numArgs: args====&lt;br /&gt;
&lt;br /&gt;
numArgs 인자를 이용해 사용자가 정의한 메서드를 생성하라 (호출 시 #valueWithReceiver:-withArguments이 전송되는 메서드). CompiledMethod의 서브클래스에 대해 호출한 경우에만 의미가 있다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod 클래스: lean 이미지===&lt;br /&gt;
&lt;br /&gt;
====stripSourceCode====&lt;br /&gt;
&lt;br /&gt;
메서드 소스 코드로의 모든 참조를 시스템으로부터 제거하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 접근하기===&lt;br /&gt;
&lt;br /&gt;
====allBlocksDo: aBlock====&lt;br /&gt;
&lt;br /&gt;
aBlock을 평가하여 그것이 보유한 모든 CompiledBlocks로 전달하라.&lt;br /&gt;
&lt;br /&gt;
====allLiterals====&lt;br /&gt;
&lt;br /&gt;
수신자가 참조한 리터럴과 그 안의 모든 블록을 응답하라.&lt;br /&gt;
&lt;br /&gt;
====flags====&lt;br /&gt;
&lt;br /&gt;
Private - 수신자에 대한 최적화 플래그를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====isOldSyntax====&lt;br /&gt;
&lt;br /&gt;
메서드가 오래된 (chunk-format) 구문으로 작성되었는지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====methodCategory====&lt;br /&gt;
&lt;br /&gt;
메서드 범주를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====methodCategory: aCategory====&lt;br /&gt;
&lt;br /&gt;
메서드 범주를 주어진 문자열로 설정하라.&lt;br /&gt;
&lt;br /&gt;
====methodClass====&lt;br /&gt;
&lt;br /&gt;
수신자가 설치된 클래스를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====methodClass: methodClass====&lt;br /&gt;
&lt;br /&gt;
수신자의 클래스 인스턴스 변수를 설정하라.&lt;br /&gt;
&lt;br /&gt;
====noteOldSyntax====&lt;br /&gt;
&lt;br /&gt;
메서드가 오래된 (chunk-format) 구문으로 작성되었음을 기억하라.&lt;br /&gt;
&lt;br /&gt;
====numArgs====&lt;br /&gt;
&lt;br /&gt;
수신자의 인자 수를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====numTemps====&lt;br /&gt;
&lt;br /&gt;
수신자의 임시변수(temporaries) 수를 기억하라. &lt;br /&gt;
&lt;br /&gt;
====primitive====&lt;br /&gt;
&lt;br /&gt;
수신자가 호출한 프리미티브를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====selector====&lt;br /&gt;
&lt;br /&gt;
메서드가 어떤 선택자를 통해 호출되는지 응답하라. &lt;br /&gt;
&lt;br /&gt;
====selector: aSymbol====&lt;br /&gt;
&lt;br /&gt;
메서드가 어떤 선택자를 통해서 호출되는지 설정하라.&lt;br /&gt;
&lt;br /&gt;
====sourceCodeLinesDelta====&lt;br /&gt;
&lt;br /&gt;
LINE NUMBER 바이트코드 내 번호부터 소스 코드 행 번호까지 delta를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====stackDepth====&lt;br /&gt;
&lt;br /&gt;
수신자에게 필요한 스택 슬롯의 개수를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====withAllBlocksDo: aBlock====&lt;br /&gt;
&lt;br /&gt;
aBlock을 평가하고 수신자와 그것이 보유하는 모든 CompiledBlocks를 평가하라.&lt;br /&gt;
&lt;br /&gt;
====withNewMethodClass: class====&lt;br /&gt;
&lt;br /&gt;
클래스로 설정된 메서드 클래스를 이용해 수신자 또는 수신자의 복사본을 응답하라.&lt;br /&gt;
&lt;br /&gt;
====withNewMethodClass: class selector: selector====&lt;br /&gt;
&lt;br /&gt;
클래스로 설정된 메서드 클래스를 이용해 수신자 또는 수신자의 복사본을 응답하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 속성===&lt;br /&gt;
&lt;br /&gt;
====attributeAt: aSymbol====&lt;br /&gt;
&lt;br /&gt;
수신자가 정의한 aSymbol이라는 첫 번째 속성에 대한 Message를 리턴하고, 이를 찾을 수 없을 경우 오류를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====attributeAt: aSymbol ifAbsent: aBlock====&lt;br /&gt;
&lt;br /&gt;
수신자가 정의한 aSymbol이라는 첫 번째 속성에 대한 Message를 리턴하고, 이를 찾을 수 없을 경우 aBlock을 평가하라. &lt;br /&gt;
&lt;br /&gt;
====attributes====&lt;br /&gt;
&lt;br /&gt;
수신자가 정의한 속성마다 해당되는 Message 들의 Array 를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
====attributesDo: aBlock====&lt;br /&gt;
&lt;br /&gt;
수신자가 정의한 각 속성마다 aBlock을 평가하고 매번 Message를 전달하라.&lt;br /&gt;
&lt;br /&gt;
====isAnnotated====&lt;br /&gt;
&lt;br /&gt;
수신자가 어떤 속성이라도 갖고 있는 경우 true를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====primitiveAttribute====&lt;br /&gt;
&lt;br /&gt;
수신자가 프리미티브를 정의할 경우 그것을 정의하는 데 사용된 속성과 닮은 Message를 리턴하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 기본===&lt;br /&gt;
&lt;br /&gt;
==== = aMethod====&lt;br /&gt;
&lt;br /&gt;
수신자와 aMethod가 같은지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====hash====&lt;br /&gt;
&lt;br /&gt;
수신자에 대한 해시값을 응답하라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: c call-outs===&lt;br /&gt;
&lt;br /&gt;
====isValidCCall====&lt;br /&gt;
&lt;br /&gt;
내가 유효한 플래그, 정보, C 함수를 호출하기 위한 ops를 갖고 있는 것으로 보이는지 응답하고 그 결과를 응답하라.&lt;br /&gt;
&lt;br /&gt;
====rewriteAsAsyncCCall: func args: argsArray====&lt;br /&gt;
&lt;br /&gt;
해당 설명 없음.&lt;br /&gt;
&lt;br /&gt;
====rewriteAsCCall: funcOrDescr for: aClass====&lt;br /&gt;
&lt;br /&gt;
해당 설명 없음.&lt;br /&gt;
&lt;br /&gt;
====rewriteAsCCall: func returning: returnType args: argsArray====&lt;br /&gt;
&lt;br /&gt;
해당 설명 없음.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 컴파일하기===&lt;br /&gt;
&lt;br /&gt;
====methodFormattedSourceString====&lt;br /&gt;
&lt;br /&gt;
메서드 소스 코드를 RBFormatter를 이용해 포맷팅된 문자열로 응답하라.&lt;br /&gt;
&lt;br /&gt;
====Parser====&lt;br /&gt;
&lt;br /&gt;
패키지가 필요하다. &lt;br /&gt;
&lt;br /&gt;
====methodParseNode====&lt;br /&gt;
&lt;br /&gt;
수신자에 대한 파스 트리를 응답하고 오류가 발생할 경우 nil을 응답하라. Parser 패키지가 필요하다.&lt;br /&gt;
&lt;br /&gt;
====parserClass====&lt;br /&gt;
&lt;br /&gt;
나의 소스 코드를 파싱할 수 있는 Barhavior&amp;gt;&amp;gt;parserClass와 유사한 파서 클래스를 응답하라. Parser 패키지가 필요하다.&lt;br /&gt;
&lt;br /&gt;
====recompile====&lt;br /&gt;
&lt;br /&gt;
메서드가 떠나는 클래스의 범위 내에서 메서드를 재컴파일하라.&lt;br /&gt;
&lt;br /&gt;
====recompileNotifying: aNotifier====&lt;br /&gt;
&lt;br /&gt;
메서드가 떠나는 클래스의 범위 내에서 메서드를 재컴파일하고 #error: 를 aNotifier에게 전송하여 오류를 알려라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 호출하기===&lt;br /&gt;
&lt;br /&gt;
====valueWithReceiver: anObject withArguments: args====&lt;br /&gt;
&lt;br /&gt;
anObject 내에서 메서드를 실행하고 args Array의 요소들을 매개변수로서 전달하라. 메서드는 수신자의 클래스로부터 Object까지의 계층구조에 상주할 필요가 없지만-사실상 MethodDictionary에 전혀 존재할 필요가 없다-잘못된 일을 할 경우 스몰토크 가상 머신의 안정성을 해칠 것이다 (따라서 본인 외에는 탓할 사람이 없다).&lt;br /&gt;
&lt;br /&gt;
메서드 헤더의 플래그 필드가 6인 경우 해당 메서드는 메서드 실행이 요청될 때마다 가상 머신이 콜백할 수 있는 hook를 제공한다. 이런 경우, 메서드를 호출하면 무한 루프를 야기할 것이므로 (가상 머신은 메서드의 실행을 요청하고 메서드는 VM에게 자신을 호출할 것을 요청한다) #subclassResponsibility 오류로 메서드가 실패할 것이다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 인쇄하기===&lt;br /&gt;
&lt;br /&gt;
====printOn: aStream====&lt;br /&gt;
&lt;br /&gt;
수신자의 클래스와 선택자를 aStream 상에 인쇄하라.&lt;br /&gt;
&lt;br /&gt;
====storeOn: aStream====&lt;br /&gt;
&lt;br /&gt;
수신자를 생성하기 위한 코드를 aStream 상에 인쇄하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 저장하기와 로딩하기===&lt;br /&gt;
&lt;br /&gt;
====binaryRepresentationObject====&lt;br /&gt;
&lt;br /&gt;
해당 메서드는 PluggableProxy를 CompiledMethods와 사용 가능하도록 허용하기 위해 구현된다. 수신자를 포함하는 클래스 객체로 #&amp;gt;&amp;gt;를 전송하는 DirectedMessage 를 응답하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 소스 코드===&lt;br /&gt;
&lt;br /&gt;
====methodRecompilationSourceString====&lt;br /&gt;
&lt;br /&gt;
메서드 소스 코드를 문자열로서 응답하여 새로운 구문으로 (괄호가 있다) 되도록 확보하라.&lt;br /&gt;
&lt;br /&gt;
====methodSourceCode====&lt;br /&gt;
&lt;br /&gt;
메서드 소스 코드를 응답하라 (FileSegment, String, nil 중 하나)&lt;br /&gt;
&lt;br /&gt;
====methodSourceFile====&lt;br /&gt;
&lt;br /&gt;
메서드 소스 코드가 보관되는 파일을 응답하라. &lt;br /&gt;
&lt;br /&gt;
====methodSourcePos====&lt;br /&gt;
&lt;br /&gt;
methodSourceFile 내에서 메서드 소스 코드가 보관되는 위치를 응답하라. &lt;br /&gt;
&lt;br /&gt;
====methodSourceString====&lt;br /&gt;
&lt;br /&gt;
메서드 소스 코드를 문자열로 응답하라. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CompiledMethod: 검사하기===&lt;br /&gt;
&lt;br /&gt;
====accesses: instVarIndex====&lt;br /&gt;
&lt;br /&gt;
수신자 또는 그것이 포함하는 블록이 주어진 색인으로 된 인스턴스 변수로 접근하는지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====assigns: instVarIndex====&lt;br /&gt;
&lt;br /&gt;
수신자 또는 그것이 포함하는 블록이 주어진 색인으로 된 인스턴스 변수로 작성하는지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====isAbstract ====&lt;br /&gt;
&lt;br /&gt;
수신자가 추상적인지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====reads: instVarIndex====&lt;br /&gt;
&lt;br /&gt;
수신자 또는 그것이 포함하는 블록이 주어진 색인으로 된 인스턴스 변수를 읽는지 응답하라.&lt;br /&gt;
&lt;br /&gt;
====sendsToSuper====&lt;br /&gt;
&lt;br /&gt;
수신자 또는 그것이 포함하는 블록이 super로의 전송을 갖는지 응답하라.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GnuSmalltalkUsersGuide]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>