Added some examples showing use of CompiledCodeObject
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 16 Jun 2016 16:56:52 +0100
changeset 24 5aace704e3c8
parent 23 d2d9a2d4d6bf
child 25 bc02c8d447c3
Added some examples showing use of CompiledCodeObject
CompiledCodeObject.st
CompiledCodeObjectExamples.st
CompiledCodeObjectSection.st
CompiledCodeObjectTests.st
Make.proto
Make.spec
ObjectFileLoaderTests.st
abbrev.stc
asm/AJMem.st
asm/AJStackAlignmentTests.st
asm/AJx64AssemblerTests.st
asm/AJx86AssemblerTests.st
asm/AJx86RegisterTests.st
asm/Make.proto
asm/abbrev.stc
asm/bc.mak
asm/jv_dragonfly_asm.st
bc.mak
jv_dragonfly.st
libInit.cc
udis86sx/jv_dragonfly_udis86sx.st
--- a/CompiledCodeObject.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/CompiledCodeObject.st	Thu Jun 16 16:56:52 2016 +0100
@@ -26,7 +26,7 @@
 ExternalAddress subclass:#CompiledCodeObject
 	instanceVariableNames:'compiledCode sections'
 	classVariableNames:''
-	poolDictionaries:''
+	poolDictionaries:'CompiledCodeObjectSectionFormat'
 	category:'System-Compiler-Interface'
 !
 
@@ -193,6 +193,14 @@
     "Created: / 11-01-2016 / 09:31:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+literals
+    "Return literals section"
+
+    ^ self sections detect:[:section | section format == SectionFormatOBJVector ] ifNone:[ nil ].
+
+    "Created: / 16-06-2016 / 12:08:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 sectionNamed: aString
     ^ self sectionNamed: aString ifAbsent:[ self error: 'No section named "', aString , '"' ]
 
@@ -221,9 +229,10 @@
 text
     "Return text (code) section"
 
