CompiledCodeObject.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 11 Jan 2016 21:46:49 +0000
changeset 8 b6b52d803b4c
parent 5 7b9132bf8295
child 9 40f9438e9de3
permissions -rw-r--r--
Added support for creating a new code object ...for a new, not yet compiled, method. This will be used by the in-image compiler.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
Copyright (c) 2015-now Jan Vrany <jan.vrany@fit.cvut.cz>
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
Permission is hereby granted, free of charge, to any person obtaining a copy
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
of this software and associated documentation files (the 'Software'), to deal
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
in the Software without restriction, including without limitation the rights
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
copies of the Software, and to permit persons to whom the Software is
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
furnished to do so, subject to the following conditions:
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
The above copyright notice and this permission notice shall be included in
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
all copies or substantial portions of the Software.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
THE SOFTWARE.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
"{ Package: 'jv:dragonfly' }"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
"{ NameSpace: Smalltalk }"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
ExternalAddress subclass:#CompiledCodeObject
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    27
	instanceVariableNames:'compiledCode sections'
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	classVariableNames:''
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
	poolDictionaries:''
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
	category:'System-Compiler-Interface'
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!CompiledCodeObject primitiveDefinitions!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
%{
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
/*
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
 * includes, defines, structure definitions
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
 * and typedefs come here.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
 */
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
#include "../librun/mcompiler.h"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
%}
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
!CompiledCodeObject class methodsFor:'documentation'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
copyright
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
Copyright (c) 2015-now Jan Vrany <jan.vrany@fit.cvut.cz>
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
Permission is hereby granted, free of charge, to any person obtaining a copy
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
of this software and associated documentation files (the 'Software'), to deal
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
in the Software without restriction, including without limitation the rights
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
copies of the Software, and to permit persons to whom the Software is
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
furnished to do so, subject to the following conditions:
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
The above copyright notice and this permission notice shall be included in
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
all copies or substantial portions of the Software.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
THE SOFTWARE.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
!CompiledCodeObject class methodsFor:'instance creation'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
forCompiledCode: aCompiledCode
8
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    74
    "Given a method or block, return coresponding code object for it. 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    75
     If the method or block is not yet dynamically compiled, throw an exception. 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    76
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    77
     If you want to create a new compiled code object for given method or block, 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
    78
     use forCompiledCode:text:literals:ilcs:. For details, see comment there."
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    80
    | instance |
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    82
    instance := self new.
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
%{
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    stx_compiled_code_object code_object;
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    code_object = stxCompiledCodeObjectForCompiledCode(aCompiledCode);
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    86
    if (code_object == NULL) {
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    87
        instance = nil;
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    88
    } else {
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
        __externalAddressVal(instance) = code_object;
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    }
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
%}.
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    92
    instance isNil ifTrue:[ 
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    93
        self error: 'No code object associated with given method. Method not yet compiled?'
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    94
    ].
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    95
    instance setCompiledCode: aCompiledCode.
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    96
    ^ instance.
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
    "Created: / 07-12-2015 / 10:58:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
    99
    "Modified: / 11-01-2016 / 09:39:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   100
    "Modified (comment): / 11-01-2016 / 16:26:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   101
!
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   102
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   103
forCompiledCode: compiledCode text: textSize"in bytes" literals: numLits ilcs: numILCs
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   104
    "Given a method or block, allocate a *new* code object for it. The text size
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   105
     passed may be 0 and could be allocated later using #allocateTextSection:.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   106
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   107
     If the method or block is already compiled, i.e., it has a compiled code object
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   108
     associated with it, throw an error.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   109
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   110
     If you want to create compiled code object for already compiled code,
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   111
     use forCompiledCode:.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   112
    "
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   113
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   114
    | instance failureReason |
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   115
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   116
    instance := self new.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   117
    failureReason := nil.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   118
%{    
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   119
    stx_compiled_code_object code_object;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   120
    INT _textSize;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   121
    INT _numLits;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   122
    INT _numILCs;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   123
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   124
    if (!( __isSmallInteger( textSize ) && ( _textSize = __intVal( textSize ), (_textSize >= 0) && (_textSize <= UINT32_MAX) ) ) ) {
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   125
        failureReason = @symbol(BadArg2);
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   126
        goto done;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   127
    }
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   128
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   129
    if (!( __isSmallInteger( numLits ) && ( _numLits = __intVal( numLits ), (_numLits >= 0) && (_numLits <= UINT16_MAX) ) ) ) {       
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   130
        failureReason = @symbol(BadArg3);
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   131
        goto done;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   132
    }
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   133
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   134
    if (!( __isSmallInteger( numILCs ) && ( _numILCs = __intVal( numILCs ), (_numILCs >= 0) && (_numILCs <= UINT16_MAX) ) ) ) {       
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   135
        failureReason = @symbol(BadArg4);
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   136
        goto done;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   137
    }
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   138
    code_object = stxCompiledCodeObjectForCompiledCode(compiledCode);
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   139
    if (code_object != NULL) {
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   140
        instance = nil;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   141
        failureReason = @symbol(BadArg1);
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   142
    } else {
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   143
        code_object = stxCompiledCodeObjectAlloc(compiledCode, _textSize, _numLits, _numILCs);
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   144
        __externalAddressVal(instance) = code_object;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   145
    }
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   146
    done:;
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   147
%}.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   148
    failureReason == #BadArg1 ifTrue:[ 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   149
        self error: 'Bad Argument "compiledCode": not a compiled code or already associated'.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   150
        ^ nil
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   151
    ].
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   152
    failureReason == #BadArg2 ifTrue:[ 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   153
        self error: 'Bad Argument "textSize": not a SmallInteger or out of range'.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   154
        ^ nil
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   155
    ].
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   156
    failureReason == #BadArg2 ifTrue:[ 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   157
        self error: 'Bad Argument "numLits": not a SmallInteger or out of range'.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   158
        ^ nil
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   159
    ].
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   160
    failureReason == #BadArg2 ifTrue:[ 
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   161
        self error: 'Bad Argument "numILCs": not a SmallInteger or out of range'.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   162
        ^ nil
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   163
    ].
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   164
    instance setCompiledCode: compiledCode.
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   165
    ^ instance
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   166
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   167
    "Created: / 11-01-2016 / 16:42:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   168
    "Modified: / 11-01-2016 / 21:17:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
