IRStackCount.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 29 Mar 2012 18:03:58 +0000
changeset 37 be8c2dd09dff
parent 26 db19d89eef60
child 41 f3898a3b378d
permissions -rw-r--r--
Build files regenerated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
     1
"{ Package: 'cvut:stx/goodies/newcompiler' }"
1
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
Object subclass:#IRStackCount
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:'start position length'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	category:'NewCompiler-Bytecode'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
IRStackCount comment:'This keeps track of the stack count for the BytecodeGenerator.'
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
!IRStackCount class methodsFor:'instance creation'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
new
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
	^ super new startAt: 0
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!IRStackCount class methodsFor:'as yet unclassified'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
startAt: pos
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
	^ super new startAt: pos
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
!IRStackCount methodsFor:'affecting'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
pop
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
	^ self pop: 1
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
pop: n
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
	(position _ position - n) "< 0 
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
		ifTrue: [self error: 'Parse stack underflow']"
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
push
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
	^ self push: 1
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
push: n
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
	(position _ position + n) > length 
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
		ifTrue: [length _ position]
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
!IRStackCount methodsFor:'comparing'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
= other
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
	^ self class == other class 
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
	  and: [start = other start
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
	  and: [position = other position
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
	  and: [length = other size]]]
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
hash
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
	^ position hash bitXor: (length hash bitXor: start hash)
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
!IRStackCount methodsFor:'error handling'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
errorStackOutOfSync: aStackCount 
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
	self error: 'stack not in sync!!'.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
!IRStackCount methodsFor:'initialize'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
startAt: pos
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
	start _ position _ length _ pos
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
!IRStackCount methodsFor:'printing'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
printOn: aStream
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
	
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
	super printOn: aStream.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
	aStream
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
		nextPutAll: ' start '; print: start;
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
		nextPutAll: ' stop '; print: position;
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
		nextPutAll: ' max '; print: length.
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
!IRStackCount methodsFor:'results'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
length
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
	^length
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
linkTo: stackOrNil
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
	stackOrNil ifNil: [^ self class startAt: self position].
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
	^ self position = stackOrNil start
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
		ifTrue: [stackOrNil]
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
		ifFalse: [self errorStackOutOfSync: stackOrNil]
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
position
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
	^position
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
size
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
	^length
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
start
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
	^ start
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
! !
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
!IRStackCount class methodsFor:'documentation'!
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
version
37
be8c2dd09dff Build files regenerated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   124
    ^ '$Id$'
23
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   125
!
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   126
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   127
version_CVS
37
be8c2dd09dff Build files regenerated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   128
    ^ '§Header: /cvs/stx/cvut/stx/goodies/newcompiler/IRStackCount.st,v 1.3 2009/10/08 11:59:57 fm Exp §'
23
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   129
!
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   130
377bc46cad12 Moved to package cvut:stx/goodies/newcompiler to be in sync with eXept
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   131
version_SVN
37
be8c2dd09dff Build files regenerated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 26
diff changeset
   132
    ^ '$Id::                                                                                                                        $'
1
0dd36941955f Initial revision. All tests pass.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
! !