ByteCodeCompiler.st
author claus
Sun, 16 Jan 1994 04:51:45 +0100
changeset 13 30e69e21d1d1
parent 12 80f627afdd4e
child 15 992c3d87edbf
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
     1
"
4
f6fd83437415 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1989 by Claus Gittinger
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
     3
              All Rights Reserved
7ad01559b262 Initial revision
claus
parents:
diff changeset
     4
7ad01559b262 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
7ad01559b262 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
7ad01559b262 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7ad01559b262 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7ad01559b262 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
7ad01559b262 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    11
"
7ad01559b262 Initial revision
claus
parents:
diff changeset
    12
7ad01559b262 Initial revision
claus
parents:
diff changeset
    13
Parser subclass:#ByteCodeCompiler
7ad01559b262 Initial revision
claus
parents:
diff changeset
    14
       instanceVariableNames:'code codeIndex
7ad01559b262 Initial revision
claus
parents:
diff changeset
    15
                              litArray
7ad01559b262 Initial revision
claus
parents:
diff changeset
    16
                              stackDelta extra lineno
7ad01559b262 Initial revision
claus
parents:
diff changeset
    17
                              maxStackDepth
7ad01559b262 Initial revision
claus
parents:
diff changeset
    18
                              relocList'
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
    19
       classVariableNames:'JumpToAbsJump'
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    20
       poolDictionaries:''
7ad01559b262 Initial revision
claus
parents:
diff changeset
    21
       category:'System-Compiler'
7ad01559b262 Initial revision
claus
parents:
diff changeset
    22
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    23
7ad01559b262 Initial revision
claus
parents:
diff changeset
    24
ByteCodeCompiler comment:'
7ad01559b262 Initial revision
claus
parents:
diff changeset
    25
4
f6fd83437415 *** empty log message ***
claus
parents: 3
diff changeset
    26
COPYRIGHT (c) 1989 by Claus Gittinger
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    27
             All Rights Reserved
7ad01559b262 Initial revision
claus
parents:
diff changeset
    28
13
30e69e21d1d1 *** empty log message ***
claus
parents: 12
diff changeset
    29
$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.8 1994-01-16 03:51:28 claus Exp $
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    30
'!
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    31
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    32
!ByteCodeCompiler class methodsFor:'documentation'!
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    33
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    34
documentation
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    35
"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    36
This class performs compilation into ByteCodes.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    37
First, parsing is done using superclass methods,
7ad01559b262 Initial revision
claus
parents:
diff changeset
    38
then the parse-tree is converted into an array of symbolic codes
7ad01559b262 Initial revision
claus
parents:
diff changeset
    39
and a relocation table; 
7ad01559b262 Initial revision
claus
parents:
diff changeset
    40
these two are finally combined into a byteArray of the codes.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    41
7ad01559b262 Initial revision
claus
parents:
diff changeset
    42
There are many dependancies to the run-time-system (especially the
7ad01559b262 Initial revision
claus
parents:
diff changeset
    43
interpreter) in here - be careful when playing around ...
7ad01559b262 Initial revision
claus
parents:
diff changeset
    44
7ad01559b262 Initial revision
claus
parents:
diff changeset
    45
Instance variables:
7ad01559b262 Initial revision
claus
parents:
diff changeset
    46
7ad01559b262 Initial revision
claus
parents:
diff changeset
    47
code            <ByteArry>              bytecodes
7ad01559b262 Initial revision
claus
parents:
diff changeset
    48
codeIndex       <SmallInteger>          next index to put into code array
7ad01559b262 Initial revision
claus
parents:
diff changeset
    49
litArray        <OrderedCollection>     literals
7ad01559b262 Initial revision
claus
parents:
diff changeset
    50
stackDelta      <SmallInteger>          return value of byteCodeFor:
7ad01559b262 Initial revision
claus
parents:
diff changeset
    51
extra           <Symbol>                return value of byteCodeFor:
7ad01559b262 Initial revision
claus
parents:
diff changeset
    52
maxStackDepth   <SmallInteger>          stack need of method
7ad01559b262 Initial revision
claus
parents:
diff changeset
    53
relocList       <Array>                 used temporary for relocation
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    54
"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
    55
! !
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
    56
7ad01559b262 Initial revision
claus
parents:
diff changeset
    57
!ByteCodeCompiler class methodsFor:'compiling methods'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    58
7ad01559b262 Initial revision
claus
parents:
diff changeset
    59
compile:methodText forClass:classToCompileFor
7ad01559b262 Initial revision
claus
parents:
diff changeset
    60
    "compile a source-string for a method in classToCompileFor"
7ad01559b262 Initial revision
claus
parents:
diff changeset
    61
7ad01559b262 Initial revision
claus
parents:
diff changeset
    62
    ^ self compile:methodText
7ad01559b262 Initial revision
claus
parents:
diff changeset
    63
          forClass:classToCompileFor
7ad01559b262 Initial revision
claus
parents:
diff changeset
    64
        inCategory:'others'
7ad01559b262 Initial revision
claus
parents:
diff changeset
    65
         notifying:nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
    66
           install:true
7ad01559b262 Initial revision
claus
parents:
diff changeset
    67
        skipIfSame:false
7ad01559b262 Initial revision
claus
parents:
diff changeset
    68
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    69
7ad01559b262 Initial revision
claus
parents:
diff changeset
    70
compile:aString forClass:aClass inCategory:cat
7ad01559b262 Initial revision
claus
parents:
diff changeset
    71
    "compile a source-string for a method in classToCompileFor.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    72
     The method will get cat as category"
7ad01559b262 Initial revision
claus
parents:
diff changeset
    73
7ad01559b262 Initial revision
claus
parents:
diff changeset
    74
    ^ self compile:aString
7ad01559b262 Initial revision
claus
parents:
diff changeset
    75
          forClass:aClass
7ad01559b262 Initial revision
claus
parents:
diff changeset
    76
        inCategory:cat
7ad01559b262 Initial revision
claus
parents:
diff changeset
    77
         notifying:nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
    78
           install:true
7ad01559b262 Initial revision
claus
parents:
diff changeset
    79
        skipIfSame:false
7ad01559b262 Initial revision
claus
parents:
diff changeset
    80
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    81
7ad01559b262 Initial revision
claus
parents:
diff changeset
    82
compile:methodText forClass:classToCompileFor notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
    83
    "compile a source-string for a method in classToCompileFor.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    84
     errors are forwarded to someOne."
7ad01559b262 Initial revision
claus
parents:
diff changeset
    85
7ad01559b262 Initial revision
claus
parents:
diff changeset
    86
    ^ self compile:methodText
7ad01559b262 Initial revision
claus
parents:
diff changeset
    87
          forClass:classToCompileFor
7ad01559b262 Initial revision
claus
parents:
diff changeset
    88
        inCategory:'others'
7ad01559b262 Initial revision
claus
parents:
diff changeset
    89
         notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
    90
           install:true
7ad01559b262 Initial revision
claus
parents:
diff changeset
    91
        skipIfSame:false
7ad01559b262 Initial revision
claus
parents:
diff changeset
    92
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
    93
7ad01559b262 Initial revision
claus
parents:
diff changeset
    94
compile:aString forClass:aClass inCategory:cat notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
    95
    "compile a source-string for a method in classToCompileFor.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    96
     errors are forwarded to someOne.
7ad01559b262 Initial revision
claus
parents:
diff changeset
    97
     The method will get cat as category"
7ad01559b262 Initial revision
claus
parents:
diff changeset
    98
7ad01559b262 Initial revision
claus
parents:
diff changeset
    99
    ^ self compile:aString
7ad01559b262 Initial revision
claus
parents:
diff changeset
   100
          forClass:aClass
7ad01559b262 Initial revision
claus
parents:
diff changeset
   101
        inCategory:cat
7ad01559b262 Initial revision
claus
parents:
diff changeset
   102
         notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
   103
           install:true
7ad01559b262 Initial revision
claus
parents:
diff changeset
   104
        skipIfSame:false
7ad01559b262 Initial revision
claus
parents:
diff changeset
   105
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   106
7ad01559b262 Initial revision
claus
parents:
diff changeset
   107
compile:aString forClass:aClass inCategory:cat notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
   108
                                                 install:install
7ad01559b262 Initial revision
claus
parents:
diff changeset
   109
    ^ self compile:aString
7ad01559b262 Initial revision
claus
parents:
diff changeset
   110
          forClass:aClass
7ad01559b262 Initial revision
claus
parents:
diff changeset
   111
        inCategory:cat
7ad01559b262 Initial revision
claus
parents:
diff changeset
   112
         notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
   113
           install:true
7ad01559b262 Initial revision
claus
parents:
diff changeset
   114
        skipIfSame:false
7ad01559b262 Initial revision
claus
parents:
diff changeset
   115
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   116
7ad01559b262 Initial revision
claus
parents:
diff changeset
   117
compile:aString forClass:aClass inCategory:cat notifying:someOne
7ad01559b262 Initial revision
claus
parents:
diff changeset
   118
                 install:install skipIfSame:skipIfSame
7ad01559b262 Initial revision
claus
parents:
diff changeset
   119
