JavaContext.st
author cg
Thu, 20 Mar 1997 14:39:20 +0000
changeset 156 fee47d32724d
parent 129 f40775af59a5
child 198 5543d1079a4a
permissions -rw-r--r--
*** empty log message ***

Object subclass:#JavaContext
	instanceVariableNames:'method class sender stack frameBase pc sp'
	classVariableNames:''
	poolDictionaries:''
	category:'Java-Support'
!


!JavaContext methodsFor:'ST context mimicri'!

argsAndVars
    |nArgs nVars|

    nArgs := method numArgs.
    nVars := method numVars.

    method isStatic ifTrue:[
        (nArgs + nVars) == 0 ifTrue:[
            ^ #()
        ].
        ^ (stack copyFrom:frameBase to:(frameBase + nArgs + nVars - 1)) asArray
    ].
    ^ (stack copyFrom:(frameBase+1) to:(frameBase + nArgs + nVars)) asArray

    "Created: 1.5.1996 / 17:32:44 / cg"
    "Modified: 1.5.1996 / 17:41:50 / cg"
!

canReturn
    ^ false

    "Created: 1.5.1996 / 15:05:36 / cg"
!

findNextContextWithSelector:sel1 or:sel2
    sender isNil ifTrue:[^ nil].
    ^ sender findNextContextWithSelector:sel1 or:sel2

    "Created: 20.3.1997 / 13:54:01 / cg"
!

hasStackToShow
    ^ true
!

isBlockContext
    ^ false

    "Created: 1.5.1996 / 15:05:26 / cg"
!

lineNumber
    |nr|

    pc isNil ifTrue:[^0].

    nr := method lineNumberForPC:pc.
    nr isNil ifTrue:[^ 0].
    ^ nr.

    "Created: 1.5.1996 / 15:05:47 / cg"
!

methodClass
    ^ class

    "Created: 1.5.1996 / 15:04:17 / cg"
!

methodHome
    ^ self

    "Created: 1.5.1996 / 15:03:43 / cg"
!

numArgs
    ^ method numArgs

    "Created: 1.5.1996 / 15:04:35 / cg"
!

numVars
    ^ 0

    "Created: 1.5.1996 / 15:05:03 / cg"
!

receiver
    method isStatic ifTrue:[
        ^ method javaClass
    ].
    frameBase > stack size ifTrue:[
        ^ nil
    ].
    ^ stack at:frameBase

    "Created: 1.5.1996 / 15:04:03 / cg"
    "Modified: 1.5.1996 / 17:43:17 / cg"
!

selector            
    ^ (method name , method signature) asSymbol "/ signatureName

    "Created: 1.5.1996 / 15:03:03 / cg"
!

stack
    ^ stack 
!

stackFrame
sp < frameBase ifTrue:[
 'oops - negative stackFrame' errorPrintCR.
 ^ #()
].
    ^ stack copyFrom:frameBase to:(sp-1)
! !

!JavaContext methodsFor:'accessing'!

class:aJavaClass method:aJavaMethod sender:aContext stack:s frameBase:f
    class := aJavaClass.
    method := aJavaMethod.
    sender := aContext.
    stack := s.
    frameBase := f

    "Modified: 1.5.1996 / 17:39:34 / cg"
    "Created: 1.5.1996 / 17:42:27 / cg"
!

class:aJavaClass method:aJavaMethod sender:aContext stack:s stackPointer:spp frameBase:f
    class := aJavaClass.
    method := aJavaMethod.
    sender := aContext.
    stack := s.
    sp := spp.
    frameBase := f

    "Modified: 1.5.1996 / 17:39:34 / cg"
    "Created: 1.5.1996 / 17:42:27 / cg"
!

method
    ^ method.

    "Created: 1.5.1996 / 15:00:23 / cg"
    "Modified: 1.5.1996 / 15:00:47 / cg"
!

pc
    ^ pc
!

sender
    ^ sender.

    "Modified: 1.5.1996 / 15:00:47 / cg"
    "Created: 1.5.1996 / 15:01:18 / cg"
!

setPC:anInteger
    pc := anInteger
!

setPC:pcInteger SP:spInteger
    pc := pcInteger.
    sp := spInteger.
!

setSP:anInteger
    sp := anInteger
!

setStack:aCollection
    stack := aCollection
!

sp
    ^ sp
! !

!JavaContext methodsFor:'printing & storing'!

printString
    |clsName nm mS recCls rec recClsName rnm|

    clsName := class name.
    (Smalltalk includes:(clsName asSymbol)) ifTrue:[
        nm := 'JAVA-' , clsName
    ] ifFalse:[
        (class fullName startsWith:'java/lang/') ifTrue:[
            nm := clsName
        ] ifFalse:[
            nm := class fullName
        ].
    ].
    mS := nm , '::' , method signatureName.

    rec := self receiver.
    recCls := rec class.

    (rec isKindOf:JavaObject) ifFalse:[
        rnm := '[' , recCls name , ']'
    ] ifTrue:[
        recClsName := recCls name.
        (Smalltalk includes:(recClsName asSymbol)) ifTrue:[
            rnm := 'JAVA-' , recClsName
        ] ifFalse:[
            (recCls fullName startsWith:'java/lang/') ifTrue:[
                rnm := recClsName
            ] ifFalse:[
                rnm := recCls fullName
            ].
        ].
    ].

    (rnm ~= nm) ifTrue:[
        ^ rnm , '>>' , mS
    ].

    ^ mS

    "Created: 1.5.1996 / 15:07:43 / cg"
    "Modified: 1.5.1996 / 17:58:16 / cg"
! !

!JavaContext class methodsFor:'documentation'!

version
    ^ '$Header: /home/jv/Projects/SmalltalkX/repositories/cvs/stx/libjava/JavaContext.st,v 1.11 1997/03/20 14:38:56 cg Exp $'
! !