Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added SIXX.310-monty.182.mcz
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ baseline: spec
for: #'gemstone'
do: [
spec
configuration: 'XMLSupport'
configuration: 'XMLParser'
with: [
spec
versionString: '1.2.2.1';
versionString: #'stable';
repository:
'http://seaside.gemtalksystems.com/ss/MetacelloRepository' ];
'http://smalltalkhub.com/mc/PharoExtras/XMLParser/main' ];
yourself.
spec package: 'SIXX' with: [ spec requires: #('XMLSupport') ].
spec package: 'SIXX' with: [ spec requires: #('XMLParser') ].
spec
group: 'default' with: #('Core');
group: 'Core' with: #('SIXX');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"class" : {
},
"instance" : {
"baseline:" : "MarianoMartinezPeck 12/29/2017 08:44" } }
"baseline:" : "MarianoMartinezPeck 04/23/2018 18:38" } }
2 changes: 1 addition & 1 deletion repository/BaselineOfSIXX.package/monticello.meta/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
(name 'BaselineOfSIXX-MarianoMartinezPeck.4' message 'Make SIXX work for GemStone 3.4 as well as future 3.x versions' id 'b8d6ee03-f91f-4699-b38d-cf347d8720cb' date '12/29/2017' time '08:47:15' author 'MarianoMartinezPeck' ancestors ((name 'BaselineOfSIXX-MarianoMartinezPeck.3' message 'For GemStone 3.3.x we also need to load SIXX.310 rather than SIXX' id '3ef09ea2-f16c-4286-b941-4be300010acf' date '05/11/2017' time '05:15:20' author 'MarianoMartinezPeck' ancestors ((name 'BaselineOfSIXX-dkh.2' message 'Issue #3: switch to use XMLSupport 1.2.2.1' id '7671c1b8-d849-4162-a954-e6913e9241a3' date '03/18/2015' time '11:25:28' author 'dkh' ancestors ((name 'BaselineOfSIXX-dkh.1' message 'roughly corresponds to version 0.3-c.1 of ConfigurationOfGsSIXX on http://seaside.gemtalksystems.com/ss/SIXX/' id '3706414b-19f3-465c-98bb-286a9a2c93d7' date '07/01/2013' time '16:58:14' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
(name 'BaselineOfSIXX-MarianoMartinezPeck.6' message 'Integrating Martin work' id 'f7584563-f7e0-4ce1-9f02-7bcb94f6b5f1' date '04/23/2018' time '18:46:52' author 'MarianoMartinezPeck' ancestors ((name 'BaselineOfSIXX-MarianoMartinezPeck.5' message 'Integrating Monty work for using latest XMLParser' id 'd7dd89f2-0df7-4a26-bce2-dec234f4c869' date '04/23/2018' time '07:37:33' author 'MarianoMartinezPeck' ancestors ((name 'BaselineOfSIXX-MarianoMartinezPeck.4' message 'Make SIXX work for GemStone 3.4 as well as future 3.x versions' id 'b8d6ee03-f91f-4699-b38d-cf347d8720cb' date '12/29/2017' time '08:47:15' author 'MarianoMartinezPeck' ancestors ((name 'BaselineOfSIXX-MarianoMartinezPeck.3' message 'For GemStone 3.3.x we also need to load SIXX.310 rather than SIXX' id '3ef09ea2-f16c-4286-b941-4be300010acf' date '05/11/2017' time '05:15:20' author 'MarianoMartinezPeck' ancestors ((name 'BaselineOfSIXX-dkh.2' message 'Issue #3: switch to use XMLSupport 1.2.2.1' id '7671c1b8-d849-4162-a954-e6913e9241a3' date '03/18/2015' time '11:25:28' author 'dkh' ancestors ((name 'BaselineOfSIXX-dkh.1' message 'roughly corresponds to version 0.3-c.1 of ConfigurationOfGsSIXX on http://seaside.gemtalksystems.com/ss/SIXX/' id '3706414b-19f3-465c-98bb-286a9a2c93d7' date '07/01/2013' time '16:58:14' author 'dkh' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
*sixx-private
classFromSixxElement: sixxElement context: dictionary
| type env resolver retClass |
type := self typeFromSixxElement: sixxElement.
type isEmptyOrNil
ifFalse: [
env := self envFromSixxElement: sixxElement.
resolver := dictionary classResolver.
retClass := resolver classAt: type in: env ].
^ retClass isNil
ifTrue: [ SixxClassNotFound signal: type element: sixxElement context: dictionary ]
ifFalse: [ retClass ]
classFromSixxElement: sixxElement context: dictionary
| type env resolver retClass |
type := self typeFromSixxElement: sixxElement.
type isNil ifFalse:[
env := self envFromSixxElement: sixxElement.
resolver := dictionary classResolver.
retClass := resolver classAt: type in: env.
].

^ retClass isNil
ifTrue: [SixxClassNotFound
signal: type
element: sixxElement
context: dictionary]
ifFalse: [retClass]
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
*sixx-instance creation
createMixedFieldsInstanceOf: aClass withSixxElement: sixxElement
"override if you like"

| nonameElems size |
nonameElems := (SixxXmlUtil elementsFrom: sixxElement)
select: [ :each | (self nameFromSixxElement: each) isEmptyOrNil ].
size := nonameElems isEmpty
ifTrue: [ 0 ]
ifFalse: [ nonameElems size ].
^ self sixxNew: aClass size: size withSixxElement: sixxElement
createMixedFieldsInstanceOf: aClass withSixxElement: sixxElement
"override if you like"
| nonameElems size |
nonameElems := (SixxXmlUtil elementsFrom: sixxElement)
select: [:each | (self nameFromSixxElement: each) isNil].
size := nonameElems isEmpty
ifTrue: [0]
ifFalse: [nonameElems size].
^ self
sixxNew: aClass
size: size
withSixxElement: sixxElement
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
formatterFromSixxElement: sixxElement for: aClass context: dictionary
| formatterName env resolver formatter |
formatterName := self formatterNameFromSixxElement: sixxElement.
formatterName isEmptyOrNil ifTrue: [^nil].
formatterName isNil ifTrue: [^nil].
env := self envFromSixxElement: sixxElement.
resolver := dictionary formatterResolver.
formatter := resolver formatterAt: aClass in: env.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
*sixx-private
includesRefInstanceFromSixxElement: sixxElement context: aDictionary
| idref |
idref := self idrefFromSixxElement: sixxElement.
^ idref isEmptyOrNil
ifTrue: [ false ]
ifFalse: [ aDictionary includesKey: idref ]
includesRefInstanceFromSixxElement: sixxElement context: aDictionary
| idref |
idref := self idrefFromSixxElement: sixxElement.
^ idref isNil
ifTrue: [false]
ifFalse: [aDictionary includesKey: idref]
Original file line number Diff line number Diff line change
@@ -1,30 +1,21 @@
*sixx-private
newInstanceFromSixxElement: sixxElement context: aSixxContext
| class formatter inst elemId assoc |
class := self classFromSixxElement: sixxElement context: aSixxContext.
class isNil
ifTrue: [
aSixxContext stack add: #'ref' -> nil.
^ self ].
aSixxContext stack add: (assoc := #'initialize' -> nil).
elemId := self idFromSixxElement: sixxElement.
formatter := self
formatterFromSixxElement: sixxElement
for: class
context: aSixxContext.
formatter isNil
ifTrue: [
inst := class createInstanceOf: class withSixxElement: sixxElement.
aSixxContext at: elemId put: inst.
inst initializeFromSixxElement: sixxElement context: aSixxContext ]
ifFalse: [
inst := formatter createInstanceOf: class withSixxElement: sixxElement.
aSixxContext at: elemId put: inst.
formatter
initialize: inst
fromSixxElement: sixxElement
context: aSixxContext ].
assoc
value:
{inst.
elemId}
newInstanceFromSixxElement: sixxElement context: aSixxContext
| class formatter inst elemId assoc |
class := self classFromSixxElement: sixxElement context: aSixxContext.
class isNil
ifTrue: [
aSixxContext stack add: #ref -> nil.
^self ].
aSixxContext stack add: (assoc := #initialize -> nil).
elemId := self idFromSixxElement: sixxElement.
formatter := self formatterFromSixxElement: sixxElement for: class context: aSixxContext.
formatter isNil
ifTrue: [
inst := class createInstanceOf: class withSixxElement: sixxElement.
aSixxContext at: elemId put: inst.
inst initializeFromSixxElement: sixxElement context: aSixxContext ]
ifFalse: [
inst := formatter createInstanceOf: class withSixxElement: sixxElement.
aSixxContext at: elemId put: inst.
formatter initialize: inst fromSixxElement: sixxElement context: aSixxContext ].
assoc value: {inst. elemId. }.
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
*sixx-instance creation
readSixxFrom: xmlStringOrStream
^ self
readSixxFrom: xmlStringOrStream
context: SixxContext forRead
persistentRoot: nil
readSixxFrom: xmlStringOrStream
^ self readSixxFrom: xmlStringOrStream context: SixxContext forRead persistentRoot: nil
Original file line number Diff line number Diff line change
@@ -1,41 +1,33 @@
*sixx-instance creation
readSixxFromSixxElement: sixxElement context: aSixxContext
| rootClass typeAttr |
typeAttr := self typeFromSixxElement: sixxElement.
^ typeAttr isEmptyOrNil
ifTrue: [
(self includesRefInstanceFromSixxElement: sixxElement context: aSixxContext)
ifTrue: [ self refInstanceFromSixxElement: sixxElement context: aSixxContext ] ]
ifFalse: [
rootClass := self classFromSixxElement: sixxElement context: aSixxContext.
rootClass isNil
ifFalse: [
| stack objects |
stack := aSixxContext stack.
objects := OrderedCollection with: nil.
stack
add:
#'from'
->
{rootClass.
sixxElement}.
[ stack isEmpty ]
whileFalse: [
| assoc |
assoc := stack removeLast.
assoc key == #'from'
ifTrue: [ (assoc value at: 1) fromSixxElement: (assoc value at: 2) context: aSixxContext ].
assoc key == #'block'
ifTrue: [ assoc value value: objects ]. "only initialize and ref should push values onto objects as they are the two possible results of #from"
assoc key == #'ref'
ifTrue: [ objects add: assoc value ].
assoc key == #'initialize'
ifTrue: [
| obj eid |
obj := assoc value at: 1.
eid := assoc value at: 2.
obj sixxInitialize.
obj := obj sixxReadValue.
aSixxContext at: eid put: obj.
objects add: obj ] ].
^ objects removeLast ] ]
readSixxFromSixxElement: sixxElement context: aSixxContext
| rootClass typeAttr |
typeAttr := self typeFromSixxElement: sixxElement.
^typeAttr isNil
ifTrue: [(self includesRefInstanceFromSixxElement: sixxElement context: aSixxContext)
ifTrue: [ self refInstanceFromSixxElement: sixxElement context: aSixxContext ]]
ifFalse: [
rootClass := self classFromSixxElement: sixxElement context: aSixxContext.
rootClass isNil
ifFalse: [ | stack objects |
stack := aSixxContext stack.
objects := OrderedCollection with: nil.
stack add: #from -> {rootClass. sixxElement.}.
[ stack isEmpty ]
whileFalse: [ | assoc |
assoc := stack removeLast.
assoc key == #from
ifTrue: [ (assoc value at: 1) fromSixxElement: (assoc value at: 2) context: aSixxContext ].
assoc key == #block
ifTrue: [ assoc value value: objects ].
"only initialize and ref should push values onto objects as they are the two possible results of #from"
assoc key == #ref
ifTrue: [ objects add: assoc value ].
assoc key == #initialize
ifTrue: [ | obj eid |
obj := assoc value at: 1.
eid := assoc value at: 2.
obj sixxInitialize.
obj := obj sixxReadValue.
aSixxContext at: eid put: obj.
objects add: obj ]].
^objects removeLast ]]
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,23 @@
"class" : {
},
"instance" : {
"classFromSixxElement:context:" : "PaulDeBruicker 09/24/2013 18:10",
"classFromSixxElement:context:" : "mu 10/4/2007 16:56",
"createInstanceOf:withSixxElement:" : "mu 6/25/2004 03:25",
"createMixedFieldsInstanceOf:withSixxElement:" : "PaulDeBruicker 09/24/2013 12:47",
"createMixedFieldsInstanceOf:withSixxElement:" : "mu 6/25/2004 03:25",
"envFromSixxElement:" : "mu 3/29/2007 23:15",
"formatterFromSixxElement:for:context:" : "PaulDeBruicker 09/23/2013 00:38",
"formatterFromSixxElement:for:context:" : "mu 10/16/2007 19:59",
"formatterNameFromSixxElement:" : "mu 10/9/2007 17:32",
"fromSixxElement:context:" : "dkh 10/07/2008 20:02",
"idFromSixxElement:" : "mu 7/13/2008 20:34",
"idrefFromSixxElement:" : "mu 7/13/2008 20:33",
"includesRefInstanceFromSixxElement:context:" : "PaulDeBruicker 09/24/2013 19:13",
"includesRefInstanceFromSixxElement:context:" : "kuri-t 6/3/2002 16:06",
"nameFromSixxElement:" : "mu 3/29/2007 23:13",
"newInstanceFromSixxElement:context:" : "PaulDeBruicker 09/24/2013 18:49",
"readSixxFrom:" : "PaulDeBruicker 09/24/2013 18:37",
"newInstanceFromSixxElement:context:" : "dkh 10/07/2008 20:01",
"readSixxFrom:" : "dkh 10/02/2008 12:10",
"readSixxFrom:context:" : "dkh 10/02/2008 12:11",
"readSixxFrom:context:persistentRoot:" : "dkh 10/08/2008 10:18",
"readSixxFrom:persistentRoot:" : "dkh 10/02/2008 12:09",
"readSixxFromSixxElement:context:" : "PaulDeBruicker 09/24/2013 19:14",
"readSixxFromSixxElement:context:" : "dkh 10/07/2008 20:14",
"refInstanceFromSixxElement:context:" : "mu 2/9/2007 10:20",
"sixxIgnorableInstVarNames" : "dkh 12/07/2012 14:21",
"sixxNew:size:withSixxElement:" : "dkh 10/01/2008 14:41",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
*sixx-instance creation
createInstanceOf: aClass withSixxElement: sixxElement
^ self readFrom: (ReadStream on: (SixxXmlUtil characterDataFrom: sixxElement))
| characterData readStream |

characterData := SixxXmlUtil characterDataFrom: sixxElement.
(readStream := characterData readStream) skipSeparators.
"GS Character>>#readFrom: cannot handle self-evaluable Character expressions
like '(Character value: 123)' or '(123 asCharacter)', so we handle those
with #evaluate and do a type check after"
(readStream atEnd not
and: [readStream peek == $(])
ifTrue: [| nonByteOrNonXMLChar |
((nonByteOrNonXMLChar := characterData evaluate) isKindOf: self)
ifFalse: [self error: self name, ' expected'].
^ nonByteOrNonXMLChar]
ifFalse: [
"otherwise, we can use #readStream:"
^ self readFrom: readStream]
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
*sixx-printing
sixxContentOn: aStream indent: level context: dictionary
| cp |
(cp := self codePoint) <= 16rFF
ifTrue: [ aStream nextPutAll: self printString ]
(self isXMLChar
and: [self asInteger <= 16rFF])
ifTrue: [aStream nextPutAll: self printString]
ifFalse: [
aStream nextPut: $$.
cp <= 16rFFFF
ifTrue: [
aStream nextPut: (Character value: cp >> 8).
aStream nextPut: (Character value: (cp bitAnd: 16rFF))]
ifFalse: [
aStream nextPut: (Character value: ((cp >> 24) bitAnd: 16rFF)).
aStream nextPut: (Character value: ((cp >> 16) bitAnd: 16rFF)).
aStream nextPut: (Character value: ((cp >> 8) bitAnd: 16rFF)).
aStream nextPut: (Character value: (cp bitAnd: 16rFF))]]
aStream
nextPut: $(;
nextPutAll: self asInteger asString;
nextPutAll: ' asCharacter)']
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"class" : {
"createInstanceOf:withSixxElement:" : "MU 5/24/2003 18:17" },
"createInstanceOf:withSixxElement:" : "monty 3/17/2018 23:41" },
"instance" : {
"sixxContentOn:indent:context:" : "dkh 10/02/2008 14:58" } }
"sixxContentOn:indent:context:" : "monty 3/17/2018 23:05" } }
Original file line number Diff line number Diff line change
@@ -1,25 +1,15 @@
*sixx-initializing
initializeIndexFieldsFromSixxElement: sixxElement context: aSixxContext
| idx nonameElems |
nonameElems := ((SixxXmlUtil elementsFrom: sixxElement)
select: [ :each | (self class nameFromSixxElement: each) isEmptyOrNil ])
select: [ :elem | (SixxXmlUtil isTextFrom: elem) not ].
idx := nonameElems size.
nonameElems reverse
do: [ :elem |
aSixxContext stack
add:
#'block'
-> [ :objects |
| childInst i |
i := objects removeLast.
childInst := objects removeLast.
self sixxAt: i put: childInst ].
aSixxContext stack add: #'ref' -> idx.
aSixxContext stack
add:
#'from'
->
{(self class).
elem}.
idx := idx - 1 ]
initializeIndexFieldsFromSixxElement: sixxElement context: aSixxContext
| idx nonameElems |
nonameElems := ((SixxXmlUtil elementsFrom: sixxElement)
select: [:each | (self class nameFromSixxElement: each) isNil ]) select: [:elem | (SixxXmlUtil isTextFrom: elem) not ].
idx := nonameElems size.
nonameElems reverse
do: [:elem |
aSixxContext stack add: #block -> [:objects | | childInst i |
i := objects removeLast.
childInst := objects removeLast.
self sixxAt: i put: childInst ].
aSixxContext stack add: #ref -> idx.
aSixxContext stack add: #from -> {self class. elem.}.
idx := idx - 1 ]
Loading