!CompiledCodeObject methodsFor:'accessing'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   173
compiledCode
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
    "Return method or block associated with this code object."
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   175
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   176
    | compiledCodeFromObject |
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   177
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   178
    compiledCodeFromObject := compiledCode.
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
%{
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   180
    if (__ExecutableCodeInstPtr(__INST(compiledCode))->ex_code != NULL) {
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   181
        if ( (INT)(__ExecutableCodeInstPtr(__INST(compiledCode))->ex_flags) & __MASKSMALLINT(F_DYNAMIC)  ) {
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   182
            stx_compiled_code_object code_object = (stx_compiled_code_object)(__externalAddressVal(self));
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   183
            if (code_object != NULL) {
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   184
                compiledCodeFromObject = stxCompiledCodeObjectGetCompiledCode(code_object);
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   185
            }
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   186
        }
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
    }
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
%}.
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   189
    self assert: compiledCode == compiledCodeFromObject
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   190
         description: 'compiled code mismatch'.
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   191
    ^ compiledCode.
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   193
    "Created: / 11-01-2016 / 09:31:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
sections
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
    | numSections |
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
    numSections := self numSections.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
    (sections isNil or:[ sections size ~= numSections ]) ifTrue:[ 
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
        sections := (1 to: numSections) collect:[ :i | self getSection: i ].
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
    ].
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
    ^ sections
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    "Created: / 07-12-2015 / 17:09:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
8
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   206
!
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   207
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   208
text
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   209
    "Return text (code) section"
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   210
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   211
    ^ self sections detect:[:section | section isTextSection ] ifNone:[ nil ].
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   212
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   213
    "Created: / 11-01-2016 / 21:14:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   214
! !
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   215
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   216
!CompiledCodeObject methodsFor:'allocation'!
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   217
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   218
allocateTextSection: sizeInBytes
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   219
    "Alocates new text section for the receiver. Throw an error if there's
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   220
     already a text section allocated for this object."
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   221
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   222
    self halt: 'Not yet implemented'
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   223
b6b52d803b4c Added support for creating a new code object
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 5
diff changeset
   224
    "Created: / 11-01-2016 / 20:18:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
5
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   227
!CompiledCodeObject methodsFor:'initialization'!
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   228
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   229
setCompiledCode: aCompiledCode
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   230
    compiledCode := aCompiledCode
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   231
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   232
    "Created: / 11-01-2016 / 09:50:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   233
! !
7b9132bf8295 Added support for "special cells section"
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 2
diff changeset
   234
2
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
!CompiledCodeObject methodsFor:'inspecting'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
inspector2TabText
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
    <inspector2Tab>   
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
    self sections do:[:section | 
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
        section isTextSection ifTrue:[ 
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
            | tab |
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
            tab := section inspector2TabAssembly.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
            tab notNil ifTrue:[
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
                tab label: '.text'.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
                ^ tab.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
            ].                    
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
        ].
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
    ].
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
    ^ nil
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
    "Created: / 11-12-2015 / 12:04:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
    "Modified: / 11-12-2015 / 14:11:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
!CompiledCodeObject methodsFor:'private'!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
getSection: index
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
    | name addr size type |
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
%{
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
    if (__isSmallInteger(index)) {
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
        stx_compiled_code_object code_object = (stx_compiled_code_object)(__externalAddressVal(self));
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
        stx_compiled_code_object_section code_section;
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
        code_section = stxCompiledCodeObjectGetSection ( code_object , __intVal( index ) - 1 );
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
        if (code_section) {
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
            name = __MKSTRING ( code_section->section_name );
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
            size = __MKSMALLINT ( code_section->section_size );
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
            __PROTECT__(name);
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
            addr = __MKUINT( code_section->section_addr );
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
            __UNPROTECT__(name);
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
            type = __MKSMALLINT ( code_section->section_type );
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
        }
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
    }
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
%}.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
    (name notNil and:[ addr notNil and:[ size notNil ]]) ifTrue:[ 
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
        ^ CompiledCodeObjectSection basicNew setObject: self name: name address: addr size: size type: type
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
    ].
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
    self primitiveFailed.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
    "Created: / 07-12-2015 / 17:15:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
    "Modified: / 11-12-2015 / 10:06:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
!
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
numSections
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
    "Return the number of sections of this code object"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
%{
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
    stx_compiled_code_object code_object = (stx_compiled_code_object)(__externalAddressVal(self));
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
    RETURN ( __MKSMALLINT( stxCompiledCodeObjectGetSectionCount ( code_object ) ) );
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
%}.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
    self primitiveFailed.
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
    "Created: / 07-12-2015 / 16:36:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
! !
88445baa732f Introduced a CompiledCodeObject - an interface to VM's macine code management.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297