'From Croquet1.0beta of 11 April 2006 [latest update: #1] on 12 November 2008 at 2:55:18 pm'! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForEffect: stack encoder: encoder! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForLoad: stack encoder: encoder rcvrNode emitCodeForValue: stack encoder: encoder. fieldDef accessKey ifNotNil:[ super emitCodeForValue: stack encoder: encoder. ].! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 16:18'! emitCodeForStorePop: stack encoder: encoder self emitCodeForStore: stack encoder: encoder. encoder genPop. stack pop: 1.! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForStore: stack encoder: encoder fieldDef accessKey ifNil:[ writeNode emitCode: stack args: 1 encoder: encoder super: false. ] ifNotNil:[ writeNode emitCode: stack args: 2 encoder: encoder super: false. ].! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForValue: stack encoder: encoder fieldDef accessKey ifNil:[ rcvrNode emitCodeForValue: stack encoder: encoder. readNode emitCode: stack args: 0 encoder: encoder super: false. ] ifNotNil:[ rcvrNode emitCodeForValue: stack encoder: encoder. super emitCodeForValue: stack encoder: encoder. readNode emitCode: stack args: 1 encoder: encoder super: false. ].! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! sizeCodeForEffect: encoder ^0! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 17:17'! sizeCodeForStorePop: encoder ^(self sizeCodeForStore: encoder) + encoder sizePop! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! sizeCodeForStore: encoder rcvrNode ifNil:[self encodeReceiverOn: encoder]. fieldDef accessKey ifNil:[ writeNode ifNil:[writeNode := encoder encodeSelector: fieldDef toSet]. ^(rcvrNode sizeCodeForValue: encoder) + (writeNode sizeCode: encoder args: 1 super: false) ]. writeNode ifNil:[writeNode := encoder encodeSelector: #set:to:]. ^(rcvrNode sizeCodeForValue: encoder) + (super sizeCodeForValue: encoder) + (writeNode sizeCode: encoder args: 2 super: false)! ! !FieldNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! sizeCodeForValue: encoder rcvrNode ifNil:[self encodeReceiverOn: encoder]. fieldDef accessKey ifNil:[ readNode ifNil:[readNode := encoder encodeSelector: fieldDef toGet]. ^(rcvrNode sizeCodeForValue: encoder) + (readNode sizeCode: encoder args: 0 super: false) ]. readNode ifNil:[readNode := encoder encodeSelector: #get:]. ^(rcvrNode sizeCodeForValue: encoder) + (super sizeCodeForValue: encoder) + (readNode sizeCode: encoder args: 1 super: false)! ! !FutureNode methodsFor: 'accessing' stamp: 'eem 9/10/2008 15:21'! originalSelector ^originalSelector! ! !FutureNode methodsFor: 'accessing' stamp: 'eem 9/10/2008 15:21'! receiver ^receiver! ! !FutureNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForBlockValue: stack encoder: encoder "Generate code for evaluating the last statement in a block." ^effectNode emitCodeForValue: stack encoder: encoder! ! !FutureNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForEffect: stack encoder: encoder ^effectNode emitCodeForEffect: stack encoder: encoder! ! !FutureNode methodsFor: 'code generation (new scheme)' stamp: 'eem 5/14/2008 14:52'! emitCodeForValue: stack encoder: encoder ^valueNode emitCodeForValue: stack encoder: encoder! ! !CScanner methodsFor: 'multi-character scans' stamp: 'eem 5/12/2008 11:18'! xColon "Allow := for assignment by converting to #_ " aheadChar = $= ifTrue: [self step. tokenType := #leftArrow. self step. ^ token := #':=']. aheadChar = $: ifTrue: [self step. tokenType := #scopeRef. self step. ^ token := #'::']. "Otherwise, just do what normal scan of colon would do" tokenType := #colon. ^ token := self step asSymbol! ! !FutureNode methodsFor: 'code generation' stamp: 'eem 5/5/2008 14:57'! emitForEffect: stack on: strm ^effectNode emitForEffect: stack on: strm! ! !FutureNode methodsFor: 'code generation' stamp: 'eem 5/5/2008 14:57'! emitForValue: stack on: strm ^valueNode emitForValue: stack on: strm! ! !FutureNode methodsFor: 'code generation (new scheme)' stamp: 'eem 7/18/2008 12:28'! sizeCodeForBlockValue: encoder receiver == NodeSuper ifTrue: [^self error: 'Futures cannot send to future']. (futureArgs isNil or: [futureSelector isNil]) ifTrue: [^self error: 'Futures must be sent messages']. encoder sharableLitIndex: originalSelector. "to find its senders" futureDelta ifNil:[futureDelta := encoder encodeLiteral: 0]. effectNode := MessageNode new receiver: receiver selector: #futureDo:at:args: arguments: (Array with: (encoder encodeLiteral: futureSelector) with: futureDelta with: (BraceNode new elements: futureArgs)) precedence: 3 from: encoder. ^effectNode sizeCodeForValue: encoder! ! !FutureNode methodsFor: 'code generation (new scheme)' stamp: 'eem 7/18/2008 12:27'! sizeCodeForEffect: encoder receiver == NodeSuper ifTrue: [^self error: 'Futures cannot send to future']. (futureArgs isNil or: [futureSelector isNil]) ifTrue: [^self error: 'Futures must be sent messages']. encoder sharableLitIndex: originalSelector. "to find its senders" futureDelta ifNil:[futureDelta := encoder encodeLiteral: 0]. effectNode := MessageNode new receiver: receiver selector: #futureDo:at:args: arguments: (Array with: (encoder encodeLiteral: futureSelector) with: futureDelta with: (BraceNode new elements: futureArgs)) precedence: 3 from: encoder. ^effectNode sizeCodeForEffect: encoder! ! !FutureNode methodsFor: 'code generation (new scheme)' stamp: 'eem 7/18/2008 12:28'! sizeCodeForValue: encoder receiver == NodeSuper ifTrue: [^self error: 'Futures cannot send to future']. (futureArgs isNil or: [futureSelector isNil]) ifTrue: [^self error: 'Futures must be sent messages']. encoder sharableLitIndex: originalSelector. "to find its senders" futureDelta ifNil:[futureDelta := encoder encodeLiteral: 0]. valueNode := MessageNode new receiver: receiver selector: #futureSend:at:args: arguments: (Array with: (encoder encodeLiteral: futureSelector) with: futureDelta with: (BraceNode new elements: futureArgs)) precedence: 3 from: encoder. ^valueNode sizeCodeForValue: encoder! ! !FutureNode methodsFor: 'visiting' stamp: 'eem 9/10/2008 15:21'! accept: aVisitor aVisitor visitFutureNode: self! ! !FutureNode reorganize! ('initialize-release' futureMessage:arguments:from:sourceRange: receiver:selector:arguments:precedence:from:sourceRange:) ('accessing' futureSelector originalSelector receiver) ('code generation' emitForBlockValue:on: emitForEffect:on: emitForValue:on: sizeForBlockValue: sizeForEffect: sizeForValue:) ('testing' isFutureNode) ('code generation (new scheme)' emitCodeForBlockValue:encoder: emitCodeForEffect:encoder: emitCodeForValue:encoder: sizeCodeForBlockValue: sizeCodeForEffect: sizeCodeForValue:) ('code generation (closures)' analyseTempsWithin:rootNode:) ('visiting' accept:) ! CCompiler class removeSelector: #old! CCompiler removeSelector: #doIt:in:to:notifying:ifFail:! CCompiler removeSelector: #parse:in:notifying:dialect:! CCompiler removeSelector: #sourceStream!