-    ^ self sections detect:[:section | section isTextSection ] ifNone:[ nil ].
+    ^ self sections detect:[:section | section format == SectionFormatText ] ifNone:[ nil ].
 
     "Created: / 11-01-2016 / 21:14:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 16-06-2016 / 09:22:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CompiledCodeObject methodsFor:'allocation'!
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CompiledCodeObjectExamples.st	Thu Jun 16 16:56:52 2016 +0100
@@ -0,0 +1,183 @@
+"
+    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
+"{ Package: 'jv:dragonfly' }"
+
+"{ NameSpace: Smalltalk }"
+
+TestCase subclass:#CompiledCodeObjectExamples
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-Compiler-Interface-Tests'
+!
+
+!CompiledCodeObjectExamples class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+! !
+
+!CompiledCodeObjectExamples class methodsFor:'testing'!
+
+isTestSelector:aSelector
+    ^ (super isTestSelector:aSelector) or:[ aSelector startsWith: 'example' ]
+
+    "Created: / 16-06-2016 / 00:23:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompiledCodeObjectExamples methodsFor:'examples'!
+
+example01
+    "Shows how to:
+      * allocate a machine code object, 
+      * install some code and
+      * run it"
+
+    | method object machineCode |        
+
+    "We need to create a method for which we allocate a code object.
+     Even though we may not install the method anywhere, we still need it
+     as the Method instance keeps the reference to the code object and
+     therefore prevents it from being garbage collected."
+    method := Method new.
+    method numberOfArgs: 0.
+    method numberOfVars: 0.
+    method stackSize: 0. 
+
+    "Now allocate a code object for the method. We don't know the size of the code yet
+     (so we pass 0 as .text section size) and - in this example - we won't need any ILC
+     nor literal vector. Remember we can allocate the .text section later once we know
+     the size of the machine code."
+    object := CompiledCodeObject forCompiledCode: method text: 0 literals: 0 ilcs: 0. 
+
+    "Generate some machine code:"
+    machineCode := #[184 11 0 0 0 195].
+    "This was easy, wasn't it? The above is
+        mov eax, 0xb
+        ret
+     i.e., a super-simple function that returns a SmallInteger value of 5.    
+
+     Now we need to allocate a .text section and copy the machine code there:"
+    object allocateTextSection: machineCode size.           
+    object text replaceFrom: 1 with: machineCode.
+
+    "Almost there. The final step is to update a code pointer of the method to
+     the machine code we just installed:"
+    method code: object text address.
+
+    "Let's execute it:"
+    self assert: 5 == (method valueWithReceiver:1 arguments:#()).
+
+    "Created: / 16-06-2016 / 00:23:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (format): / 16-06-2016 / 09:29:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+example02
+    "Shows how to access a constant object (literal) within a machine code.
+     As object may be moved around by a garbage collector, we cannot simply
+     take object's address and return it - it will soon become invalid.
+
+     So, to access a constant object from a machine code, we have to allocate
+     a special 'object vector' section and put the object there and access it
+     indirectly using object's index in the vector and section base address.
+     By marking the section as 'object vector' section, the garbage collector
+     knows it contains objects and whenever it moves an object referenced from
+     there, it updates the pointer in the section data. Note, that section
+     data never moves.
+    "
+
+    | literal method object asm machineCode |        
+
+    "Create a constant object to return from machine code"
+    literal := 'Some cool literal' copy.
+
+    method := Method new.
+    method numberOfArgs: 0.
+    method numberOfVars: 0.
+    method stackSize: 0. 
+
+    "Now allocate a code object for the method. We don't know the size of the code yet
+     (so we pass 0 as .text section size). We need to reference our `literal` object,
+     so allocate 'object vector' section with size 1 (we need only one object). Still
+     no ILCs."
+    object := CompiledCodeObject forCompiledCode: method text: 0 literals: 1 ilcs: 0.
+
+    "Store our literal object into the object vector section"
+    object literals at: 1 put: literal.
+
+    "Actually, generate the machine code. Do it with help of Igor Stasenko AsmJIT, 
+     it iss easier to see it in symbolic instructions rather than machine code"
+    self skipIf: (OperatingSystem getCPUType ~~ #x86) description: 'AsmJIT works fine only for i386 assembly :-('.
+    self skipIf: (Smalltalk includesKey: #AJx86Assembler) not description: 'AsmJIT not available'.
+
+    asm := AJx86Assembler noStackFrame.
+    asm mov: (object literals address asUImm32 ptr) -> asm EAX.
+    asm ret.
+    machineCode := asm bytes.
+    "
+    To check the generated code, inspect
+        UDIS86 disassemble: machineCode
+    "
+
+    "Now we need to allocate a .text section and copy the machine code there:"
+    object allocateTextSection: machineCode size.           
+    object text replaceFrom: 1 with: machineCode.
+
+    "Almost there. The final step is to update a code pointer of the method to
+     the machine code we just installed:"
+    method code: object text address.
+
+    "Let's execute it:"
+    self assert: literal == (method valueWithReceiver:1 arguments:#()).
+
+    "Created: / 16-06-2016 / 12:29:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 16-06-2016 / 17:22:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!CompiledCodeObjectExamples class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- a/CompiledCodeObjectSection.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/CompiledCodeObjectSection.st	Thu Jun 16 16:56:52 2016 +0100
@@ -166,11 +166,7 @@
                 if ( (_index < 0) || ( _index >= (_size / sizeof(OBJ)) ) )  {
                     failureReason = @symbol(BadArg1OutOfBounds);
                     goto error;
-                }
-                if ( ! __isExternalAddress(__INST(object)) ) {
-                    failureReason = @symbol(BadObject);
-                    goto error;                
-                }
+                }              
                 OBJ *vector = (OBJ*)(__externalAddressVal(self));                
                 vector[_index] = value;
                 stxCompiledCodeObjectOBJVectorModified(__externalAddressVal(__INST(object)));
--- a/CompiledCodeObjectTests.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/CompiledCodeObjectTests.st	Thu Jun 16 16:56:52 2016 +0100
@@ -1,3 +1,24 @@
+"
+    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
 "{ Package: 'jv:dragonfly' }"
 
 "{ NameSpace: Smalltalk }"
@@ -11,6 +32,31 @@
 
 !CompiledCodeObjectTests class methodsFor:'documentation'!
 
+copyright
+"
+    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+!
+
 documentation
 "
     documentation to be added.
--- a/Make.proto	Wed Jun 15 23:46:29 2016 +0100
+++ b/Make.proto	Thu Jun 16 16:56:52 2016 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic -I$(INCLUDE_TOP)/stx/libcomp
 
 
 # if you need any additional defines for embedded C code,
@@ -121,10 +121,10 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)CompiledCodeObject.$(O) CompiledCodeObject.$(C) CompiledCodeObject.$(H): CompiledCodeObject.st $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CompiledCodeObjectSectionFormat.$(O) CompiledCodeObjectSectionFormat.$(C) CompiledCodeObjectSectionFormat.$(H): CompiledCodeObjectSectionFormat.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)VMOffsets.$(O) VMOffsets.$(C) VMOffsets.$(H): VMOffsets.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)jv_dragonfly.$(O) jv_dragonfly.$(C) jv_dragonfly.$(H): jv_dragonfly.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)CompiledCodeObject.$(O) CompiledCodeObject.$(C) CompiledCodeObject.$(H): CompiledCodeObject.st $(INCLUDE_TOP)/jv/dragonfly/CompiledCodeObjectSectionFormat.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalAddress.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)CompiledCodeObjectSection.$(O) CompiledCodeObjectSection.$(C) CompiledCodeObjectSection.$(H): CompiledCodeObjectSection.st $(INCLUDE_TOP)/jv/dragonfly/CompiledCodeObjectSectionFormat.$(H) $(INCLUDE_TOP)/stx/libbasic/ArrayedCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Collection.$(H) $(INCLUDE_TOP)/stx/libbasic/ExternalBytes.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SequenceableCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)VMData.$(O) VMData.$(C) VMData.$(H): VMData.st $(INCLUDE_TOP)/jv/dragonfly/VMOffsets.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/SharedPool.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/libbasic/CompiledCode.$(H) $(INCLUDE_TOP)/stx/libbasic/ExecutableFunction.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
--- a/Make.spec	Wed Jun 15 23:46:29 2016 +0100
+++ b/Make.spec	Thu Jun 16 16:56:52 2016 +0100
@@ -51,10 +51,10 @@
 STCWARNINGS=-warnNonStandard
 
 COMMON_CLASSES= \
