1
0
mirror of https://github.com/lxsang/Diya-API.git synced 2024-12-26 19:38:22 +01:00

initial comit

This commit is contained in:
Dany LE 2021-12-18 02:02:16 +01:00
parent 241a93ab6a
commit 3da6871a3d
6 changed files with 141 additions and 0 deletions

3
.project Normal file
View File

@ -0,0 +1,3 @@
{
'srcDirectory' : ''
}

3
.properties Normal file
View File

@ -0,0 +1,3 @@
{
#format : #tonel
}

View File

@ -0,0 +1,5 @@
Class {
#name : #DiyaBaseObject,
#superclass : #Object,
#category : #'Diya-Core'
}

34
Diya/DiyaBoot.class.st Normal file
View File

@ -0,0 +1,34 @@
Class {
#name : #DiyaBoot,
#superclass : #DiyaBaseObject,
#category : #'Diya-Runtime'
}
{ #category : #'system startup' }
DiyaBoot class >> getLoadedClasses [
^ SessionManager default startupList
collect: [ :c |
(c respondsTo: #registeredClass)
ifTrue: [ c registeredClass ]
ifFalse: [ c ] ]
]
{ #category : #'class initialization' }
DiyaBoot class >> initialize [
Smalltalk addToStartUpList: DiyaBoot
]
{ #category : #'system startup' }
DiyaBoot class >> startUp: status [
self getLoadedClasses
do: [ :c |
Transcript
show: c className;
cr ].
Transcript show: self tickSinceStart; cr.
]
{ #category : #'system startup' }
DiyaBoot class >> tickSinceStart [
^ self ffiCall: #( uint clock() ) module: 'libc.so.6'.
]

View File

@ -0,0 +1,95 @@
Class {
#name : #ImageInitializer,
#superclass : #CommandLineHandler,
#category : #'Diya-Runtime'
}
{ #category : #accessing }
ImageInitializer class >> commandName [
^'init'
]
{ #category : #activation }
ImageInitializer >> activate [
self initializeImage.
(self hasOption: 'save')
ifTrue: [
self snap
].
^ self exitSuccess
]
{ #category : #'init-image' }
ImageInitializer >> getInitListExclude: loaded [
^ Smalltalk allClasses
select: [ :c |
(loaded includes: c) not
and: (c class selectors indexOf: #initialize ifAbsent: [ ]) isNotNil ]
]
{ #category : #'init-image' }
ImageInitializer >> getLoadedClasses [
| list |
list := (SessionManager default startupList
collect: [ :c |
(c respondsTo: #registeredClass)
ifTrue: [ c registeredClass ]
ifFalse: [ c ] ]) asSet.
list add: SourceFileArray.
list add: FFICompilerPlugin.
^ list
]
{ #category : #'init-image' }
ImageInitializer >> initializeImage [
| initializeList retryList loaded |
retryList := Set new.
loaded := self getLoadedClasses.
self preloadSystem: loaded.
initializeList := self getInitListExclude: loaded.
initializeList
do: [ :c |
[ c initialize ]
on: Error
do: [ c = Cursor
ifFalse: [ retryList add: c ] ] ].
retryList
do: [ :c |
Transcript
show: 'CLASS: ' , c asString , ' is not initialized';
cr.
c initialize ].
FFIMethodRegistry resetAll.
Smalltalk garbageCollect.
SourceFiles := SourceFileArray new.
Transcript show: 'Image initialized'; cr.
]
{ #category : #'init-image' }
ImageInitializer >> preloadSystem: loaded [
"load unicode"
|udata ucase base|
base := Smalltalk imageDirectory pathString.
udata := base,'/UnicodeData.txt'.
ucase := base,'/CaseFolding-8.0.0.txt'.
loaded add: (TextConstants initialize; yourself ).
loaded add: (InflateStream initialize; yourself ).
loaded add: (FastInflateStream initialize; yourself ).
EncodedCharSet initialize.
Unicode initializeTagConstants.
Unicode
parseUnicodeDataFrom: (ZnCharacterReadStream on: (File named: udata ) readStream encoding: 'utf8');
parseCaseMappingFrom: (ZnCharacterReadStream on: (File named: ucase ) readStream encoding: 'utf8').
Character characterSet: Unicode.
ByteTextConverter initialize.
CombinedChar parseCompositionMappingFrom: (ZnCharacterReadStream on: (File named: udata ) readStream encoding: 'utf8').
]
{ #category : #activation }
ImageInitializer >> snap [
|pkg|
self class removeFromSystem.
Smalltalk garbageCollect.
Smalltalk snapshot: true andQuit: false.
]

1
Diya/package.st Normal file
View File

@ -0,0 +1 @@
Package { #name : #Diya }