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