-	CompiledCodeObject \
 	CompiledCodeObjectSectionFormat \
 	VMOffsets \
 	jv_dragonfly \
+	CompiledCodeObject \
 	CompiledCodeObjectSection \
 	VMData \
 
@@ -62,10 +62,10 @@
 
 
 COMMON_OBJS= \
-    $(OUTDIR_SLASH)CompiledCodeObject.$(O) \
     $(OUTDIR_SLASH)CompiledCodeObjectSectionFormat.$(O) \
     $(OUTDIR_SLASH)VMOffsets.$(O) \
     $(OUTDIR_SLASH)jv_dragonfly.$(O) \
+    $(OUTDIR_SLASH)CompiledCodeObject.$(O) \
     $(OUTDIR_SLASH)CompiledCodeObjectSection.$(O) \
     $(OUTDIR_SLASH)VMData.$(O) \
     $(OUTDIR_SLASH)extensions.$(O) \
--- a/ObjectFileLoaderTests.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/ObjectFileLoaderTests.st	Thu Jun 16 16:56:52 2016 +0100
@@ -1,3 +1,24 @@
+"
+    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
 "{ Package: 'jv:dragonfly' }"
 
 "{ NameSpace: Smalltalk }"
@@ -9,6 +30,32 @@
 	category:'System-Compiler-Tests'
 !
 