7ad01559b262 Initial revision
claus
parents:
diff changeset
   120
    "the basic workhorse method for compiling.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   121
     compile a source-string for a method in classToCompileFor.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   122
     errors are forwarded to someOne (report on Transcript and return
7ad01559b262 Initial revision
claus
parents:
diff changeset
   123
     #Error, if someOne is nil).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   124
7ad01559b262 Initial revision
claus
parents:
diff changeset
   125
     The new method will get cat as category. If install is true, the method
7ad01559b262 Initial revision
claus
parents:
diff changeset
   126
     will go into the classes method-table, otherwise the method is simply
7ad01559b262 Initial revision
claus
parents:
diff changeset
   127
     returned (for anonymous methods).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   128
     If skipIsSame is true, and the source is the same as an existing
7ad01559b262 Initial revision
claus
parents:
diff changeset
   129
     methods source, this is a noop (for fast fileIn)."
7ad01559b262 Initial revision
claus
parents:
diff changeset
   130
7ad01559b262 Initial revision
claus
parents:
diff changeset
   131
    |compiler newMethod tree lits machineCode 
7ad01559b262 Initial revision
claus
parents:
diff changeset
   132
     symbolicCodeArray sharedCode sharedCodeSymbol oldMethod|
7ad01559b262 Initial revision
claus
parents:
diff changeset
   133
7ad01559b262 Initial revision
claus
parents:
diff changeset
   134
    aString isNil ifTrue:[^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   135
7ad01559b262 Initial revision
claus
parents:
diff changeset
   136
    "create a compiler, let it parse and create the parsetree"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   137
7ad01559b262 Initial revision
claus
parents:
diff changeset
   138
    compiler := self for:(ReadStream on:aString).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   139
    compiler setClassToCompileFor:aClass.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   140
    compiler notifying:someOne.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   141
7ad01559b262 Initial revision
claus
parents:
diff changeset
   142
    compiler nextToken.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   143
    (compiler parseMethodSpec == #Error) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   144
        tree := #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   145
    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   146
        "check if same source"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   147
        (skipIfSame and:[compiler selector notNil]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   148
            oldMethod := aClass compiledMethodAt:(compiler selector).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   149
            oldMethod notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   150
                oldMethod source = aString ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   151
                    SilentLoading ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   152
                        Transcript showCr:('unchanged: ',aClass name,' ',compiler selector)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   153
                    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   154
                    ^ oldMethod
7ad01559b262 Initial revision
claus
parents:
diff changeset
   155
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   156
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   157
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   158
        tree := compiler parseMethodBody.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   159
        compiler tree:tree.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   160
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   161
7ad01559b262 Initial revision
claus
parents:
diff changeset
   162
    (compiler errorFlag or:[tree == #Error]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   163
        compiler selector notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   164
            Transcript show:(compiler selector,' ')
7ad01559b262 Initial revision
claus
parents:
diff changeset
   165
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   166
        Transcript showCr:'syntax error'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   167
        ^ #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   168
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   169
7ad01559b262 Initial revision
claus
parents:
diff changeset
   170
    compiler selector isNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   171
        "it was just a comment or other empty stuff"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   172
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
   173
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   174
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   175
    "produce symbolic code first"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   176
7ad01559b262 Initial revision
claus
parents:
diff changeset
   177
    symbolicCodeArray := compiler genSymbolicCode.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   178
    (symbolicCodeArray == #Error) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   179
        compiler selector notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   180
            Transcript show:(compiler selector,' ')
7ad01559b262 Initial revision
claus
parents:
diff changeset
   181
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   182
        Transcript showCr:'translation error'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   183
        ^ #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   184
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   185
7ad01559b262 Initial revision
claus
parents:
diff changeset
   186
    ((compiler genByteCodeFrom:symbolicCodeArray) == #Error) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   187
        compiler selector notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   188
            Transcript show:(compiler selector,' ')
7ad01559b262 Initial revision
claus
parents:
diff changeset
   189
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   190
        Transcript showCr:'relocation error - must be simplified'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   191
        ^ #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   192
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   193
12
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   194
    (OperatingSystem getSystemType = 'hpux') ifFalse:[
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   195
        "check for primitive code"
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   196
        compiler primitiveNumber notNil ifTrue:[
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   197
            machineCode := compiler checkForPrimitiveCode:compiler primitiveNumber.
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   198
            machineCode isNil ifTrue:[
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   199
                Transcript showCr:'primitive ', compiler primitiveNumber printString , ' is not supported'.
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   200
                ^ #Error
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   201
            ]
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   202
        ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   203
12
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   204
        machineCode isNil ifTrue:[
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   205
            "check for shared-code (only trivial methods)"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   206
12
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   207
            sharedCodeSymbol := compiler checkForSharedCode:symbolicCodeArray.
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   208
            sharedCodeSymbol notNil ifTrue:[
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   209
                sharedCode := self sharedCodeFunctionFor:sharedCodeSymbol
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   210
            ].
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   211
            "try to make it machine code"
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   212
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   213
            machineCode := compiler checkForMachineCode:symbolicCodeArray
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   214
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   215
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   216
7ad01559b262 Initial revision
claus
parents:
diff changeset
   217
    "finally create the new method-object"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   218
7ad01559b262 Initial revision
claus
parents:
diff changeset
   219
    newMethod := Method new.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   220
    lits := compiler literalArray.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   221
    lits notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   222
        "literals MUST be an array - not just any Collection"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   223
        lits := Array withAll:lits.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   224
        newMethod literals:lits
7ad01559b262 Initial revision
claus
parents:
diff changeset
   225
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   226
    newMethod byteCode:(compiler code).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   227
    sharedCode notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   228
        newMethod code:sharedCode
7ad01559b262 Initial revision
claus
parents:
diff changeset
   229
    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   230
        machineCode notNil ifTrue:[
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
   231
            newMethod code:machineCode.
12
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
   232
            newMethod dynamic:true
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   233
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   234
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   235
    newMethod source:aString.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   236
    newMethod category:cat.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   237
    newMethod numberOfMethodVars:(compiler numberOfMethodVars).
13
30e69e21d1d1 *** empty log message ***
claus
parents: 12
diff changeset
   238
    newMethod numberOfMethodArgs:(compiler numberOfMethodArgs).
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   239
    newMethod stackSize:(compiler maxStackDepth).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   240
7ad01559b262 Initial revision
claus
parents:
diff changeset
   241
    install ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   242
        aClass addSelector:(compiler selector) withMethod:newMethod
7ad01559b262 Initial revision
claus
parents:
diff changeset
   243
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   244
7ad01559b262 Initial revision
claus
parents:
diff changeset
   245
    SilentLoading ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   246
        Transcript showCr:('compiled: ',aClass name,' ',compiler selector)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   247
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   248
7ad01559b262 Initial revision
claus
parents:
diff changeset
   249
    ^ newMethod
7ad01559b262 Initial revision
claus
parents:
diff changeset
   250
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
   251
7ad01559b262 Initial revision
claus
parents:
diff changeset
   252
!ByteCodeCompiler methodsFor:'accessing'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   253
7ad01559b262 Initial revision
claus
parents:
diff changeset
   254
literalArray
7ad01559b262 Initial revision
claus
parents:
diff changeset
   255
    "return the literal array - only valid after parsing"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   256
7ad01559b262 Initial revision
claus
parents:
diff changeset
   257
    ^ litArray
7ad01559b262 Initial revision
claus
parents:
diff changeset
   258
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   259
7ad01559b262 Initial revision
claus
parents:
diff changeset
   260
code
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   261
    "return the bytecode array - only valid after code-generation"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   262
7ad01559b262 Initial revision
claus
parents:
diff changeset
   263
    ^ code
7ad01559b262 Initial revision
claus
parents:
diff changeset
   264
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   265
7ad01559b262 Initial revision
claus
parents:
diff changeset
   266
maxStackDepth
7ad01559b262 Initial revision
claus
parents:
diff changeset
   267
    "return the stack-need of the method - only valid after code-generation"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   268
7ad01559b262 Initial revision
claus
parents:
diff changeset
   269
    ^ maxStackDepth
7ad01559b262 Initial revision
claus
parents:
diff changeset
   270
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
   271
7ad01559b262 Initial revision
claus
parents:
diff changeset
   272
!ByteCodeCompiler methodsFor:'code generation'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   273
7ad01559b262 Initial revision
claus
parents:
diff changeset
   274
genSymbolicCode
7ad01559b262 Initial revision
claus
parents:
diff changeset
   275
    "traverse the parse-tree producing symbolicCode - return the codeArray"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   276
7ad01559b262 Initial revision
claus
parents:
diff changeset
   277
    |codeStream thisStatement lastStatement|
7ad01559b262 Initial revision
claus
parents:
diff changeset
   278
7ad01559b262 Initial revision
claus
parents:
diff changeset
   279
    codeStream := WriteStream on:(Array new:100).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   280
    thisStatement := tree.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   281
    [thisStatement notNil] whileTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   282
        lastStatement := thisStatement.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   283
        thisStatement codeForSideEffectOn:codeStream inBlock:nil.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   284
        thisStatement := thisStatement nextStatement
7ad01559b262 Initial revision
claus
parents:
diff changeset
   285
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   286
    (lastStatement isNil or:[(lastStatement isMemberOf:ReturnNode) not])
7ad01559b262 Initial revision
claus
parents:
diff changeset
   287
    ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   288
        "not a return - add retSelf"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   289
        codeStream nextPut:#retSelf
7ad01559b262 Initial revision
claus
parents:
diff changeset
   290
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   291
    ^ codeStream contents
7ad01559b262 Initial revision
claus
parents:
diff changeset
   292
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   293
7ad01559b262 Initial revision
claus
parents:
diff changeset
   294
checkForPrimitiveCode:primNr
7ad01559b262 Initial revision
claus
parents:
diff changeset
   295
    "this was added to allow emulation of (some) ST-80
7ad01559b262 Initial revision
claus
parents:
diff changeset
   296
     primitives (to fileIn Remote-Package)"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   297
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   298
    |cls sel|
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   299
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   300
    (primNr == 75)  ifTrue:[ cls := Object. sel := #identityHash ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   301
    (primNr == 110) ifTrue:[ cls := Object. sel := #==           ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   302
    (primNr == 111) ifTrue:[ cls := Object. sel := #class        ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   303
    cls notNil ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   304
        ^ (cls compiledMethodAt:sel) code
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   305
    ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   306
    ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
   307
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   308
7ad01559b262 Initial revision
claus
parents:
diff changeset
   309
genByteCodeFrom:symbolicCodeArray
7ad01559b262 Initial revision
claus
parents:
diff changeset
   310
    "convert symbolicCode into bytecodes"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   311
7ad01559b262 Initial revision
claus
parents:
diff changeset
   312
    |symIndex    "<SmallInteger>"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   313
     codeSize    "<SmallInteger>"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   314
     symCodeSize "<SmallInteger>"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   315
     index addr
7ad01559b262 Initial revision
claus
parents:
diff changeset
   316
     codeSymbol nargs done
7ad01559b262 Initial revision
claus
parents:
diff changeset
   317
     stackDepth relocInfo level nvars|
7ad01559b262 Initial revision
claus
parents:
diff changeset
   318
7ad01559b262 Initial revision
claus
parents:
diff changeset
   319
    symbolicCodeArray isNil ifTrue:[^ self].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   320
7ad01559b262 Initial revision
claus
parents:
diff changeset
   321
    done := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   322
    symCodeSize := symbolicCodeArray size.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   323
    codeSize := symCodeSize.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   324
7ad01559b262 Initial revision
claus
parents:
diff changeset
   325
    [done] whileFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   326
        litArray := nil.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   327
        stackDepth := 0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   328
        maxStackDepth := 0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   329
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   330
        code := ByteArray uninitializedNew:codeSize.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   331
        relocInfo := Array new:(codeSize + 1).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   332
        symIndex := 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   333
        codeIndex := 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   334
7ad01559b262 Initial revision
claus
parents:
diff changeset
   335
        [symIndex <= symCodeSize] whileTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   336
            relocInfo at:symIndex put:codeIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   337
7ad01559b262 Initial revision
claus
parents:
diff changeset
   338
            codeSymbol := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   339
            symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   340
            stackDelta := 0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   341
            extra := nil.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   342
            lineno := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   343
            self appendByteCodeFor:codeSymbol.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   344
            lineno ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   345
                self appendByte:((symbolicCodeArray at:symIndex) min:255).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   346
                symIndex := symIndex + 1
7ad01559b262 Initial revision
claus
parents:
diff changeset
   347
            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   348
            extra notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   349
              (extra == #number) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   350
                index := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   351
                symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   352
                self appendSignedByte:index
7ad01559b262 Initial revision
claus
parents:
diff changeset
   353
              ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   354
                (extra == #index) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   355
                  index := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   356
                  symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   357
                  self appendByte:index
7ad01559b262 Initial revision
claus
parents:
diff changeset
   358
                ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   359
                  (extra == #lit) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   360
                    index := self addLiteral:(symbolicCodeArray at:symIndex).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   361
                    symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   362
                    self appendByte:index
7ad01559b262 Initial revision
claus
parents:
diff changeset
   363
                  ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   364
                    (extra == #speciallit) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   365
                      index := self addLiteral:(symbolicCodeArray at:symIndex).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   366
                      symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   367
                      self appendByte:index.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   368
                      self appendByte:0.  "space for inline-generation"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   369
                      self appendByte:0.  "space for inline-address"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   370
                      self appendByte:0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   371
                      self appendByte:0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   372
                      self appendByte:0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   373
                      symIndex := symIndex + 5
7ad01559b262 Initial revision
claus
parents:
diff changeset
   374
                    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   375
                      (extra == #offset) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   376
                        relocInfo at:symIndex put:codeIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   377
                        self addReloc:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   378
                        symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   379
                        self appendByte:0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   380
                      ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   381
                        (extra == #indexLevel) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   382
                          index := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   383
                          symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   384
                          self appendByte:index.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   385
                          level := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   386
                          symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   387
                          self appendByte:level
7ad01559b262 Initial revision
claus
parents:
diff changeset
   388
                        ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   389
                          (extra == #offsetNvarNarg) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   390
                            relocInfo at:symIndex put:codeIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   391
                            self addReloc:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   392
                            symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   393
                            self appendByte:0.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   394
                            nvars := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   395
                            symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   396
                            self appendByte:nvars.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   397
                            level := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   398
                            symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   399
                            self appendByte:level
7ad01559b262 Initial revision
claus
parents:
diff changeset
   400
                          ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   401
                            (extra == #absoffset) ifTrue:[
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   402
                              relocInfo at:symIndex put:codeIndex.
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   403
                              self addReloc:symIndex.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   404
                              addr := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   405
                              symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   406
                              self appendByte:(addr bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   407
                              self appendByte:((addr bitShift:-8) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   408
                            ] ifFalse:[
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   409
                              (extra == #absoffsetNvarNarg) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   410
                                relocInfo at:symIndex put:codeIndex.
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   411
                                self addReloc:symIndex.
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   412
                                addr := symbolicCodeArray at:symIndex.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   413
                                symIndex := symIndex + 1.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   414
                                self appendByte:(addr bitAnd:16rFF).
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   415
                                self appendByte:((addr bitShift:-8) bitAnd:16rFF).
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   416
                                nvars := symbolicCodeArray at:symIndex.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   417
                                symIndex := symIndex + 1.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   418
                                self appendByte:nvars.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   419
                                level := symbolicCodeArray at:symIndex.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   420
                                symIndex := symIndex + 1.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   421
                                self appendByte:level
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   422
                              ] ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   423
                                self error:'compiler botch'
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   424
                              ]
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   425
                            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   426
                          ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   427
                        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   428
                      ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   429
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   430
                  ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   431
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   432
              ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   433
            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   434
            ((codeSymbol == #send) or:[codeSymbol == #superSend]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   435
              index := self addLiteral:(symbolicCodeArray at:symIndex).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   436
              symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   437
              nargs := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   438
              symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   439
              self appendByte:nargs.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   440
              self appendByte:index.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   441
              (codeSymbol == #superSend) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   442
                  symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   443
                  index := self addLiteral:(classToCompileFor superclass).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   444
                  self appendByte:index
7ad01559b262 Initial revision
claus
parents:
diff changeset
   445
              ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   446
              stackDelta := nargs negated
7ad01559b262 Initial revision
claus
parents:
diff changeset
   447
            ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   448
              (codeSymbol == #sendDrop) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   449
                  index := self addLiteral:(symbolicCodeArray at:symIndex).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   450
                  symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   451
                  nargs := symbolicCodeArray at:symIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   452
                  symIndex := symIndex + 1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   453
                  self appendByte:nargs.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   454
                  self appendByte:index.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   455
                  stackDelta := (nargs + 1) negated
7ad01559b262 Initial revision
claus
parents:
diff changeset
   456
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   457
            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   458
            stackDepth := stackDepth + stackDelta.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   459
            (stackDepth > maxStackDepth) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   460
                maxStackDepth := stackDepth
7ad01559b262 Initial revision
claus
parents:
diff changeset
   461
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   462
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   463
        relocInfo at:symIndex put:codeIndex.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   464
7ad01559b262 Initial revision
claus
parents:
diff changeset
   465
        "relocate - returns true if ok, false if we have to rerun"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   466
        done := true.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   467
        relocList notNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   468
            done := self relocateWith:symbolicCodeArray relocInfo:relocInfo.
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   469
            "if returned with false, a relative jump was made into
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   470
             an absolute jump - need to start over with one more byte space"
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   471
            done ifFalse:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   472
                relocList := nil.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   473
                codeSize := codeSize + 1.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   474
            ]
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   475
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   476
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   477
    "code printNewline."
7ad01559b262 Initial revision
claus
parents:
diff changeset
   478
    ^ errorFlag
7ad01559b262 Initial revision
claus
parents:
diff changeset
   479
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   480
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   481
absJumpFromJump:code
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   482
    "given a jump-symbolic code, return corresponding absolute jump"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   483
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   484
    JumpToAbsJump isNil ifTrue:[
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   485
        JumpToAbsJump := IdentityDictionary new.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   486
        JumpToAbsJump at:#jump put:#jumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   487
        JumpToAbsJump at:#trueJump put:#trueJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   488
        JumpToAbsJump at:#falseJump put:#falseJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   489
        JumpToAbsJump at:#nilJump put:#nilJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   490
        JumpToAbsJump at:#notNilJump put:#notNilJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   491
        JumpToAbsJump at:#eqJump put:#eqJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   492
        JumpToAbsJump at:#notEqJump put:#notEqJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   493
        JumpToAbsJump at:#zeroJump put:#zeroJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   494
        JumpToAbsJump at:#notZeroJump put:#notZeroJumpabs.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   495
        JumpToAbsJump at:#makeBlock put:#makeBlockabs.
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   496
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   497
    ^ JumpToAbsJump at:code
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   498
!
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   499
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   500
relocateWith:symbolicCodeArray relocInfo:relocInfo
7ad01559b262 Initial revision
claus
parents:
diff changeset
   501
    "helper for genByteCodeFrom - relocate code using relocInfo.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   502
     if relocation fails badly (due to long relative jumps) patch
7ad01559b262 Initial revision
claus
parents:
diff changeset
   503
     symbolicCode to use absolute jumps instead and return false
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   504
     (genByteCodeFrom will then try again). Otherwise return true.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   505
     Also, on the fly, jumps to jumps and jumps to return are handled."
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   506
7ad01559b262 Initial revision
claus
parents:
diff changeset
   507
    |delta       "<SmallInteger>"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   508
     codePos     "<SmallInteger>"
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   509
     opCodePos   "<SmallInteger>"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   510
     codeOffset  "<SmallInteger>"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   511
     symOffset opcode dstOpcode jumpTarget
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   512
     jumpCode deleteSet|
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   513
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   514
    deleteSet := OrderedCollection new.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   515
    relocList do:[:sIndex |
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   516
        "have to relocate symCode at sIndex ..." 
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   517
        symOffset := symbolicCodeArray at:sIndex.   "the target in the symbolic code"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   518
        codePos := relocInfo at:sIndex.             "position of the offet in byte code"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   519
        codeOffset := relocInfo at:symOffset.       "position of the target in byte code"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   520
        delta := codeOffset - codePos - 1.
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   521
        opCodePos := codePos - 1.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   522
        opcode := code at:opCodePos.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   523
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   524
        (opcode between:190 and:199) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   525
            "an absolute jump/makeBlock"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   526
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   527
            code at:codePos put:(codeOffset bitAnd:16rFF).
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   528
            code at:(codePos + 1) put:(codeOffset bitShift:-8)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   529
        ] ifFalse:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   530
            "get jump-code from long and vlong codes"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   531
            (opcode between:50 and:59) ifFalse:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   532
                (opcode between:60 and:69) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   533
                    opcode := opcode - 10
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   534
                ] ifFalse:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   535
                    (opcode between:70 and:79) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   536
                        opcode := opcode - 20
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   537
                    ] ifFalse:[
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   538
                        self error:'invalid code to relocate'
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   539
                    ]
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   540
                ].
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   541
            ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   542
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   543
            "optimize jump to return and jump to jump"
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   544
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   545
            (opcode == 54) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   546
                "a jump"
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   547
                dstOpcode := symbolicCodeArray at:symOffset.
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   548
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   549
                (#(retSelf retTop retNil retTrue retFalse ret0 blockRetTop) includes:dstOpcode) ifTrue:[
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   550
                    "a jump to a return - put in the return instead jump"
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   551
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   552
                    symbolicCodeArray at:(sIndex - 1) put:dstOpcode.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   553
                    symbolicCodeArray at:sIndex put:dstOpcode.
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   554
                    code at:opCodePos put:(self byteCodeFor:dstOpcode).
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   555
                    delta := 0.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   556
                    deleteSet add:sIndex.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   557
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   558
" 
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   559
'jump to return at: ' print. (sIndex - 1) printNewline.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   560
" 
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   561
                ] ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   562
                    (dstOpcode == #jump) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   563
                        "jump to jump to be done soon"
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   564
                        jumpTarget := symbolicCodeArray at:(symOffset + 1).
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   565
" 
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   566
'jump to jump at: ' print. (sIndex - 1) print.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   567
'  newTarget:' print. jumpTarget printNewline.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   568
" 
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   569
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   570
                        symbolicCodeArray at:sIndex put:jumpTarget.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   571
                        symOffset := jumpTarget.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   572
                        codeOffset := relocInfo at:symOffset.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   573
                        delta := codeOffset - codePos - 1.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   574
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   575
                        "continue with new delta"
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   576
                    ]
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   577
                ]
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   578
            ].
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   579
            (#(50 51 52 53 56 57 58 59) includes:opcode) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   580
                "a conditional jump"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   581
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   582
                dstOpcode := symbolicCodeArray at:symOffset.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   583
                (dstOpcode == #jump) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   584
                    "conditional jump to unconditional jump"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   585
                    jumpTarget := symbolicCodeArray at:(symOffset + 1).
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   586
" 
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   587
'cond jump to jump at: ' print. (sIndex - 1) print.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   588
'  newTarget:' print. jumpTarget printNewline.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   589
" 
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   590
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   591
                    symbolicCodeArray at:sIndex put:jumpTarget.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   592
                    symOffset := jumpTarget.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   593
                    codeOffset := relocInfo at:symOffset.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   594
                    delta := codeOffset - codePos - 1.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   595
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   596
                    "continue with new delta"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   597
                ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   598
            ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   599
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   600
            (delta >= 0) ifTrue:[
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   601
                (delta > 127) ifTrue:[
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   602
                    (opcode between:50 and:59) ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   603
                        self error:'invalid code to relocate'
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   604
                    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   605
                    (delta > 255) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   606
                        "change jmp into vljmp ..."
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   607
                        code at:opCodePos put:(opcode + 20).
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   608
                        delta := delta - 256 
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   609
                    ] ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   610
                        "change jmp into ljmp ..."
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   611
                        code at:opCodePos put:(opcode + 10).
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   612
                        delta := delta - 128
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   613
                    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   614
                    (delta > 127) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   615
                        "change symbolic into a jump absolute and fail"
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   616
                        jumpCode := symbolicCodeArray at:(sIndex - 1).
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   617
                        symbolicCodeArray at:(sIndex - 1) put:(self absJumpFromJump:jumpCode).
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   618
                        symbolicCodeArray at:sIndex put:symOffset.
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   619
"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   620
'change short into abs jump' printNewline.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   621
"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   622
                        deleteSet do:[:d | relocList remove:d].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   623
                        ^ false
7ad01559b262 Initial revision
claus
parents:
diff changeset
   624
                    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   625
                ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   626
                code at:codePos put:delta
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   627
            ] ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   628
                (delta < -128) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   629
                    (opcode between:50 and:59) ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   630
                        self error:'invalid code to relocate'
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   631
                    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   632
                    (delta < -256) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   633
                        "change jmp into vljmp ..."
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   634
                        code at:opCodePos put:(opcode + 20).
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   635
                        delta := delta + 256
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   636
                    ] ifFalse:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   637
                        "change jmp into ljmp ..."
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   638
                        code at:opCodePos put:(opcode + 10).
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   639
                        delta := delta + 128
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   640
                    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   641
                    (delta < -128) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   642
                        "change symbolic into a jump absolute and fail"
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   643
                        jumpCode := symbolicCodeArray at:(sIndex - 1).
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   644
                        symbolicCodeArray at:(sIndex - 1) put:(self absJumpFromJump:jumpCode).
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   645
                        symbolicCodeArray at:sIndex put:symOffset.
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   646
"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   647
'change short into abs jump' printNewline.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   648
"
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   649
                        deleteSet do:[:d | relocList remove:d].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   650
                        ^ false
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   651
                    ]
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   652
                ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   653
                code at:codePos put:(256 + delta)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   654
            ]
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   655
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   656
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   657
    (errorFlag == #Error) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   658
        self error:'relocation range error'
7ad01559b262 Initial revision
claus
parents:
diff changeset
   659
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   660
    ^ true
7ad01559b262 Initial revision
claus
parents:
diff changeset
   661
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   662
7ad01559b262 Initial revision
claus
parents:
diff changeset
   663
addLiteral:anObject
7ad01559b262 Initial revision
claus
parents:
diff changeset
   664
    "add a literal to the literalArray - watch for and eliminate
7ad01559b262 Initial revision
claus
parents:
diff changeset
   665
     duplicates. return the index of the literal in the Array"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   666
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   667
    |index class|
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   668
7ad01559b262 Initial revision
claus
parents:
diff changeset
   669
    litArray isNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   670
        litArray := Array with:anObject.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   671
        ^ 1
7ad01559b262 Initial revision
claus
parents:
diff changeset
   672
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   673
    index := litArray identityIndexOf:anObject.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   674
    (index == 0) ifTrue:[
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   675
        class := anObject class.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   676
        ((class == Float) or:[class == Fraction]) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   677
            index := litArray indexOf:anObject.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   678
        ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   679
        (index == 0) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   680
            litArray := litArray copyWith:anObject.
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   681
            ^ litArray size
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   682
        ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   683
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   684
    ^ index
7ad01559b262 Initial revision
claus
parents:
diff changeset
   685
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   686
7ad01559b262 Initial revision
claus
parents:
diff changeset
   687
appendByteCodeFor:codeSymbol
7ad01559b262 Initial revision
claus
parents:
diff changeset
   688
    "append the byteCode for an instructionSymbol to the code-Array"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   689
7ad01559b262 Initial revision
claus
parents:
diff changeset
   690
    code at:codeIndex put:(self byteCodeFor:codeSymbol).
7ad01559b262 Initial revision
claus
parents:
diff changeset
   691
    codeIndex := codeIndex + 1
7ad01559b262 Initial revision
claus
parents:
diff changeset
   692
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   693
7ad01559b262 Initial revision
claus
parents:
diff changeset
   694
appendByte:aByte
7ad01559b262 Initial revision
claus
parents:
diff changeset
   695
    "append a byte to the code-Array, checking for byte-range (debug-only)"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   696
7ad01559b262 Initial revision
claus
parents:
diff changeset
   697
    (aByte between:0 and:255) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   698
        code at:codeIndex put:aByte.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   699
        codeIndex := codeIndex + 1
7ad01559b262 Initial revision
claus
parents:
diff changeset
   700
    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   701
        self error:'byte range error'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   702
        errorFlag := #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   703
    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
   704
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   705
7ad01559b262 Initial revision
claus
parents:
diff changeset
   706
appendSignedByte:aByte
7ad01559b262 Initial revision
claus
parents:
diff changeset
   707
    "append a signedbyte (as in jump-offsets) to the code-Array,
7ad01559b262 Initial revision
claus
parents:
diff changeset
   708
     check range and report an error if invalid"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   709
7ad01559b262 Initial revision
claus
parents:
diff changeset
   710
    |b "<SmallInteger>" |
7ad01559b262 Initial revision
claus
parents:
diff changeset
   711
7ad01559b262 Initial revision
claus
parents:
diff changeset
   712
    b := aByte.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   713
    (b >= 0) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   714
        (b > 127) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   715
            self error:'jump-range error'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   716
            errorFlag := #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   717
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   718
        code at:codeIndex put:b
7ad01559b262 Initial revision
claus
parents:
diff changeset
   719
    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   720
        (b < -128) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   721
            self error:'jump-range error'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   722
            errorFlag := #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   723
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   724
        code at:codeIndex put:(256 + b)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   725
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   726
    codeIndex := codeIndex + 1
7ad01559b262 Initial revision
claus
parents:
diff changeset
   727
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   728
7ad01559b262 Initial revision
claus
parents:
diff changeset
   729
addReloc:symIndex
7ad01559b262 Initial revision
claus
parents:
diff changeset
   730
    "remember to relocate offset at symIndex later ..."
7ad01559b262 Initial revision
claus
parents:
diff changeset
   731
7ad01559b262 Initial revision
claus
parents:
diff changeset
   732
    relocList isNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   733
        relocList := OrderedCollection new.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   734
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   735
    relocList add:symIndex
7ad01559b262 Initial revision
claus
parents:
diff changeset
   736
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   737
7ad01559b262 Initial revision
claus
parents:
diff changeset
   738
byteCodeFor:aSymbol
7ad01559b262 Initial revision
claus
parents:
diff changeset
   739
    "given a symbolic instruction, return the corresponding bytecode.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   740
     as a side-effect, leave number of bytes pushed/popped by this instr.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   741
     in stackDelta, and, if the instruction needs extra arguments, leave
7ad01559b262 Initial revision
claus
parents:
diff changeset
   742
     this info in extra"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   743
7ad01559b262 Initial revision
claus
parents:
diff changeset
   744
    "standard bytecodes"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   745
7ad01559b262 Initial revision
claus
parents:
diff changeset
   746
    (aSymbol == #pushNil) ifTrue:[stackDelta := 1. ^ 10].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   747
    (aSymbol == #pushTrue) ifTrue:[stackDelta := 1. ^ 11].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   748
    (aSymbol == #pushFalse) ifTrue:[stackDelta := 1. ^ 12].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   749
    (aSymbol == #pushLit) ifTrue:[stackDelta := 1. extra := #lit. ^ 14].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   750
    (aSymbol == #pushSelf) ifTrue:[stackDelta := 1. ^ 15].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   751
    (aSymbol == #pushNum) ifTrue:[stackDelta := 1. extra := #number. ^ 16].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   752
7ad01559b262 Initial revision
claus
parents:
diff changeset
   753
    (aSymbol == #pushMethodArg) ifTrue:[stackDelta := 1. extra := #index. ^ 30].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   754
    (aSymbol == #pushMethodVar) ifTrue:[stackDelta := 1. extra := #index. ^ 31].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   755
    (aSymbol == #pushBlockArg) ifTrue:[stackDelta := 1. extra := #index. ^ 32].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   756
    (aSymbol == #pushBlockVar) ifTrue:[stackDelta := 1. extra := #index. ^ 33].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   757
    (aSymbol == #pushInstVar) ifTrue:[stackDelta := 1. extra := #index. ^ 34].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   758
    (aSymbol == #pushOuterBlockArg) ifTrue:[stackDelta := 1. extra := #indexLevel. ^ 42].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   759
    (aSymbol == #pushOuterBlockVar) ifTrue:[stackDelta := 1. extra := #indexLevel. ^ 128].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   760
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   761
    (aSymbol == #storeMethodVar) ifTrue:[extra := #index. stackDelta := -1. ^ 37].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   762
    (aSymbol == #storeBlockVar) ifTrue:[extra := #index. stackDelta := -1. ^ 38].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   763
    (aSymbol == #storeInstVar) ifTrue:[extra := #index. stackDelta := -1. ^ 39].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   764
7ad01559b262 Initial revision
claus
parents:
diff changeset
   765
    (aSymbol == #retTop) ifTrue:[stackDelta := -1. ^ 0].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   766
    (aSymbol == #blockRetTop) ifTrue:[stackDelta := -1. ^ 6].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   767
7ad01559b262 Initial revision
claus
parents:
diff changeset
   768
    (aSymbol == #retSelf) ifTrue:[^5].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   769
7ad01559b262 Initial revision
claus
parents:
diff changeset
   770
    (aSymbol == #==) ifTrue:[stackDelta := -1. self addLiteral:aSymbol. ^ 45].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   771
    (aSymbol == #~~) ifTrue:[stackDelta := -1. self addLiteral:aSymbol. ^ 46].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   772
7ad01559b262 Initial revision
claus
parents:
diff changeset
   773
    (aSymbol == #falseJump) ifTrue:[stackDelta := -1. extra := #offset. ^ 50].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   774
    (aSymbol == #trueJump) ifTrue:[stackDelta := -1. extra := #offset. ^ 51].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   775
    (aSymbol == #nilJump) ifTrue:[stackDelta := -1. extra := #offset. ^ 52].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   776
    (aSymbol == #notNilJump) ifTrue:[stackDelta := -1. extra := #offset. ^ 53].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   777
    (aSymbol == #jump) ifTrue:[extra := #offset. ^ 54].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   778
    (aSymbol == #makeBlock) ifTrue:[stackDelta := 1. extra := #offsetNvarNarg. ^ 55].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   779
    (aSymbol == #zeroJump) ifTrue:[stackDelta := -1. extra := #offset. ^ 56].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   780
    (aSymbol == #notZeroJump) ifTrue:[stackDelta := -1. extra := #offset. ^ 57].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   781
    (aSymbol == #eqJump) ifTrue:[stackDelta := -2. extra := #offset. ^ 58].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   782
    (aSymbol == #notEqJump) ifTrue:[stackDelta := -2. extra := #offset. ^ 59].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   783
7ad01559b262 Initial revision
claus
parents:
diff changeset
   784
    (aSymbol == #send) ifTrue:[lineno := true. ^ 19].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   785
    (aSymbol == #superSend) ifTrue:[lineno := true. ^ 20].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   786
7ad01559b262 Initial revision
claus
parents:
diff changeset
   787
    (aSymbol == #drop) ifTrue:[stackDelta := -1. ^ 18].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   788
    (aSymbol == #dup) ifTrue:[stackDelta := 1. ^ 47].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   789
7ad01559b262 Initial revision
claus
parents:
diff changeset
   790
    (aSymbol == #pushClassVar) ifTrue:[stackDelta := 1. extra := #speciallit. ^ 35].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   791
    (aSymbol == #pushClassInstVar) ifTrue:[stackDelta := 1. extra := #index. ^ 176].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   792
    (aSymbol == #pushGlobal) ifTrue:[stackDelta := 1. extra := #speciallit. ^ 36].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   793
7ad01559b262 Initial revision
claus
parents:
diff changeset
   794
    (aSymbol == #storeClassVar) ifTrue:[extra := #speciallit.stackDelta := -1. ^ 40].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   795
    (aSymbol == #storeClassInstVar) ifTrue:[extra := #index.stackDelta := -1. ^ 177].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   796
    (aSymbol == #storeGlobal) ifTrue:[extra := #speciallit. stackDelta := -1. ^ 41].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   797
    (aSymbol == #storeOuterBlockVar) ifTrue:[stackDelta := -1. extra := #indexLevel. ^ 129].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   798
7ad01559b262 Initial revision
claus
parents:
diff changeset
   799
    "optimized bytecodes"
7ad01559b262 Initial revision
claus
parents:
diff changeset
   800
7ad01559b262 Initial revision
claus
parents:
diff changeset
   801
    (aSymbol == #retNil) ifTrue:[^ 1].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   802
    (aSymbol == #retTrue) ifTrue:[^ 2].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   803
    (aSymbol == #retFalse) ifTrue:[^ 3].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   804
    (aSymbol == #ret0) ifTrue:[^ 4].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   805
    (aSymbol == #retNum) ifTrue:[extra := #number. ^ 127].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   806
7ad01559b262 Initial revision
claus
parents:
diff changeset
   807
    (aSymbol == #pushChar) ifTrue:[stackDelta := 1. ^17].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   808
    (aSymbol == #push0) ifTrue:[stackDelta := 1. ^120].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   809
    (aSymbol == #push1) ifTrue:[stackDelta := 1. ^121].
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   810
    (aSymbol == #push2) ifTrue:[stackDelta := 1. ^139].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   811
    (aSymbol == #pushMinus1) ifTrue:[stackDelta := 1. ^122].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   812
7ad01559b262 Initial revision
claus
parents:
diff changeset
   813
    (aSymbol == #send0) ifTrue:[lineno := true. extra := #lit. ^21].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   814
    (aSymbol == #send1) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^22].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   815
    (aSymbol == #send2) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^23].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   816
    (aSymbol == #send3) ifTrue:[lineno := true. extra := #lit. stackDelta := -3. ^24].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   817
7ad01559b262 Initial revision
claus
parents:
diff changeset
   818
    (aSymbol == #sendSelf0) ifTrue:[lineno := true. extra := #lit. stackDelta := 1. ^180].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   819
    (aSymbol == #sendSelf1) ifTrue:[lineno := true. extra := #lit. ^181].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   820
    (aSymbol == #sendSelf2) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^182].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   821
    (aSymbol == #sendSelf3) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^183].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   822
    (aSymbol == #sendSelfDrop0) ifTrue:[lineno := true. extra := #lit. ^184].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   823
    (aSymbol == #sendSelfDrop1) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^185].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   824
    (aSymbol == #sendSelfDrop2) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^186].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   825
    (aSymbol == #sendSelfDrop3) ifTrue:[lineno := true. extra := #lit. stackDelta := -3. ^187].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   826
7ad01559b262 Initial revision
claus
parents:
diff changeset
   827
    (aSymbol == #sendDrop) ifTrue:[lineno := true. ^25].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   828
    (aSymbol == #sendDrop0) ifTrue:[lineno := true. extra := #lit. stackDelta := -1. ^26].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   829
    (aSymbol == #sendDrop1) ifTrue:[lineno := true. extra := #lit. stackDelta := -2. ^27].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   830
    (aSymbol == #sendDrop2) ifTrue:[lineno := true. extra := #lit. stackDelta := -3. ^28].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   831
    (aSymbol == #sendDrop3) ifTrue:[lineno := true. extra := #lit. stackDelta := -4. ^29].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   832
7ad01559b262 Initial revision
claus
parents:
diff changeset
   833
    (aSymbol == #pushMethodVar1) ifTrue:[stackDelta := 1. ^80].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   834
    (aSymbol == #pushMethodVar2) ifTrue:[stackDelta := 1. ^81].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   835
    (aSymbol == #pushMethodVar3) ifTrue:[stackDelta := 1. ^82].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   836
    (aSymbol == #pushMethodVar4) ifTrue:[stackDelta := 1. ^83].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   837
    (aSymbol == #pushMethodVar5) ifTrue:[stackDelta := 1. ^84].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   838
    (aSymbol == #pushMethodVar6) ifTrue:[stackDelta := 1. ^85].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   839
7ad01559b262 Initial revision
claus
parents:
diff changeset
   840
    (aSymbol == #pushMethodArg1) ifTrue:[stackDelta := 1. ^86].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   841
    (aSymbol == #pushMethodArg2) ifTrue:[stackDelta := 1. ^87].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   842
    (aSymbol == #pushMethodArg3) ifTrue:[stackDelta := 1. ^88].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   843
    (aSymbol == #pushMethodArg4) ifTrue:[stackDelta := 1. ^89].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   844
7ad01559b262 Initial revision
claus
parents:
diff changeset
   845
    (aSymbol == #pushInstVar1) ifTrue:[stackDelta := 1. ^90].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   846
    (aSymbol == #pushInstVar2) ifTrue:[stackDelta := 1. ^91].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   847
    (aSymbol == #pushInstVar3) ifTrue:[stackDelta := 1. ^92].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   848
    (aSymbol == #pushInstVar4) ifTrue:[stackDelta := 1. ^93].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   849
    (aSymbol == #pushInstVar5) ifTrue:[stackDelta := 1. ^94].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   850
    (aSymbol == #pushInstVar6) ifTrue:[stackDelta := 1. ^95].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   851
    (aSymbol == #pushInstVar7) ifTrue:[stackDelta := 1. ^96].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   852
    (aSymbol == #pushInstVar8) ifTrue:[stackDelta := 1. ^97].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   853
    (aSymbol == #pushInstVar9) ifTrue:[stackDelta := 1. ^98].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   854
    (aSymbol == #pushInstVar10) ifTrue:[stackDelta := 1. ^99].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   855
7ad01559b262 Initial revision
claus
parents:
diff changeset
   856
    (aSymbol == #storeMethodVar1) ifTrue:[stackDelta := -1. ^100].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   857
    (aSymbol == #storeMethodVar2) ifTrue:[stackDelta := -1. ^101].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   858
    (aSymbol == #storeMethodVar3) ifTrue:[stackDelta := -1. ^102].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   859
    (aSymbol == #storeMethodVar4) ifTrue:[stackDelta := -1. ^103].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   860
    (aSymbol == #storeMethodVar5) ifTrue:[stackDelta := -1. ^104].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   861
    (aSymbol == #storeMethodVar6) ifTrue:[stackDelta := -1. ^105].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   862
7ad01559b262 Initial revision
claus
parents:
diff changeset
   863
    (aSymbol == #storeInstVar1) ifTrue:[stackDelta := -1. ^110].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   864
    (aSymbol == #storeInstVar2) ifTrue:[stackDelta := -1. ^111].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   865
    (aSymbol == #storeInstVar3) ifTrue:[stackDelta := -1. ^112].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   866
    (aSymbol == #storeInstVar4) ifTrue:[stackDelta := -1. ^113].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   867
    (aSymbol == #storeInstVar5) ifTrue:[stackDelta := -1. ^114].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   868
    (aSymbol == #storeInstVar6) ifTrue:[stackDelta := -1. ^115].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   869
    (aSymbol == #storeInstVar7) ifTrue:[stackDelta := -1. ^116].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   870
    (aSymbol == #storeInstVar8) ifTrue:[stackDelta := -1. ^117].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   871
    (aSymbol == #storeInstVar9) ifTrue:[stackDelta := -1. ^118].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   872
    (aSymbol == #storeInstVar10) ifTrue:[stackDelta := -1. ^119].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   873
7ad01559b262 Initial revision
claus
parents:
diff changeset
   874
    (aSymbol == #retMethodVar1) ifTrue:[^160].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   875
    (aSymbol == #retMethodVar2) ifTrue:[^161].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   876
    (aSymbol == #retMethodVar3) ifTrue:[^162].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   877
    (aSymbol == #retMethodVar4) ifTrue:[^163].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   878
    (aSymbol == #retMethodVar5) ifTrue:[^164].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   879
    (aSymbol == #retMethodVar6) ifTrue:[^165].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   880
7ad01559b262 Initial revision
claus
parents:
diff changeset
   881
    (aSymbol == #retInstVar1) ifTrue:[^166].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   882
    (aSymbol == #retInstVar2) ifTrue:[^167].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   883
    (aSymbol == #retInstVar3) ifTrue:[^168].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   884
    (aSymbol == #retInstVar4) ifTrue:[^169].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   885
    (aSymbol == #retInstVar5) ifTrue:[^170].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   886
    (aSymbol == #retInstVar6) ifTrue:[^171].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   887
    (aSymbol == #retInstVar7) ifTrue:[^172].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   888
    (aSymbol == #retInstVar8) ifTrue:[^173].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   889
7ad01559b262 Initial revision
claus
parents:
diff changeset
   890
    (aSymbol == #retMethodArg1) ifTrue:[^174].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   891
    (aSymbol == #retMethodArg2) ifTrue:[^175].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   892
7ad01559b262 Initial revision
claus
parents:
diff changeset
   893
    (aSymbol == #pushBlockArg1) ifTrue:[stackDelta := 1. ^140].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   894
    (aSymbol == #pushBlockArg2) ifTrue:[stackDelta := 1. ^141].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   895
    (aSymbol == #pushBlockArg3) ifTrue:[stackDelta := 1. ^142].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   896
    (aSymbol == #pushBlockArg4) ifTrue:[stackDelta := 1. ^143].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   897
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   898
    (aSymbol == #pushOuter1BlockArg) ifTrue:[stackDelta := 1. extra := #index. ^ 43].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   899
    (aSymbol == #pushOuter2BlockArg) ifTrue:[stackDelta := 1. extra := #index. ^ 44].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   900
5
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   901
    (aSymbol == #=) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^130].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   902
    (aSymbol == #+) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^131].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   903
    (aSymbol == #~=) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^132].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   904
    (aSymbol == #-) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^133].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   905
    (aSymbol == #class) ifTrue:[self addLiteral:aSymbol. ^134].
5
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   906
    (aSymbol == #x) ifTrue:[lineno := true. self addLiteral:aSymbol. ^106].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   907
    (aSymbol == #y) ifTrue:[lineno := true. self addLiteral:aSymbol. ^107].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   908
    (aSymbol == #width) ifTrue:[lineno := true. self addLiteral:aSymbol. ^108].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   909
    (aSymbol == #height) ifTrue:[lineno := true. self addLiteral:aSymbol. ^109].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   910
    (aSymbol == #origin) ifTrue:[lineno := true. self addLiteral:aSymbol. ^154].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   911
    (aSymbol == #extent) ifTrue:[lineno := true. self addLiteral:aSymbol. ^155].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   912
    (aSymbol == #at:) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^135].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   913
    (aSymbol == #at:put:)ifTrue:[lineno := true. stackDelta := -2. self addLiteral:aSymbol. ^136].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   914
    (aSymbol == #bitAnd:) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^137].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   915
    (aSymbol == #bitOr:) ifTrue:[lineno := true. stackDelta := -1. self addLiteral:aSymbol. ^138].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   916
    (aSymbol == #plus1) ifTrue:[lineno := true. self addLiteral:#+. ^123].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   917
    (aSymbol == #minus1) ifTrue:[lineno := true. self addLiteral:#-. ^124].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   918
5
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   919
    (aSymbol == #incMethodVar) ifTrue:[lineno := true. self addLiteral:#+. extra := #index. ^125].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   920
    (aSymbol == #decMethodVar) ifTrue:[lineno := true. self addLiteral:#-. extra := #index. ^126].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   921
7ad01559b262 Initial revision
claus
parents:
diff changeset
   922
    (aSymbol == #eq0) ifTrue:[self addLiteral:#==. ^48].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   923
    (aSymbol == #ne0) ifTrue:[self addLiteral:#~~. ^49].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   924
5
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   925
    (aSymbol == #>) ifTrue:[lineno := true. self addLiteral:aSymbol. stackDelta := -1. ^ 145].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   926
    (aSymbol == #>=) ifTrue:[lineno := true. self addLiteral:aSymbol. stackDelta := -1. ^ 146].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   927
    (aSymbol == #<) ifTrue:[lineno := true. self addLiteral:aSymbol. stackDelta := -1. ^ 147].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   928
    (aSymbol == #<=) ifTrue:[lineno := true. self addLiteral:aSymbol. stackDelta := -1. ^ 148].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   929
    (aSymbol == #next) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 149].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   930
    (aSymbol == #peek) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 150].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   931
    (aSymbol == #value) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 151].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   932
    (aSymbol == #value:) ifTrue:[lineno := true. self addLiteral:aSymbol.  stackDelta := -1. ^ 152].
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
   933
    (aSymbol == #value:value:) ifTrue:[lineno := true. self addLiteral:aSymbol.  stackDelta := -2. ^ 178].
5
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   934
    (aSymbol == #size) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 153].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   935
    (aSymbol == #asInteger) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 158].
020d67cc590e *** empty log message ***
claus
parents: 4
diff changeset
   936
    (aSymbol == #rounded) ifTrue:[lineno := true. self addLiteral:aSymbol. ^ 159].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   937
    (aSymbol == #mk0Block) ifTrue:[^ 156].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   938
    (aSymbol == #mkNilBlock) ifTrue:[^ 157].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   939
7ad01559b262 Initial revision
claus
parents:
diff changeset
   940
    (aSymbol == #falseJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 190].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   941
    (aSymbol == #trueJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 191].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   942
    (aSymbol == #nilJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 192].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   943
    (aSymbol == #notNilJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 193].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   944
    (aSymbol == #jumpabs) ifTrue:[extra := #absoffset. ^ 194].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   945
    (aSymbol == #makeBlockabs) ifTrue:[stackDelta := 1. extra := #absoffsetNvarNarg. ^ 195].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   946
    (aSymbol == #zeroJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 196].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   947
    (aSymbol == #notZeroJumpabs) ifTrue:[stackDelta := -1. extra := #absoffset. ^ 197].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   948
    (aSymbol == #eqJumpabs) ifTrue:[stackDelta := -2. extra := #absoffset. ^ 198].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
   949
    (aSymbol == #notEqJumpabs) ifTrue:[stackDelta := -2. extra := #absoffset. ^ 199].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   950
7ad01559b262 Initial revision
claus
parents:
diff changeset
   951
    (aSymbol == #pushThisContext) ifTrue:[stackDelta := 1. ^ 144].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   952
7ad01559b262 Initial revision
claus
parents:
diff changeset
   953
    self error:'invalid code symbol'.
7ad01559b262 Initial revision
claus
parents:
diff changeset
   954
    errorFlag := #Error
7ad01559b262 Initial revision
claus
parents:
diff changeset
   955
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
   956
7ad01559b262 Initial revision
claus
parents:
diff changeset
   957
!ByteCodeCompiler class methodsFor:'machine code constants'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
   958
7ad01559b262 Initial revision
claus
parents:
diff changeset
   959
sharedCodeFunctionFor:aSymbol
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   960
    "return the address of a shared code-function;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   961
     the code below looks ugly, but adds some speed to instvar-access
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
   962
     methods"
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
   963
7ad01559b262 Initial revision
claus
parents:
diff changeset
   964
    |codeSymbol|
7ad01559b262 Initial revision
claus
parents:
diff changeset
   965
7ad01559b262 Initial revision
claus
parents:
diff changeset
   966
    (aSymbol == #retSelf) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   967
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
   968
        extern OBJ __retSelf();
7ad01559b262 Initial revision
claus
parents:
diff changeset
   969
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   970
        OBJ (*dummy)() = __retSelf;
7ad01559b262 Initial revision
claus
parents:
diff changeset
   971
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
   972
        RETURN ( _MKSMALLINT((int)__retSelf) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
   973
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
   974
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   975
    (aSymbol == #retNil) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   976
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
   977
        extern OBJ __retNil();
7ad01559b262 Initial revision
claus
parents:
diff changeset
   978
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   979
        OBJ (*dummy)() = __retNil;
7ad01559b262 Initial revision
claus
parents:
diff changeset
   980
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
   981
        RETURN ( _MKSMALLINT((int)__retNil) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
   982
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
   983
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   984
    (aSymbol == #retTrue) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   985
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
   986
        extern OBJ __retTrue();
7ad01559b262 Initial revision
claus
parents:
diff changeset
   987
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   988
        OBJ (*dummy)() = __retTrue;
7ad01559b262 Initial revision
claus
parents:
diff changeset
   989
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
   990
        RETURN ( _MKSMALLINT((int)__retTrue) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
   991
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
   992
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
   993
    (aSymbol == #retFalse) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
   994
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
   995
        extern OBJ __retFalse();
7ad01559b262 Initial revision
claus
parents:
diff changeset
   996
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
   997
        OBJ (*dummy)() = __retFalse;
7ad01559b262 Initial revision
claus
parents:
diff changeset
   998
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
   999
        RETURN ( _MKSMALLINT((int)__retFalse) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1000
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1001
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1002
    (aSymbol == #ret0) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1003
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1004
        extern OBJ __ret0();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1005
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1006
        OBJ (*dummy)() = __ret0;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1007
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1008
        RETURN ( _MKSMALLINT((int)__ret0) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1009
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1010
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1011
    (aSymbol == #blockRet0) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1012
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1013
        extern OBJ __bRet0();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1014
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1015
        OBJ (*dummy)() = __bRet0;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1016
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1017
        RETURN ( _MKSMALLINT((int)__bRet0) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1018
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1019
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1020
    (aSymbol == #blockRetNil) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1021
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1022
        extern OBJ __bRetNil();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1023
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1024
        OBJ (*dummy)() = __bRetNil;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1025
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1026
        RETURN ( _MKSMALLINT((int)__bRetNil) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1027
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1028
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1029
    (aSymbol == #blockRetTrue) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1030
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1031
        extern OBJ __bRetTrue();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1032
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1033
        OBJ (*dummy)() = __bRetTrue;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1034
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1035
        RETURN ( _MKSMALLINT((int)__bRetTrue) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1036
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1037
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1038
    (aSymbol == #blockRetFalse) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1039
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1040
        extern OBJ __bRetFalse();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1041
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1042
        OBJ (*dummy)() = __bRetFalse;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1043
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1044
        RETURN ( _MKSMALLINT((int)__bRetFalse) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1045
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1046
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1047
    (aSymbol == #retInstVar1) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1048
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1049
        extern OBJ __retInst0();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1050
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1051
        OBJ (*dummy)() = __retInst0;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1052
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1053
        RETURN ( _MKSMALLINT((int)__retInst0) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1054
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1055
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1056
    (aSymbol == #retInstVar2) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1057
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1058
        extern OBJ __retInst1();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1059
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1060
        OBJ (*dummy)() = __retInst1;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1061
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1062
        RETURN ( _MKSMALLINT((int)__retInst1) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1063
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1064
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1065
    (aSymbol == #retInstVar3) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1066
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1067
        extern OBJ __retInst2();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1068
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1069
        OBJ (*dummy)() = __retInst2;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1070
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1071
        RETURN ( _MKSMALLINT((int)__retInst2) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1072
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1073
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1074
    (aSymbol == #retInstVar4) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1075
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1076
        extern OBJ __retInst3();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1077
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1078
        OBJ (*dummy)() = __retInst3;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1079
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1080
        RETURN ( _MKSMALLINT((int)__retInst3) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1081
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1082
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1083
    (aSymbol == #retInstVar5) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1084
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1085
        extern OBJ __retInst4();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1086
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1087
        OBJ (*dummy)() = __retInst4;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1088
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1089
        RETURN ( _MKSMALLINT((int)__retInst4) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1090
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1091
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1092
    (aSymbol == #retInstVar6) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1093
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1094
        extern OBJ __retInst5();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1095
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1096
        OBJ (*dummy)() = __retInst5;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1097
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1098
        RETURN ( _MKSMALLINT((int)__retInst5) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1099
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1100
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1101
    (aSymbol == #retInstVar7) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1102
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1103
        extern OBJ __retInst6();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1104
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1105
        OBJ (*dummy)() = __retInst6;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1106
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1107
        RETURN ( _MKSMALLINT((int)__retInst6) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1108
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1109
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1110
    (aSymbol == #retInstVar8) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1111
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1112
        extern OBJ __retInst7();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1113
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1114
        OBJ (*dummy)() = __retInst7;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1115
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1116
        RETURN ( _MKSMALLINT((int)__retInst7) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1117
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1118
    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1119
    (aSymbol == #retInstVar9) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1120
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1121
        extern OBJ __retInst8();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1122
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1123
        OBJ (*dummy)() = __retInst8;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1124
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1125
        RETURN ( _MKSMALLINT((int)__retInst8) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1126
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1127
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1128
    (aSymbol == #retInstVar10) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1129
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1130
        extern OBJ __retInst9();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1131
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1132
        OBJ (*dummy)() = __retInst9;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1133
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1134
        RETURN ( _MKSMALLINT((int)__retInst9) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1135
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1136
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1137
    (aSymbol == #retInstVar11) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1138
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1139
        extern OBJ __retInst10();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1140
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1141
        OBJ (*dummy)() = __retInst10;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1142
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1143
        RETURN ( _MKSMALLINT((int)__retInst10) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1144
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1145
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1146
    (aSymbol == #retInstVar12) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1147
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1148
        extern OBJ __retInst11();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1149
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1150
        OBJ (*dummy)() = __retInst11;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1151
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1152
        RETURN ( _MKSMALLINT((int)__retInst11) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1153
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1154
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1155
    (aSymbol == #retInstVar13) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1156
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1157
        extern OBJ __retInst12();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1158
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1159
        OBJ (*dummy)() = __retInst12;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1160
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1161
        RETURN ( _MKSMALLINT((int)__retInst12) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1162
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1163
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1164
    (aSymbol == #retInstVar14) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1165
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1166
        extern OBJ __retInst13();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1167
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1168
        OBJ (*dummy)() = __retInst13;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1169
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1170
        RETURN ( _MKSMALLINT((int)__retInst13) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1171
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1172
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1173
    (aSymbol == #retInstVar15) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1174
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1175
        extern OBJ __retInst14();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1176
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1177
        OBJ (*dummy)() = __retInst14;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1178
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1179
        RETURN ( _MKSMALLINT((int)__retInst14) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1180
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1181
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1182
    (aSymbol == #retInstVar16) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1183
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1184
        extern OBJ __retInst15();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1185
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1186
        OBJ (*dummy)() = __retInst15;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1187
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1188
        RETURN ( _MKSMALLINT((int)__retInst15) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1189
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1190
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1191
    (aSymbol == #retInstVar17) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1192
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1193
        extern OBJ __retInst16();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1194
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1195
        OBJ (*dummy)() = __retInst16;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1196
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1197
        RETURN ( _MKSMALLINT((int)__retInst16) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1198
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1199
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1200
    (aSymbol == #retInstVar18) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1201
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1202
        extern OBJ __retInst17();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1203
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1204
        OBJ (*dummy)() = __retInst17;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1205
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1206
        RETURN ( _MKSMALLINT((int)__retInst17) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1207
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1208
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1209
    (aSymbol == #retInstVar19) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1210
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1211
        extern OBJ __retInst18();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1212
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1213
        OBJ (*dummy)() = __retInst18;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1214
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1215
        RETURN ( _MKSMALLINT((int)__retInst18) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1216
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1217
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1218
    (aSymbol == #retInstVar20) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1219
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1220
        extern OBJ __retInst19();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1221
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1222
        OBJ (*dummy)() = __retInst19;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1223
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1224
        RETURN ( _MKSMALLINT((int)__retInst19) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1225
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1226
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1227
    (aSymbol == #retInstVar21) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1228
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1229
        extern OBJ __retInst20();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1230
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1231
        OBJ (*dummy)() = __retInst20;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1232
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1233
        RETURN ( _MKSMALLINT((int)__retInst20) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1234
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1235
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1236
    (aSymbol == #retInstVar22) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1237
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1238
        extern OBJ __retInst21();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1239
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1240
        OBJ (*dummy)() = __retInst21;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1241
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1242
        RETURN ( _MKSMALLINT((int)__retInst21) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1243
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1244
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1245
    (aSymbol == #retInstVar23) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1246
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1247
        extern OBJ __retInst22();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1248
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1249
        OBJ (*dummy)() = __retInst22;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1250
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1251
        RETURN ( _MKSMALLINT((int)__retInst22) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1252
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1253
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1254
    (aSymbol == #retInstVar24) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1255
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1256
        extern OBJ __retInst23();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1257
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1258
        OBJ (*dummy)() = __retInst23;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1259
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1260
        RETURN ( _MKSMALLINT((int)__retInst23) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1261
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1262
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1263
    (aSymbol == #retInstVar25) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1264
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1265
        extern OBJ __retInst24();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1266
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1267
        OBJ (*dummy)() = __retInst24;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1268
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1269
        RETURN ( _MKSMALLINT((int)__retInst24) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1270
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1271
    ].
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1272
    (aSymbol == #retInstVar26) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1273
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1274
        extern OBJ __retInst25();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1275
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1276
        OBJ (*dummy)() = __retInst25;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1277
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1278
        RETURN ( _MKSMALLINT((int)__retInst25) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1279
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1280
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1281
    (aSymbol == #retInstVar27) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1282
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1283
        extern OBJ __retInst26();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1284
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1285
        OBJ (*dummy)() = __retInst26;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1286
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1287
        RETURN ( _MKSMALLINT((int)__retInst26) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1288
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1289
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1290
    (aSymbol == #retInstVar28) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1291
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1292
        extern OBJ __retInst27();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1293
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1294
        OBJ (*dummy)() = __retInst27;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1295
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1296
        RETURN ( _MKSMALLINT((int)__retInst27) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1297
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1298
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1299
    (aSymbol == #retInstVar29) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1300
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1301
        extern OBJ __retInst28();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1302
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1303
        OBJ (*dummy)() = __retInst28;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1304
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1305
        RETURN ( _MKSMALLINT((int)__retInst28) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1306
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1307
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1308
    (aSymbol == #retInstVar30) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1309
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1310
        extern OBJ __retInst29();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1311
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1312
        OBJ (*dummy)() = __retInst29;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1313
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1314
        RETURN ( _MKSMALLINT((int)__retInst29) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1315
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1316
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1317
    (aSymbol == #retInstVar31) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1318
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1319
        extern OBJ __retInst30();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1320
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1321
        OBJ (*dummy)() = __retInst30;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1322
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1323
        RETURN ( _MKSMALLINT((int)__retInst30) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1324
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1325
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1326
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1327
    (aSymbol == #storeInstVar1) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1328
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1329
        extern OBJ __setInst0();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1330
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1331
        OBJ (*dummy)() = __setInst0;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1332
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1333
        RETURN ( _MKSMALLINT((int)__setInst0) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1334
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1335
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1336
    (aSymbol == #storeInstVar2) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1337
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1338
        extern OBJ __setInst1();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1339
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1340
        OBJ (*dummy)() = __setInst1;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1341
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1342
        RETURN ( _MKSMALLINT((int)__setInst1) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1343
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1344
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1345
    (aSymbol == #storeInstVar3) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1346
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1347
        extern OBJ __setInst2();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1348
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1349
        OBJ (*dummy)() = __setInst2;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1350
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1351
        RETURN ( _MKSMALLINT((int)__setInst2) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1352
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1353
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1354
    (aSymbol == #storeInstVar4) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1355
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1356
        extern OBJ __setInst3();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1357
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1358
        OBJ (*dummy)() = __setInst3;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1359
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1360
        RETURN ( _MKSMALLINT((int)__setInst3) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1361
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1362
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1363
    (aSymbol == #storeInstVar5) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1364
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1365
        extern OBJ __setInst4();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1366
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1367
        OBJ (*dummy)() = __setInst4;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1368
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1369
        RETURN ( _MKSMALLINT((int)__setInst4) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1370
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1371
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1372
    (aSymbol == #storeInstVar6) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1373
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1374
        extern OBJ __setInst5();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1375
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1376
        OBJ (*dummy)() = __setInst5;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1377
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1378
        RETURN ( _MKSMALLINT((int)__setInst5) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1379
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1380
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1381
    (aSymbol == #storeInstVar7) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1382
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1383
        extern OBJ __setInst6();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1384
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1385
        OBJ (*dummy)() = __setInst6;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1386
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1387
        RETURN ( _MKSMALLINT((int)__setInst6) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1388
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1389
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1390
    (aSymbol == #storeInstVar8) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1391
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1392
        extern OBJ __setInst7();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1393
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1394
        OBJ (*dummy)() = __setInst7;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1395
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1396
        RETURN ( _MKSMALLINT((int)__setInst7) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1397
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1398
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1399
    (aSymbol == #storeInstVar9) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1400
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1401
        extern OBJ __setInst8();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1402
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1403
        OBJ (*dummy)() = __setInst8;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1404
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1405
        RETURN ( _MKSMALLINT((int)__setInst8) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1406
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1407
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1408
    (aSymbol == #storeInstVar10) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1409
%{
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1410
        extern OBJ __setInst9();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1411
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1412
        OBJ (*dummy)() = __setInst9;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1413
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1414
        RETURN ( _MKSMALLINT((int)__setInst9) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1415
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1416
    ].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1417
    (aSymbol == #storeInstVar11) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1418
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1419
        extern OBJ __setInst10();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1420
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1421
        OBJ (*dummy)() = __setInst10;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1422
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1423
        RETURN ( _MKSMALLINT((int)__setInst10) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1424
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1425
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1426
    (aSymbol == #storeInstVar12) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1427
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1428
        extern OBJ __setInst11();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1429
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1430
        OBJ (*dummy)() = __setInst11;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1431
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1432
        RETURN ( _MKSMALLINT((int)__setInst11) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1433
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1434
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1435
    (aSymbol == #storeInstVar13) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1436
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1437
        extern OBJ __setInst12();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1438
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1439
        OBJ (*dummy)() = __setInst12;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1440
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1441
        RETURN ( _MKSMALLINT((int)__setInst12) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1442
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1443
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1444
    (aSymbol == #storeInstVar13) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1445
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1446
        extern OBJ __setInst12();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1447
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1448
        OBJ (*dummy)() = __setInst12;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1449
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1450
        RETURN ( _MKSMALLINT((int)__setInst12) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1451
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1452
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1453
    (aSymbol == #storeInstVar14) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1454
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1455
        extern OBJ __setInst13();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1456
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1457
        OBJ (*dummy)() = __setInst13;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1458
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1459
        RETURN ( _MKSMALLINT((int)__setInst13) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1460
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1461
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1462
    (aSymbol == #storeInstVar15) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1463
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1464
        extern OBJ __setInst14();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1465
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1466
        OBJ (*dummy)() = __setInst14;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1467
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1468
        RETURN ( _MKSMALLINT((int)__setInst14) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1469
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1470
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1471
    (aSymbol == #storeInstVar16) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1472
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1473
        extern OBJ __setInst15();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1474
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1475
        OBJ (*dummy)() = __setInst15;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1476
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1477
        RETURN ( _MKSMALLINT((int)__setInst15) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1478
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1479
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1480
    (aSymbol == #storeInstVar17) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1481
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1482
        extern OBJ __setInst16();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1483
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1484
        OBJ (*dummy)() = __setInst16;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1485
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1486
        RETURN ( _MKSMALLINT((int)__setInst16) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1487
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1488
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1489
    (aSymbol == #storeInstVar18) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1490
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1491
        extern OBJ __setInst17();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1492
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1493
        OBJ (*dummy)() = __setInst17;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1494
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1495
        RETURN ( _MKSMALLINT((int)__setInst17) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1496
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1497
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1498
    (aSymbol == #storeInstVar19) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1499
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1500
        extern OBJ __setInst18();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1501
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1502
        OBJ (*dummy)() = __setInst18;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1503
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1504
        RETURN ( _MKSMALLINT((int)__setInst18) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1505
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1506
    ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1507
    (aSymbol == #storeInstVar20) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1508
%{
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1509
        extern OBJ __setInst19();
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1510
#if defined(SYSV4) && defined(i386)
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1511
        OBJ (*dummy)() = __setInst19;
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1512
#endif
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1513
        RETURN ( _MKSMALLINT((int)__setInst19) );
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1514
%}
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1515
    ].
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1516
    (aSymbol == #storeInstVar21) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1517
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1518
        extern OBJ __setInst20();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1519
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1520
        OBJ (*dummy)() = __setInst20;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1521
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1522
        RETURN ( _MKSMALLINT((int)__setInst20) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1523
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1524
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1525
    (aSymbol == #storeInstVar22) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1526
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1527
        extern OBJ __setInst21();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1528
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1529
        OBJ (*dummy)() = __setInst21;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1530
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1531
        RETURN ( _MKSMALLINT((int)__setInst21) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1532
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1533
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1534
    (aSymbol == #storeInstVar23) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1535
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1536
        extern OBJ __setInst22();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1537
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1538
        OBJ (*dummy)() = __setInst22;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1539
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1540
        RETURN ( _MKSMALLINT((int)__setInst22) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1541
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1542
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1543
    (aSymbol == #storeInstVar23) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1544
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1545
        extern OBJ __setInst22();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1546
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1547
        OBJ (*dummy)() = __setInst22;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1548
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1549
        RETURN ( _MKSMALLINT((int)__setInst22) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1550
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1551
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1552
    (aSymbol == #storeInstVar24) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1553
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1554
        extern OBJ __setInst23();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1555
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1556
        OBJ (*dummy)() = __setInst23;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1557
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1558
        RETURN ( _MKSMALLINT((int)__setInst23) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1559
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1560
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1561
    (aSymbol == #storeInstVar25) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1562
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1563
        extern OBJ __setInst24();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1564
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1565
        OBJ (*dummy)() = __setInst24;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1566
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1567
        RETURN ( _MKSMALLINT((int)__setInst24) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1568
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1569
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1570
    (aSymbol == #storeInstVar26) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1571
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1572
        extern OBJ __setInst25();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1573
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1574
        OBJ (*dummy)() = __setInst25;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1575
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1576
        RETURN ( _MKSMALLINT((int)__setInst25) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1577
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1578
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1579
    (aSymbol == #storeInstVar27) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1580
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1581
        extern OBJ __setInst26();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1582
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1583
        OBJ (*dummy)() = __setInst26;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1584
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1585
        RETURN ( _MKSMALLINT((int)__setInst26) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1586
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1587
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1588
    (aSymbol == #storeInstVar28) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1589
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1590
        extern OBJ __setInst27();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1591
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1592
        OBJ (*dummy)() = __setInst27;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1593
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1594
        RETURN ( _MKSMALLINT((int)__setInst27) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1595
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1596
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1597
    (aSymbol == #storeInstVar29) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1598
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1599
        extern OBJ __setInst28();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1600
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1601
        OBJ (*dummy)() = __setInst28;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1602
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1603
        RETURN ( _MKSMALLINT((int)__setInst28) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1604
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1605
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1606
    (aSymbol == #storeInstVar30) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1607
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1608
        extern OBJ __setInst29();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1609
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1610
        OBJ (*dummy)() = __setInst29;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1611
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1612
        RETURN ( _MKSMALLINT((int)__setInst29) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1613
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1614
    ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1615
    (aSymbol == #storeInstVar31) ifTrue:[
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1616
%{
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1617
        extern OBJ __setInst30();
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1618
#if defined(SYSV4) && defined(i386)
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1619
        OBJ (*dummy)() = __setInst30;
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1620
#endif
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1621
        RETURN ( _MKSMALLINT((int)__setInst30) );
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1622
%}
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1623
    ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1624
    ^  nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1625
! !
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1626
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1627
!ByteCodeCompiler methodsFor:'machine code generation'!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1628
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1629
checkForSharedCode:symbolicCodeArray
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1630
    "if this method is a very simple one,
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1631
     we can use the shared compiled code"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1632
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1633
    |codeSymbol nArgs index|
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1634
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1635
    symbolicCodeArray isNil ifTrue:[^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1636
    codeSymbol := symbolicCodeArray at:1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1637
    nArgs := methodArgs size.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1638
    (nArgs == 0) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1639
        (codeSymbol == #retSelf) ifTrue:[^ codeSymbol].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1640
        (codeSymbol == #retTrue) ifTrue:[^ codeSymbol].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1641
        (codeSymbol == #retFalse) ifTrue:[^ codeSymbol].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1642
        (codeSymbol == #retNil) ifTrue:[^ codeSymbol].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1643
        (codeSymbol == #ret0) ifTrue:[^ codeSymbol].
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1644
        ('retInstVar*' match:codeSymbol) ifTrue:[^ codeSymbol].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1645
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1646
        (codeSymbol == #pushMethodArg1) ifTrue:[
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1647
            ((symbolicCodeArray at:2) == #storeInstVar) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1648
                index := symbolicCodeArray at:3.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1649
                ((symbolicCodeArray at:4) == #retSelf) ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1650
                    ^ ('storeInstVar' , index printString) asSymbol
3
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1651
                ].
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1652
                ^ nil
b63b8a6b71fb *** empty log message ***
claus
parents: 1
diff changeset
  1653
            ].
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1654
            ('storeInstVar*' match:(symbolicCodeArray at:2)) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1655
                ((symbolicCodeArray at:3) == #retSelf) ifTrue:[^ symbolicCodeArray at:2]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1656
            ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1657
            ^ nil
1
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1658
        ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1659
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1660
        codeSymbol == #pushInstVar ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1661
            index := symbolicCodeArray at:2.
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1662
            (symbolicCodeArray at:3) == #retTop ifTrue:[
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1663
                ^ ('retInstVar' , index printString) asSymbol
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1664
            ].
77da9f5728e5 *** empty log message ***
claus
parents: 0
diff changeset
  1665
            ^ nil
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1666
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1667
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1668
    ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1669
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1670
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1671
checkForMachineCode:symbolicCodeArray
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1672
    "if this method is a simple one,
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1673
     we can compile it into machine code"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1674
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1675
    |code1 code2 code3 name|
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1676
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1677
    symbolicCodeArray isNil ifTrue:[^ nil].
12
80f627afdd4e *** empty log message ***
claus
parents: 6
diff changeset
  1678
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1679
    code1 := symbolicCodeArray at:1.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1680
    (code1 == #retNum) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1681
        ^ self codeForRetNum:(symbolicCodeArray at:2)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1682
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1683
    (code1 == #pushNum) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1684
        code2 := symbolicCodeArray at:3.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1685
        (code2 == #retTop) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1686
            ^ self codeForRetNum:(symbolicCodeArray at:2)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1687
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1688
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1689
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1690
    (code1 == #pushMethodArg1) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1691
        code2 := symbolicCodeArray at:2.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1692
        ((code2 == #storeGlobal)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1693
        or:[code2 == #storeClassVar]) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1694
            code3 := symbolicCodeArray at:4.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1695
            (code3 == #retSelf) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1696
                name := symbolicCodeArray at:3.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1697
                ^ self codeForSetCell:name
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1698
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1699
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1700
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1701
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1702
    (code1 == #pushGlobal) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1703
        code2 := symbolicCodeArray at:8.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1704
        (code2 == #retTop) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1705
            name := symbolicCodeArray at:2.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1706
            ^ self codeForRetCell:name
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1707
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1708
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1709
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1710
    (code1 == #pushClassVar) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1711
        code2 := symbolicCodeArray at:8.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1712
        (code2 == #retTop) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1713
            name := symbolicCodeArray at:2.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1714
            ^ self codeForRetCell:name
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1715
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1716
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1717
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1718
    (code1 == #pushLit) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1719
        code2 := symbolicCodeArray at:3.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1720
        (code2 == #retTop) ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1721
            ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1722
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1723
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1724
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1725
    ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1726
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1727
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1728
codeForRetNum:value
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1729
     "^ number will be coded into machine code"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1730
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1731
    |count b conIndex tagHi newCode|
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1732
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1733
    count := self codeProtoForRetNumEnd - self codeProtoForRetNum.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1734
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1735
    b := ExternalBytes address:(self codeProtoForRetNum).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1736
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1737
    "search for sequence 0x92345678"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1738
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1739
    tagHi := false.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1740
    1 to:count-3 do:[:index |
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1741
        (b at:index) == 16r92 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1742
            (b at:index+1) == 16r34 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1743
                (b at:index+2) == 16r56 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1744
                    (b at:index+3) == 16r78 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1745
                        conIndex := index.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1746
                        tagHi := true
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1747
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1748
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1749
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1750
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1751
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1752
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1753
    conIndex isNil ifTrue:["'search failed' printNewline. "^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1754
    tagHi ifFalse:['low tag unsupported' printNewline. ^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1755
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1756
    "allocate code ..."
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1757
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1758
    newCode := ExternalBytes newForText:count.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1759
    newCode isNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1760
        'alloc of text (size ' print. count print. ') failed' printNewline.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1761
        ^ nil
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1762
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1763
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1764
    "copy from proto"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1765
    1 to:count do:[:index |
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1766
        newCode at:index put:(b at:index)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1767
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1768
    "put in ret-value"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1769
    newCode at:conIndex   put:((value bitShift:-24) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1770
    newCode at:conIndex+1 put:((value bitShift:-16) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1771
    newCode at:conIndex+2 put:((value bitShift:-8) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1772
    newCode at:conIndex+3 put:(value bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1773
    tagHi ifTrue:[
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
  1774
        newCode at:conIndex
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1775
               put:((newCode at:conIndex) bitOr:16r80)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1776
    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1777
    ].
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
  1778
'address is:' print. (newCode address printStringRadix:16) printNewline.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1779
    ^ newCode address
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1780
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1781
    "ByteCodeCompiler new codeForRetNum:15"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1782
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1783
codeForRetCell:aGlobalOrClassVariableSymbol
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1784
     "^ global will be coded into machine code"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1785
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1786
    |cell count b conIndex newCode msbFirst|
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1787
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1788
    cell := Smalltalk cellAt:aGlobalOrClassVariableSymbol.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1789
    cell isNil ifTrue:[^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1790
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1791
    count := self codeProtoForRetCellEnd - self codeProtoForRetCell.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1792
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1793
    b := ExternalBytes address:(self codeProtoForRetCell).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1794
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1795
    msbFirst := true.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1796
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1797
    "search for sequence 0x12345678 // 78563412"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1798
    1 to:count - 3 do:[:index |
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1799
        (b at:index) == 16r12 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1800
            (b at:index+1) == 16r34 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1801
                (b at:index+2) == 16r56 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1802
                    (b at:index+3) == 16r78 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1803
                        conIndex := index
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1804
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1805
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1806
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1807
        ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1808
        conIndex isNil ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1809
            (b at:index) == 16r78 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1810
                (b at:index+1) == 16r56 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1811
                    (b at:index+2) == 16r34 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1812
                        (b at:index+3) == 16r12 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1813
                            conIndex := index.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1814
                            msbFirst := false
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1815
                        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1816
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1817
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1818
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1819
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1820
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1821
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1822
    conIndex isNil ifTrue:["'search failed' printNewline. " ^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1823
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1824
    "allocate code ..."
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1825
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1826
    newCode := ExternalBytes newForText:count.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1827
    newCode isNil ifTrue:['alloc of text (size ' print. count print. ') failed' printNewline.^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1828
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1829
    "copy from proto"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1830
    1 to:count do:[:index |
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1831
        newCode at:index put:(b at:index)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1832
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1833
    "put in cell address"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1834
    msbFirst ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1835
        newCode at:conIndex   put:((cell bitShift:-24) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1836
        newCode at:conIndex+1 put:((cell bitShift:-16) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1837
        newCode at:conIndex+2 put:((cell bitShift:-8) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1838
        newCode at:conIndex+3 put:(cell bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1839
    ] ifFalse:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1840
        newCode at:conIndex+3 put:((cell bitShift:-24) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1841
        newCode at:conIndex+2 put:((cell bitShift:-16) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1842
        newCode at:conIndex+1 put:((cell bitShift:-8) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1843
        newCode at:conIndex   put:(cell bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1844
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1845
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
  1846
'address is:' print. (newCode address printStringRadix:16) printNewline.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1847
    ^ newCode address
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1848
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1849
    "ByteCodeCompiler new codeForRetCell:#Transcript"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1850
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1851
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1852
codeForSetCell:aGlobalOrClassVariableSymbol
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1853
     "global := arg will be coded into machine code"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1854
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1855
    |cell count b conIndex newCode|
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1856
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1857
    cell := Smalltalk cellAt:aGlobalOrClassVariableSymbol.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1858
    cell isNil ifTrue:[^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1859
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1860
    count := self codeProtoForSetCellEnd - self codeProtoForSetCell.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1861
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1862
    b := ExternalBytes address:(self codeProtoForSetCell).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1863
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1864
    "search for sequence 0x12345678"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1865
    1 to:count - 3 do:[:index |
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1866
        (b at:index) == 16r12 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1867
            (b at:index+1) == 16r34 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1868
                (b at:index+2) == 16r56 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1869
                    (b at:index+3) == 16r78 ifTrue:[
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1870
                        conIndex := index
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1871
                    ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1872
                ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1873
            ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1874
        ]
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1875
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1876
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1877
    conIndex isNil ifTrue:["'search failed' printNewline." ^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1878
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1879
    "allocate code ..."
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1880
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1881
    newCode := ExternalBytes newForData:count.
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1882
    newCode isNil ifTrue:['alloc of data (size ' print. count print. ') failed' printNewline.^ nil].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1883
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1884
    "copy from proto"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1885
    1 to:count do:[:index |
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1886
        newCode at:index put:(b at:index)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1887
    ].
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1888
    "put in cell address"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1889
    newCode at:conIndex   put:((cell bitShift:-24) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1890
    newCode at:conIndex+1 put:((cell bitShift:-16) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1891
    newCode at:conIndex+2 put:((cell bitShift:-8) bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1892
    newCode at:conIndex+3 put:(cell bitAnd:16rFF).
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1893
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
  1894
'address is:' print. (newCode address printStringRadix:16) printNewline.
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1895
    ^ newCode address
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1896
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1897
    "ByteCodeCompiler new codeForSetCell:#xyz"
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1898
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1899
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1900
codeProtoForRetNum
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1901
%{   /* NOCONTEXT */
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1902
     extern OBJ __retNumProto();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1903
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1904
     OBJ (*dummy)() = __retNumProto;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1905
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1906
     RETURN ( _MKSMALLINT((int)__retNumProto) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1907
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1908
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1909
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1910
codeProtoForRetNumEnd
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1911
%{   /* NOCONTEXT */
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1912
     extern OBJ __retNumProtoEnd();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1913
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1914
     OBJ (*dummy)() = __retNumProtoEnd;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1915
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1916
     RETURN ( _MKSMALLINT((int)__retNumProtoEnd) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1917
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1918
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1919
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1920
codeProtoForRetCell
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1921
%{   /* NOCONTEXT */
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1922
     extern OBJ __retCellProto();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1923
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1924
     OBJ (*dummy)() = __retCellProto;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1925
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1926
     RETURN ( _MKSMALLINT((int)__retCellProto) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1927
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1928
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1929
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1930
codeProtoForRetCellEnd
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1931
%{   /* NOCONTEXT */
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1932
     extern OBJ __retCellProtoEnd();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1933
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1934
     OBJ (*dummy)() = __retCellProtoEnd;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1935
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1936
     RETURN ( _MKSMALLINT((int)__retCellProtoEnd) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1937
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1938
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1939
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1940
codeProtoForSetCell
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1941
%{   /* NOCONTEXT */
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1942
     extern OBJ __setCellProto();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1943
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1944
     OBJ (*dummy)() = __setCellProto;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1945
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1946
     RETURN ( _MKSMALLINT((int)__setCellProto) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1947
%}
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1948
!
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1949
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1950
codeProtoForSetCellEnd
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1951
%{   /* NOCONTEXT */
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1952
     extern OBJ __setCellProtoEnd();
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1953
#if defined(SYSV4) && defined(i386)
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1954
     OBJ (*dummy)() = __setCellProtoEnd;
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1955
#endif
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1956
     RETURN ( _MKSMALLINT((int)__setCellProtoEnd) );
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1957
%}
6
0cd4e7480440 *** empty log message ***
claus
parents: 5
diff changeset
  1958
0
7ad01559b262 Initial revision
claus
parents:
diff changeset
  1959
! !