Skip to content

Commit

Permalink
Issue #4: eval command is returning nil ... but we're getting Text ob…
Browse files Browse the repository at this point in the history
…jects which is not desirable ... command line handling for 'eval 3+4' is a bit funky at the moment ... but we're getting a resultgit commit -mIssue
  • Loading branch information
dalehenrich committed Jul 27, 2023
1 parent f8d4e54 commit 61d6e04
Show file tree
Hide file tree
Showing 30 changed files with 277 additions and 8 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,14 @@ loadTode.stone --projectDirectory=$projectsDirectory
registryReport.solo
```

## Branches

### v1.1
Used by [smalltalkCI](https://github.com/hpi-swa/smalltalkCI).

### v1.1.1
Development aimed at smalltalkCI ... namely fixing [issue #322](https://github.com/dalehenrich/tode/issues/322).

## Branch naming conventions
1. vX
2. vX.Y
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*gsdevkit_stones-tode
convertTDEvaluateTokenResponseToText: objectSerializer
"expected response is a String, but could be a TZProxyNotification"

^ objectSerializer fromString: self
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
"name" : "CharacterCollection" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
server external session calls
_serverBackupDirectory: backupDirectoryString to: topezServerOop
| doitString |
doitString := '
[
| tsp |
tsp := Object _objectForOop: ' , topezServerOop printString
,
'.
tsp backupDirectory: ' , backupDirectoryString printString
,
' ]
on: Error
do: [ :ex | System waitForDebug ]'.
[ self session nbExecute: doitString ]
on: GsErrorNotification
do: [ :ex | self error: 'Unable send #backupDirectory: message to tODE server' ].
^ self session nbResult
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
server external session calls
_serverEffectiveApiVersion: versionString to: topezServerOop
| doitString |
doitString := '
[
| tsp |
tsp := Object _objectForOop: ' , topezServerOop printString
,
'.
tsp effectiveApiVersion: ' , versionString printString
,
' ]
on: Error
do: [ :ex | System waitForDebug ]'.
[ self session nbExecute: doitString ]
on: GsErrorNotification
do: [ :ex | self error: 'Unable send #effectiveApiVersion: message to tODE server' ].
^ self session nbResult
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
server external session calls
_serverExecuteString: executeString
| doitString |
doitString := '
[
^ (' , executeString
,
') ]
on: Error, Halt
do: [ :ex | System waitForDebug ]'.
[ self session nbExecute: doitString ]
on: GsErrorNotification
do: [ :ex | self error: 'Unable to execute #executeString: on tODE server' ].
^ self session nbResult
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
server external session calls
_serverSerializeObjectsUser: serializerClassString version: versionString to: topezServerOop
| doitString |
doitString := '
[
| tsp |
tsp := Object _objectForOop: ' , topezServerOop printString
,
'.
tsp serializeObjectsUsing: ' , serializerClassString printString
, ' version: ' , versionString printString
,
' ]
on: Error
do: [ :ex | System waitForDebug ]'.
[ self session nbExecute: doitString ]
on: GsErrorNotification
do: [ :ex | self error: 'Unable send #serializeObjectsUsing:version: message to tODE server' ].
^ self session nbResult
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
server external session calls
_serverSnapshotDirectory: snapshotDirectoryString to: topezServerOop
| doitString |
doitString := '
[
| tsp |
tsp := Object _objectForOop: ' , topezServerOop printString
,
'.
tsp snapshotDirectory: ' , snapshotDirectoryString printString
,
' ]
on: Error
do: [ :ex | System waitForDebug ]'.
[ self session nbExecute: doitString ]
on: GsErrorNotification
do: [ :ex | self error: 'Unable send #snapshotDirectory: message to tODE server' ].
^ self session nbResult
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
accessing
clientApiVersion
"Version changes whenever the api between client and server changes:
Major version changes when incompatible API changes have been made.
Minor version changes when API is extended/changed in a backwards compatible manner.
Patch version changes whenever bugfixes are made in the API"

"1.0.0 - initial version"

"1.1.0 - introduce TDEventsCache"

"1.2.0 - add additional instance variables (netLDIPort and netLDIPortRange) to TDSessionDescription"

"1.3.0 - debugger uses #closeWith: callback when dbContinue runs off the end,
server-side effectiveApiVersion"

"1.4.0 - use client callback #dbStepThrough:forProcessOop: for debugger step thru ... GemStone3.2 and greater"

"1.5.0 - external tode server supported"

^ '1.5.0' asRwSemanticVersionNumber
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
clientForwarderCache: object
clientForwarderCache := object
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
clientForwarderCache
^ clientForwarderCache ifNil: [ clientForwarderCache := Dictionary new ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
effectiveApiVersion: object
effectiveApiVersion := object
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
effectiveApiVersion
^effectiveApiVersion
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ evaluation
evaluateCommand: command batchMode: batchBool
| stonString |
stonString := STON toString: command.
^ self session
executeString:
^ self
_serverExecuteString:
'(' , self todeServerAccessString , ' for: ' , self shell shellId asString
, ') evaluateSTONCommand:' , stonString printString
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
session management
login
| gemNRS stoneNRS sessionDescription |
| gemNRS stoneNRS sessionDescription sess |
sessionDescription := self sessionDescription.
gemNRS := GsNetworkResourceString
gemNRSForNetLDI: sessionDescription netLDIPort
onHost: sessionDescription gemHost.
stoneNRS := GsNetworkResourceString
stoneNRSForStoneName: sessionDescription stoneName
onHost: sessionDescription stoneHost.
^ (GsTsExternalSession
sess := GsTsExternalSession
gemNRS: gemNRS
stoneNRS: stoneNRS
username: sessionDescription userId
password: sessionDescription password) login
password: sessionDescription password.
sess nbLogin.
sess waitForReadReady.
sess nbLoginFinished.
^ sess
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
accessing
serverApiVersion: aServerApiVersion
serverApiVersion := aServerApiVersion.
self clientApiVersion >= serverApiVersion
ifTrue: [ self effectiveApiVersion: serverApiVersion ]
ifFalse: [ self effectiveApiVersion: self clientApiVersion ]
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
serverApiVersion
^serverApiVersion
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
session management
session
session ifNil: [ session := self login ].
session
ifNil: [
session := self login.
self topezServerProxy ].
^ session
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
session management
todeServerCreationString
^self todeServerCreationStringWithOptions: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
session management
todeServerCreationStringWithOptions: withOptions
| str optionsString |
str := self todeServerAccessString , ' createFor: '
, self shell shellId asString.
withOptions
ifTrue: [
optionsString := true
ifTrue: [ '' ]
ifFalse: [ '#transcript' ].
str := str , ' options: #(' , optionsString , ')' ].
^ str
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
topezServerProxy: object
topezServerProxy := object
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
accessing
topezServerProxy
^ topezServerProxy
ifNil: [
| jsonString transcriptOopType resultArray topezServerOop topezClientOopType todeServerCreationString serializeResultString |
[
todeServerCreationString := self todeServerCreationString.
jsonString := self session executeString: todeServerCreationString ]
on: GsErrorNotification
do: [ :firstEx |
"try again with no options, in case using old version of tode ... eventually get rid of this"
[
todeServerCreationString := self todeServerCreationStringWithOptions: false.
jsonString := self session nbExecute: todeServerCreationString ]
on: GsErrorNotification
do: [ :ex |
self
error:
'Unable to log into server:' , ex description , 'with: '
, todeServerCreationString printString ] ].
resultArray := STON fromString: jsonString.
topezServerOop := resultArray at: 1.
topezClientOopType := resultArray at: 3.
topezServerProxy := topezServerOop.
(resultArray at: 2)
ifNotNil: [ :transcriptOop |
transcriptOopType := transcriptOop.
self clientForwarderCache at: transcriptOopType put: Transcript ].
self clientForwarderCache at: topezClientOopType put: self.
resultArray size > 3
ifTrue: [
| protocolSignature objSerializer serverApiVersionString |
protocolSignature := resultArray at: 4.
objSerializer := STON.

serializeResultString := self
_serverSerializeObjectsUser: objSerializer name asString
version: '0.9.1'
to: topezServerOop.

serverApiVersionString := resultArray size > 4
ifTrue: [ resultArray at: 5 ]
ifFalse: [ '1.0.0' ].
self serverApiVersion: serverApiVersionString asRwSemanticVersionNumber ].
self effectiveApiVersion >= '1.3.0' asRwSemanticVersionNumber
ifTrue: [
self
_serverEffectiveApiVersion: self effectiveApiVersion asString
to: topezServerOop ].
self sessionDescription backupDirectory isEmpty not
ifTrue: [
self
_serverBackupDirectory: self sessionDescription backupDirectory
to: topezServerOop ].
self sessionDescription snapshotDirectory isEmpty not
ifTrue: [
self
_serverSnapshotDirectory: self sessionDescription snapshotDirectory
to: topezServerOop ].
TZGemStoneProxyBehavior new
topez: self;
allGlobalNames;
yourself ]
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
"commentStamp" : "",
"instvars" : [
"shell",
"session" ],
"session",
"topezServerProxy",
"clientForwarderCache",
"serverApiVersion",
"effectiveApiVersion" ],
"name" : "TDExternalSessionClient",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ evaluateCommand: command batchMode: aBool
ifTrue: [ ^ '' ].
(self builtInCommands includes: command command)
ifTrue: [ ^ self executeBuiltIn: command ].
self halt.
^ (self topezClient evaluateCommand: command batchMode: aBool)
convertTDEvaluateTokenResponseToText: self objectSerializer
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
accessing
objectSerializer
^ self topez objectSerializer
^ STON
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
accessing
allGlobalNames
AllGlobalNames
ifNil: [
"may be needed?"
AllGlobalNames := #() ].
^ AllGlobalNames
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
topez: object
topez := object
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
topez
^topez
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"category" : "GsDevKit_stones-Tode",
"classinstvars" : [
],
"classvars" : [
"AllGlobalNames",
"GciSemaphore" ],
"commentStamp" : "",
"instvars" : [
"behaviorOop",
"topez",
"allInstVarNames",
"allClassVarNames",
"allSharedPoolNames" ],
"name" : "TZGemStoneProxyBehavior",
"pools" : [
],
"super" : "Object",
"type" : "normal" }

0 comments on commit 61d6e04

Please sign in to comment.