+!ObjectFileLoaderTests class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (c) 2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+! !
 
 !ObjectFileLoaderTests methodsFor:'test - dlsym / GetProcAddress'!
 
--- a/abbrev.stc	Wed Jun 15 23:46:29 2016 +0100
+++ b/abbrev.stc	Thu Jun 16 16:56:52 2016 +0100
@@ -1,11 +1,12 @@
 # automagically generated by the project definition
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
-CompiledCodeObject CompiledCodeObject jv:dragonfly 'System-Compiler-Interface' 0
+CompiledCodeObjectExamples CompiledCodeObjectExamples jv:dragonfly 'System-Compiler-Interface-Tests' 1
 CompiledCodeObjectSectionFormat CompiledCodeObjectSectionFormat jv:dragonfly 'System-Compiler-Interface' 0
 VMOffsets VMOffsets jv:dragonfly 'System-Compiler-Interface' 0
 jv_dragonfly jv_dragonfly jv:dragonfly '* Projects & Packages *' 3
+CompiledCodeObject CompiledCodeObject jv:dragonfly 'System-Compiler-Interface' 0
 CompiledCodeObjectSection CompiledCodeObjectSection jv:dragonfly 'System-Compiler-Interface' 0
+CompiledCodeObjectTests CompiledCodeObjectTests jv:dragonfly 'System-Compiler-Interface-Tests' 1
 VMData VMData jv:dragonfly 'System-Compiler-Interface' 0
-CompiledCodeObjectTests CompiledCodeObjectTests jv:dragonfly 'System-Compiler-Interface-Tests' 1
 ObjectFileLoaderTests ObjectFileLoaderTests jv:dragonfly 'System-Compiler-Tests' 1
--- a/asm/AJMem.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/AJMem.st	Thu Jun 16 16:56:52 2016 +0100
@@ -367,7 +367,9 @@
 
 isUpperBank
     "see `AJBaseReg >> #isUpperBank` "
-    ^ self base isUpperBank
+    ^ base notNil and:[ base isUpperBank ]
+
+    "Modified: / 16-06-2016 / 13:58:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 prohibitsRex 
--- a/asm/AJStackAlignmentTests.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/AJStackAlignmentTests.st	Thu Jun 16 16:56:52 2016 +0100
@@ -1,3 +1,29 @@
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
 "{ Package: 'jv:dragonfly/asm' }"
 
 "{ NameSpace: Smalltalk }"
@@ -9,6 +35,38 @@
 	category:'AsmJit-Tests'
 !
 
+!AJStackAlignmentTests class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+! !
+
 !AJStackAlignmentTests methodsFor:'tests'!
 
 testJumps
--- a/asm/AJx64AssemblerTests.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/AJx64AssemblerTests.st	Thu Jun 16 16:56:52 2016 +0100
@@ -1,3 +1,29 @@
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
 "{ Package: 'jv:dragonfly/asm' }"
 
 "{ NameSpace: Smalltalk }"
@@ -9,6 +35,37 @@
 	category:'AsmJit-Tests'
 !
 
+!AJx64AssemblerTests class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+! !
 
 !AJx64AssemblerTests class methodsFor:'as yet unclassified'!
 
--- a/asm/AJx86AssemblerTests.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/AJx86AssemblerTests.st	Thu Jun 16 16:56:52 2016 +0100
@@ -1,3 +1,29 @@
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
 "{ Package: 'jv:dragonfly/asm' }"
 
 "{ NameSpace: Smalltalk }"
@@ -9,6 +35,38 @@
 	category:'AsmJit-Tests'
 !
 
