CodeStream.st
author Claus Gittinger <cg@exept.de>
Sun, 17 Jun 2018 08:31:51 +0200
changeset 4278 d756ed6a7120
parent 657 0ecf1ff6f6bf
permissions -rw-r--r--
#FEATURE by cg class: ConstantNode added: #isConstantNumber
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
98
claus
parents:
diff changeset
     1
"
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents:
diff changeset
     3
	      All Rights Reserved
claus
parents:
diff changeset
     4
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
claus
parents:
diff changeset
    10
 hereby transferred.
claus
parents:
diff changeset
    11
"
claus
parents:
diff changeset
    12
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    13
WriteStream subclass:#CodeStream
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    14
	instanceVariableNames:'class scope requestor'
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    15
	classVariableNames:''
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    16
	poolDictionaries:''
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    17
	category:'System-Compiler ST-80-compatibility'
98
claus
parents:
diff changeset
    18
!
claus
parents:
diff changeset
    19
claus
parents:
diff changeset
    20
!CodeStream class methodsFor:'documentation'!
claus
parents:
diff changeset
    21
claus
parents:
diff changeset
    22
copyright
claus
parents:
diff changeset
    23
"
claus
parents:
diff changeset
    24
 COPYRIGHT (c) 1995 by Claus Gittinger
claus
parents:
diff changeset
    25
	      All Rights Reserved
claus
parents:
diff changeset
    26
claus
parents:
diff changeset
    27
 This software is furnished under a license and may be used
claus
parents:
diff changeset
    28
 only in accordance with the terms of that license and with the
claus
parents:
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
claus
parents:
diff changeset
    30
 be provided or otherwise made available to, or used by, any
claus
parents:
diff changeset
    31
 other person.  No title to or ownership of the software is
claus
parents:
diff changeset
    32
 hereby transferred.
claus
parents:
diff changeset
    33
"
claus
parents:
diff changeset
    34
!
claus
parents:
diff changeset
    35
claus
parents:
diff changeset
    36
documentation
claus
parents:
diff changeset
    37
"
claus
parents:
diff changeset
    38
    This is a pure mimicri class.
claus
parents:
diff changeset
    39
    It is not used by ST/X, but provided to support limited
claus
parents:
diff changeset
    40
    compatibility for applications which build up codetrees,
claus
parents:
diff changeset
    41
    knowing internals of ST-80's compiler class hierarchy.
claus
parents:
diff changeset
    42
    This classes protocol is not (not meant to be) fully covering
claus
parents:
diff changeset
    43
    the corresponding ST-80's classes protocol. It maps ST-80 messages
claus
parents:
diff changeset
    44
    to corresponding ST/X messages (as far as possible).
claus
parents:
diff changeset
    45
claus
parents:
diff changeset
    46
    NO WARRANTY and GUARANTEE; this class may be removed without notice.
claus
parents:
diff changeset
    47
"
claus
parents:
diff changeset
    48
! !
claus
parents:
diff changeset
    49
claus
parents:
diff changeset
    50
!CodeStream class methodsFor:'instance creation'!
claus
parents:
diff changeset
    51
claus
parents:
diff changeset
    52
new
claus
parents:
diff changeset
    53
    ^ super on:(OrderedCollection new:100)
claus
parents:
diff changeset
    54
! !
claus
parents:
diff changeset
    55
claus
parents:
diff changeset
    56
!CodeStream methodsFor:'accessing'!
claus
parents:
diff changeset
    57
claus
parents:
diff changeset
    58
class:aClass outerScope:aScope
claus
parents:
diff changeset
    59
    class := aClass.
claus
parents:
diff changeset
    60
    scope := aScope
claus
parents:
diff changeset
    61
!
claus
parents:
diff changeset
    62
claus
parents:
diff changeset
    63
requestor:someOne
claus
parents:
diff changeset
    64
    requestor := someOne
claus
parents:
diff changeset
    65
! !
claus
parents:
diff changeset
    66
claus
parents:
diff changeset
    67
!CodeStream methodsFor:'code generation'!
claus
parents:
diff changeset
    68
claus
parents:
diff changeset
    69
makeMethod:aMethodNode
claus
parents:
diff changeset
    70
    "mhmh - kludge-create a compiler and let it generate code"
claus
parents:
diff changeset
    71
claus
parents:
diff changeset
    72
    |compiler symbolicCodeArray newMethod lits|
claus
parents:
diff changeset
    73
claus
parents:
diff changeset
    74
    compiler := ByteCodeCompiler new.
claus
parents:
diff changeset
    75
    compiler notifying:requestor.
claus
parents:
diff changeset
    76
    compiler targetClass:class.
claus
parents:
diff changeset
    77
claus
parents:
diff changeset
    78
    symbolicCodeArray := self contents.
claus
parents:
diff changeset
    79
    (compiler genByteCodeFrom:symbolicCodeArray) == #Error ifTrue:[
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    80
        self halt
98
claus
parents:
diff changeset
    81
    ].
claus
parents:
diff changeset
    82
claus
parents:
diff changeset
    83
    newMethod := Method new.
claus
parents:
diff changeset
    84
    newMethod byteCode:(compiler code).
claus
parents:
diff changeset
    85
    lits := compiler literalArray.
claus
parents:
diff changeset
    86
    lits notNil ifTrue:[
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    87
        newMethod literals:lits
98
claus
parents:
diff changeset
    88
    ].
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    89
    newMethod numberOfVars:(compiler numberOfMethodVars).
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    90
    newMethod numberOfArgs:(compiler numberOfMethodArgs).
98
claus
parents:
diff changeset
    91
    newMethod stackSize:(compiler maxStackDepth).
claus
parents:
diff changeset
    92
claus
parents:
diff changeset
    93
    Project notNil ifTrue:[
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    94
        newMethod package:(Project currentPackageName)
98
claus
parents:
diff changeset
    95
    ].
claus
parents:
diff changeset
    96
claus
parents:
diff changeset
    97
    class addSelector:aMethodNode selector withMethod:newMethod.
claus
parents:
diff changeset
    98
    ^ newMethod
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
    99
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   100
    "Modified: / 4.3.1998 / 14:46:34 / stefan"
98
claus
parents:
diff changeset
   101
! !
657
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   102
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   103
!CodeStream class methodsFor:'documentation'!
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   104
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   105
version
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   106
    ^ '$Header: /cvs/stx/stx/libcomp/CodeStream.st,v 1.6 1998-03-06 15:38:37 stefan Exp $'
0ecf1ff6f6bf Fix #makeMethod:
Stefan Vogel <sv@exept.de>
parents: 135
diff changeset
   107
! !