+!AJx86AssemblerTests class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+! !
+
 !AJx86AssemblerTests methodsFor:'running'!
 
 setUp
--- a/asm/AJx86RegisterTests.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/AJx86RegisterTests.st	Thu Jun 16 16:56:52 2016 +0100
@@ -1,3 +1,29 @@
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+"
 "{ Package: 'jv:dragonfly/asm' }"
 
 "{ NameSpace: Smalltalk }"
@@ -9,6 +35,38 @@
 	category:'AsmJit-Tests'
 !
 
+!AJx86RegisterTests class methodsFor:'documentation'!
+
+copyright
+"
+    Copyright (c) 2012-2016 Igor Stasenko
+                            Martin McClure
+                            Damien Pollet
+                            Camillo Bruni
+                            Guido Chari
+                   2016-now Jan Vrany <jan.vrany [at] fit . cvut . cz>
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the 'Software'), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+
+"
+! !
+
 !AJx86RegisterTests methodsFor:'as yet unclassified'!
 
 testAsHighByte
--- a/asm/Make.proto	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/Make.proto	Thu Jun 16 16:56:52 2016 +0100
@@ -34,7 +34,7 @@
 # add the path(es) here:,
 # ********** OPTIONAL: MODIFY the next lines ***
 # LOCALINCLUDES=-Ifoo -Ibar
-LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/goodies/sunit -I$(INCLUDE_TOP)/stx/libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)/stx/libbasic
 
 
 # if you need any additional defines for embedded C code,
--- a/asm/abbrev.stc	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/abbrev.stc	Thu Jun 16 16:56:52 2016 +0100
@@ -29,20 +29,20 @@
 AJCallCleanup AJCallCleanup jv:dragonfly/asm 'AsmJit-StackManagement' 0
 AJImmediate AJImmediate jv:dragonfly/asm 'AsmJit-Operands' 0
 AJMem AJMem jv:dragonfly/asm 'AsmJit-Operands' 0
-AJStackAlignmentTests AJStackAlignmentTests jv:dragonfly/asm 'AsmJit-Tests' 1
 AJx64Instruction AJx64Instruction jv:dragonfly/asm 'AsmJit-x86-Instructions' 0
 AJx86Assembler AJx86Assembler jv:dragonfly/asm 'AsmJit-x86' 0
-AJx86AssemblerTests AJx86AssemblerTests jv:dragonfly/asm 'AsmJit-Tests' 1
 AJx86InstructionDescription AJx86InstructionDescription jv:dragonfly/asm 'AsmJit-x86-Instructions' 2
 AJx86JumpInstruction AJx86JumpInstruction jv:dragonfly/asm 'AsmJit-x86-Instructions' 0
-AJx86RegisterTests AJx86RegisterTests jv:dragonfly/asm 'AsmJit-Tests' 1
 AJMMRegister AJMMRegister jv:dragonfly/asm 'AsmJit-x86-Operands' 0
 AJRegister AJRegister jv:dragonfly/asm 'AsmJit-Operands' 0
 AJx64Assembler AJx64Assembler jv:dragonfly/asm 'AsmJit-x86' 0
-AJx64AssemblerTests AJx64AssemblerTests jv:dragonfly/asm 'AsmJit-Tests' 1
 AJx64InstructionDescription AJx64InstructionDescription jv:dragonfly/asm 'AsmJit-x86-Instructions' 2
 AJx64JumpInstruction AJx64JumpInstruction jv:dragonfly/asm 'AsmJit-x86-Instructions' 0
 AJx87Register AJx87Register jv:dragonfly/asm 'AsmJit-x86-Operands' 0
 AJxMMRegister AJxMMRegister jv:dragonfly/asm 'AsmJit-x86-Operands' 0
 AJx86GPRegister AJx86GPRegister jv:dragonfly/asm 'AsmJit-x86-Operands' 0
 AJx64RipRegister AJx64RipRegister jv:dragonfly/asm 'AsmJit-x86-Operands' 0
+AJStackAlignmentTests AJStackAlignmentTests jv:dragonfly/asm 'AsmJit-Tests' 1
+AJx86AssemblerTests AJx86AssemblerTests jv:dragonfly/asm 'AsmJit-Tests' 1
+AJx64AssemblerTests AJx64AssemblerTests jv:dragonfly/asm 'AsmJit-Tests' 1
+AJx86RegisterTests AJx86RegisterTests jv:dragonfly/asm 'AsmJit-Tests' 1
--- a/asm/bc.mak	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/bc.mak	Thu Jun 16 16:56:52 2016 +0100
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
--- a/asm/jv_dragonfly_asm.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/asm/jv_dragonfly_asm.st	Thu Jun 16 16:56:52 2016 +0100
@@ -102,7 +102,6 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'stx:goodies/sunit'    "TestAsserter - superclass of AJStackAlignmentTests"
     )
 !
 
@@ -154,29 +153,33 @@
         AJCallCleanup
         AJImmediate
         AJMem
-        (AJStackAlignmentTests autoload)
         AJx64Instruction
         AJx86Assembler
-        (AJx86AssemblerTests autoload)
         AJx86InstructionDescription
         AJx86JumpInstruction
-        (AJx86RegisterTests autoload)
         AJMMRegister
         AJRegister
         AJx64Assembler
-        (AJx64AssemblerTests autoload)
         AJx64InstructionDescription
         AJx64JumpInstruction
         AJx87Register
         AJxMMRegister
         AJx86GPRegister
         AJx64RipRegister
+        (AJStackAlignmentTests autoload)
+        (AJx86AssemblerTests autoload)
+        (AJx64AssemblerTests autoload)
+        (AJx86RegisterTests autoload)
     )
+
+    "Modified: / 16-06-2016 / 16:56:05 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 extensionMethodNames
-    "list class/selector pairs of extensions.
-     A correponding method with real names must be present in my concrete subclasses"
+    "lists the extension methods which are to be included in the project.
+     Entries are 2-element array literals, consisting of class-name and selector.
+     A correponding method with real names must be present in my concrete subclasses
+     if it has extensions."
 
     ^ #(
         Integer asAJOperand
--- a/bc.mak	Wed Jun 15 23:46:29 2016 +0100
+++ b/bc.mak	Thu Jun 16 16:56:52 2016 +0100
@@ -35,7 +35,7 @@
 
 
 
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\goodies\sunit -I$(INCLUDE_TOP)\stx\libbasic -I$(INCLUDE_TOP)\stx\libcomp
 LOCALDEFINES=
 
 STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES)  -varPrefix=$(LIBNAME)
@@ -68,10 +68,10 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)CompiledCodeObject.$(O) CompiledCodeObject.$(C) CompiledCodeObject.$(H): CompiledCodeObject.st $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CompiledCodeObjectSectionFormat.$(O) CompiledCodeObjectSectionFormat.$(C) CompiledCodeObjectSectionFormat.$(H): CompiledCodeObjectSectionFormat.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)VMOffsets.$(O) VMOffsets.$(C) VMOffsets.$(H): VMOffsets.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)jv_dragonfly.$(O) jv_dragonfly.$(C) jv_dragonfly.$(H): jv_dragonfly.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)CompiledCodeObject.$(O) CompiledCodeObject.$(C) CompiledCodeObject.$(H): CompiledCodeObject.st $(INCLUDE_TOP)\jv\dragonfly\CompiledCodeObjectSectionFormat.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalAddress.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)CompiledCodeObjectSection.$(O) CompiledCodeObjectSection.$(C) CompiledCodeObjectSection.$(H): CompiledCodeObjectSection.st $(INCLUDE_TOP)\jv\dragonfly\CompiledCodeObjectSectionFormat.$(H) $(INCLUDE_TOP)\stx\libbasic\ArrayedCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Collection.$(H) $(INCLUDE_TOP)\stx\libbasic\ExternalBytes.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SequenceableCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\UninterpretedBytes.$(H) $(STCHDR)
 $(OUTDIR)VMData.$(O) VMData.$(C) VMData.$(H): VMData.st $(INCLUDE_TOP)\jv\dragonfly\VMOffsets.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\SharedPool.$(H) $(STCHDR)
 $(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
--- a/jv_dragonfly.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/jv_dragonfly.st	Thu Jun 16 16:56:52 2016 +0100
@@ -92,6 +92,7 @@
      by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
+        #'stx:goodies/sunit'    "TestAsserter - superclass of CompiledCodeObjectExamples"
         #'stx:libcomp'    "ObjectFileLoader - referenced by VMData class>>initialize"
     )
 !
@@ -120,20 +121,23 @@
 
     ^ #(
         "<className> or (<className> attributes...) in load order"
-        CompiledCodeObject
+        (CompiledCodeObjectExamples autoload)
         CompiledCodeObjectSectionFormat
         VMOffsets
         #'jv_dragonfly'
+        CompiledCodeObject
         CompiledCodeObjectSection
+        (CompiledCodeObjectTests autoload)
         VMData
-        (CompiledCodeObjectTests autoload)
         (ObjectFileLoaderTests autoload)
     )
 !
 
 extensionMethodNames
-    "list class/selector pairs of extensions.
-     A correponding method with real names must be present in my concrete subclasses"
+    "lists the extension methods which are to be included in the project.
+     Entries are 2-element array literals, consisting of class-name and selector.
+     A correponding method with real names must be present in my concrete subclasses
+     if it has extensions."
 
     ^ #(
         CompiledCode codeObject
--- a/libInit.cc	Wed Jun 15 23:46:29 2016 +0100
+++ b/libInit.cc	Thu Jun 16 16:56:52 2016 +0100
@@ -16,10 +16,10 @@
 DLL_EXPORT void _libjv_dragonfly_InitDefinition() INIT_TEXT_SECTION;
 #endif
 
-extern void _CompiledCodeObject_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _CompiledCodeObjectSectionFormat_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VMOffsets_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _jv_137dragonfly_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
+extern void _CompiledCodeObject_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _CompiledCodeObjectSection_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 extern void _VMData_Init(int pass, struct __vmData__ *__pRT__, OBJ snd);
 
@@ -35,10 +35,10 @@
 void _libjv_dragonfly_Init(int pass, struct __vmData__ *__pRT__, OBJ snd)
 {
   __BEGIN_PACKAGE2__("libjv_dragonfly", _libjv_dragonfly_Init, "jv:dragonfly");
-    _CompiledCodeObject_Init(pass,__pRT__,snd);
     _CompiledCodeObjectSectionFormat_Init(pass,__pRT__,snd);
     _VMOffsets_Init(pass,__pRT__,snd);
     _jv_137dragonfly_Init(pass,__pRT__,snd);
+    _CompiledCodeObject_Init(pass,__pRT__,snd);
     _CompiledCodeObjectSection_Init(pass,__pRT__,snd);
     _VMData_Init(pass,__pRT__,snd);
 
--- a/udis86sx/jv_dragonfly_udis86sx.st	Wed Jun 15 23:46:29 2016 +0100
+++ b/udis86sx/jv_dragonfly_udis86sx.st	Thu Jun 16 16:56:52 2016 +0100
@@ -191,8 +191,10 @@
 !
 
 extensionMethodNames
-    "list class/selector pairs of extensions.
-     A correponding method with real names must be present in my concrete subclasses"
+    "lists the extension methods which are to be included in the project.
+     Entries are 2-element array literals, consisting of class-name and selector.
+     A correponding method with real names must be present in my concrete subclasses
+     if it has extensions."
 
     ^ #(
     )