SmallSenseInstvarInterfaceExtractor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 25 Jul 2013 17:27:45 +0100
changeset 40 85eaf579889b
parent 32 658f47bc231e
permissions -rw-r--r--
Support for elecring blank line after smalltelk temporaries.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
658f47bc231e Code moved to package jv:smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 29
diff changeset
     1
"{ Package: 'jv:smallsense' }"
0
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
SmallSenseAbstractInstvarInterfaceExtractor subclass:#SmallSenseInstvarInterfaceExtractor
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
	instanceVariableNames:'assingmentsDictionary assigmentsTypeDictionary'
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
	classVariableNames:''
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	poolDictionaries:''
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	category:'SmallSense-Roel Typer'
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
!SmallSenseInstvarInterfaceExtractor methodsFor:'assignmentParsing'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
addAssignment:value to:node index:index 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
    |assignments|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    "Test if it is tmp or not tmp. Tmp variable returns nil"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
    (node respondsTo:#variable) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
        "if we receive node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
        assignments := self assignmentsTo:node variable asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
    ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
        "if we receive string"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
        assignments := self assignmentsTo:node asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    (assignments notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
        "not tmp"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
        collector addAssignment:value to:index.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
    ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
        "tmp"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
        (node respondsTo:#variable) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
            "if we receive node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
            collector addAssignment:value toTmp:node variable asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
        ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
            "if we receive string"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
            collector addAssignment:value toTmp:node asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
    "Created: / 09-11-2010 / 18:32:05 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
    "Modified: / 15-02-2011 / 13:11:16 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
assignmentsTo:node 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    |assignments|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
    assignments := collector assignmentsTo:node asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    (assignments isNil)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
      ^nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
    ^ assignments.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
    "Created: / 01-12-2010 / 15:41:40 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
    "Modified: / 17-03-2011 / 15:40:37 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
assignmentsToTmp:nodeIndex
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
    |assignments|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
    assignments:=collector assignmentsTmpTo:nodeIndex.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
    (assignments isNil)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
      ^nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
    ^ assignments.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
    "Created: / 01-12-2010 / 16:04:10 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
createIndexFromNode:node 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
    "Creates index of node or string for roelTyper"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
    
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
    (node respondsTo:#index) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
        ^ node index.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
    (node respondsTo:#variable) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
        ^ node variable index.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
    ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
        ^ collector absoluteIndexForVar:node asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
    "Created: / 14-12-2010 / 22:25:22 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
handleAssignmentToNode:nodeAssignment receiverNode:nodeReceiver 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
    |assignments nodeReceiverIndex nodeAssignmentIndex|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    nodeReceiverIndex := self createIndexFromNode:nodeReceiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    nodeAssignmentIndex := self createIndexFromNode:nodeAssignment.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
     "b:=true. a:=b.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
     nodeAssignment - node which can have some type (b)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
     nodeReceiver - node, which contains nodeAssignment (a) 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
     nodeReceiverIndex - node receiver index
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
     nodeAssignmentIndex - node assignmentIndex"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    assignments := self assignmentsTo:nodeAssignment asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    (assignments isNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
        assignments := self assignmentsToTmp:nodeAssignment asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
    (assignments size = 0) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
        assignments := nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
     "All assgnments to specific node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    (assignments isNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
        ^ nil
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   101
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   102
    assignments do:[:assinment | 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   103
        self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   104
            addAssignment:assinment
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
            to:nodeReceiver
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
            index:nodeReceiverIndex.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "Created: / 01-12-2010 / 15:53:05 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
    "Modified: / 15-02-2011 / 13:14:38 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
handleAssignmentToNode:node type:type 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    |set|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
    (node respondsTo:#variable)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    set := assingmentsDictionary at:node variable asString ifAbsent:nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
    ]ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
        set := assingmentsDictionary at:node asString ifAbsent:nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
     ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
     "if some variable(a) is initialized(a:=2,a:=true...) then the other variables, which refers b:=a can have similar type."
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    (set isNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
        ^ nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
    set do:[:refNode | 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
        self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   126
            addAssignment:type
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
            to:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   128
            index:(self createIndexFromNode:refNode).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   129
    ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   130
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   131
    "Created: / 04-11-2010 / 19:44:46 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   132
    "Modified: / 14-12-2010 / 22:29:35 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   133
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   134
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   135
parseAssignmentNodeBinaryNode:node nodeExpression:expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
    |helperNode|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
    "v=3"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
    ((expression receiver) isKindOf:VariableNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
        ((expression selector) = #'=' 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
            or:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   143
                (expression selector) = #'==' 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   144
                    or:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   145
                        (expression selector) = #'>' 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   146
                            or:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
                                (expression selector) = #'<' 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
                                    or:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   149
                                        (expression selector) = #'<=' 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   150
                                            or:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   151
                                                (expression selector) = #'>=' 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   152
                                                    or:[ (expression selector) = #'=~' or:[ (expression selector) = #'~~' ] ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   153
                                            ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   154
                                    ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   155
                            ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
                    ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
            ]) 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
                ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
                    self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
                        addAssignment:(#Boolean sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
                        to:(node)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
                        index:(self createIndexFromNode:node).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
                    self handleAssignmentToNode:node type:(#Boolean sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
    ((expression receiver) isKindOf:MessageNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
        self parseAssignmentNodeMessageNode:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
            nodeExpression:expression receiver
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    "Created: / 10-11-2010 / 14:51:11 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
    "Modified: / 31-03-2011 / 19:30:36 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
parseAssignmentNodeConstantNode:node nodeExpression: expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
    |helperNode |
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   178
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
    (expression isKindOf:ConstantNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   180
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   181
        "Check if expression has some type"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   182
        (expression type notNil and:[expression type sunitAsClass notNil]) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   183
            "If True or false then superClass(only for to have the type boolean)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   184
            ((expression type sunitAsClass superclass) == Boolean) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   185
                self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   186
                    addAssignment:((expression type sunitAsClass) superclass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   187
                    to:(node)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
                    index:(self createIndexFromNode:node).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
                "add assignment to all nodes which refer this node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
                self handleAssignmentToNode:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
                    type:(expression type sunitAsClass superclass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
            ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
                self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
                    addAssignment:(expression type sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
                    to:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
                    index:(self createIndexFromNode:node ).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
                "add assignment to all nodes which refer this node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
                self handleAssignmentToNode:node type:(expression type sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
        ^ self.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   202
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   203
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   204
    "Created: / 10-11-2010 / 14:53:09 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   205
    "Modified: / 14-12-2010 / 22:30:38 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   206
    "Modified: / 28-04-2011 / 23:10:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
parseAssignmentNodeMessageNode:node nodeExpression:expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    |helperNode|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   211
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   212
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   213
    (expression respondsTo:#receiver) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
        ((expression receiver) isKindOf:VariableNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
            ((expression receiver name) respondsTo:#sunitAsClass) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   216
                self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
                    addAssignment:(expression receiver name sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
                    to:(node)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
                    index:(self createIndexFromNode:node).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   220
            ]ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
                self parseAssignmentNodeVariableNode:node nodeExpression: expression receiver.    
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   223
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
        ((expression receiver) isKindOf:ConstantNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
            self parseAssignmentNodeConstantNode:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   226
                nodeExpression:expression receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   227
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   228
        ((expression receiver) isKindOf:SelfNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
            self parseAssignmentNodeSelfNode:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
                nodeExpression:expression receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   231
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   234
    "Created: / 10-11-2010 / 14:55:13 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
    "Modified: / 14-12-2010 / 22:31:00 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
parseAssignmentNodeSelfNode:node nodeExpression:expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    |helperNode var ret|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
    "indirect assignments check"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   242
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   243
    var := helperNode expression selector asString subString:1
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   244
                to:helperNode expression selector asString size - 1.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   245
     "Check if selector is class Variable"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   246
    ret := collector assignmentsTo:var.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   247
    (ret notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   248
        "Check if has only one argument"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   249
        (helperNode expression argumentCount = 1) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   250
            "Check nil"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   251
            (helperNode expression arg1 notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   252
                "Test ConstantNode(u:=3 u:=true...)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   253
                (helperNode expression arg1 isKindOf:ConstantNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   254
                    self parseAssignmentNodeConstantNode:var
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   255
                        nodeExpression:helperNode expression arg1.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   256
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   257
                 "Test VariableNode (u:=a)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   258
                (helperNode expression arg1 isKindOf:VariableNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   259
                    self parseAssignmentNodeVariableNode:var
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
                        nodeExpression:helperNode expression arg1.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   262
                 "Test UnaryNode"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
                (helperNode expression arg1 isKindOf:UnaryNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
                    self parseAssignmentNodeUnaryNode:var
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   265
                        nodeExpression:helperNode expression arg1.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
                 "Test MessageNode"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
                (helperNode expression arg1 isKindOf:MessageNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
                    self parseAssignmentNodeMessageNode:var
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
                        nodeExpression:helperNode expression arg1.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
                 "Test binary node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   273
                (helperNode expression arg1 isKindOf:BinaryNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   274
                    self parseAssignmentNodeBinaryNode:var
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   275
                        nodeExpression:helperNode expression arg1.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   276
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   277
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   278
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
    "Created: / 14-12-2010 / 22:04:07 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
parseAssignmentNodeToTypeCollector:node 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   285
    |helperNode expression nodeName|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
    "basic method to handle assignments"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   288
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   289
    expression := node expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   290
     "Test ConstantNode(u:=3 u:=true...)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   291
    (expression isKindOf:ConstantNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   292
        self parseAssignmentNodeConstantNode:node nodeExpression:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   293
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   294
     "Test VariableNode (u:=a)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   295
    (expression isKindOf:VariableNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   296
        self parseAssignmentNodeVariableNode:node nodeExpression:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   297
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   298
     "Test AssignmentNode u:=a:=3"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   299
    (expression isKindOf:AssignmentNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   300
        nodeName := self parseAssignmentNodeToTypeCollector:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   301
        self handleAssignmentToNode:nodeName receiverNode:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   302
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   303
     "Test UnaryNode"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   304
    (expression isKindOf:UnaryNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   305
        self parseAssignmentNodeUnaryNode:node nodeExpression:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   306
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   307
     "Test MessageNode"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   308
    (expression isKindOf:MessageNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   309
        self parseAssignmentNodeMessageNode:node nodeExpression:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
     "Test binary node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
    (expression isKindOf:BinaryNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
        self parseAssignmentNodeBinaryNode:node nodeExpression:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
    (node respondsTo:#variable) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
        ^ node variable.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
    ] ifFalse:[ ^ node. ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
    "Created: / 03-11-2010 / 23:00:17 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   320
    "Modified: / 14-12-2010 / 23:45:30 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   323
parseAssignmentNodeUnaryNode:node nodeExpression:expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
    |helperNode|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   327
    "x asInteger. b floor"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
    (expression respondsTo:#receiver) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
        ((expression receiver) isKindOf:VariableNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
            ((expression receiver name) respondsTo:#sunitAsClass) ifTrue:[ 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
                self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
                    addAssignment:(expression receiver name sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   333
                    to:(node)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
                    index:(self createIndexFromNode:node).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
            "add assignment to all nodes which refer this node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   336
                self handleAssignmentToNode:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
                    type:(expression receiver name sunitAsClass)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   341
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
    "Created: / 10-11-2010 / 14:54:26 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
    "Modified: / 30-03-2011 / 17:57:04 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
parseAssignmentNodeVariableNode:node nodeExpression:expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
    |helperNode set|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
    "Test VariableNode(u:=a.b:=a.c:=a)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
     AssignMentDictionary will contain set nodes which assignment this node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
       a->Set(u,b,c) if a will get some value we change assignment in all nodes"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
    ((expression type) = #GlobalVariable) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
        "checking assignments metaclass"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
        ((expression name) respondsTo:#sunitAsClass) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
            self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
                addAssignment:expression name sunitAsClass class
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
                to:node variable
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
                index:(self createIndexFromNode:node).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
             "add assignment to all nodes which refer this node"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
            self handleAssignmentToNode:node type:(expression type sunitAsClass).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
            ^ self.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
    set := assingmentsDictionary at:(expression name) ifAbsent:nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
    (set isNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
        set := Set new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
    set add:node variable.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
     "Check if this index exists. if exists then remove it(to update dictionary)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   371
    (assingmentsDictionary includesKey:expression name) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
        assingmentsDictionary removeKey:expression name.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   374
     "(updateDictionary"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
    assingmentsDictionary at:(expression name) put:set.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   376
     "Check if we can update this"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   377
    self handleAssignmentToNode:expression receiverNode:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   378
    ^ self
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   379
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   380
    "Created: / 10-11-2010 / 14:53:46 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   381
    "Modified: / 30-03-2011 / 18:09:05 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   382
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   383
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   384
!SmallSenseInstvarInterfaceExtractor methodsFor:'extracting'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   385
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   386
extractInterfacesFrom:m addTo:aTypeCollector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   387
    |parser|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   388
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   389
    method := m.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   390
    saveStacks := Dictionary new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   391
    stack := OrderedCollection new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   392
     "0 to: method numTemps - 1 do: [:i | stack add: #temp -> i ]."
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   393
    initialStack := stack copy.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   394
    collector := aTypeCollector.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   395
    parser := SmalltalkXInstvarInterfaceExtractor new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   396
    parser setColector:aTypeCollector.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   397
    input := parser 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   398
                parseMethod:method source
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   399
                in:method mclass
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   400
                ignoreErrors:false
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   401
                ignoreWarnings:false.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   402
    blockTraversal := false.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   403
    blockArgs := 0.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   404
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   405
    [ input isNil ] whileFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   406
        self unaryExpressionFor:input.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   407
        input :=input nextStatement.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   408
    ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   409
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   410
    "Modified: / 24-11-2010 / 22:24:16 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   411
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   412
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   413
extractInterfacesFrom:sourc class:class addTo:aTypeCollector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   414
    |parser|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   415
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   416
    saveStacks := Dictionary new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   417
    stack := OrderedCollection new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   418
     "0 to: method numTemps - 1 do: [:i | stack add: #temp -> i ]."
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   419
    initialStack := stack copy.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   420
    collector := aTypeCollector.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   421
    parser := SmallSenseInstvarInterfaceExtractor new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   422
    parser setColector:aTypeCollector.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   423
    input := parser 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   424
                parseMethod: sourc
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   425
                in:class
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   426
                ignoreErrors:false
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   427
                ignoreWarnings:false.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   428
    blockTraversal := false.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   429
    blockArgs := 0.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   430
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   431
    [ input isNil ] whileFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   432
        self unaryExpressionFor:input.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   433
        input :=input nextStatement.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   434
    ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   435
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   436
    "Created: / 17-03-2011 / 16:00:31 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   437
    "Modified: / 04-04-2011 / 22:31:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   438
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   439
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   440
!SmallSenseInstvarInterfaceExtractor methodsFor:'initialization'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   441
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
initialize
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
    super initialize.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   444
    assingmentsDictionary := Dictionary new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
    assigmentsTypeDictionary:=Dictionary new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
    "Created: / 04-11-2010 / 19:09:04 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
    "Modified: / 04-11-2010 / 23:46:36 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   450
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
!SmallSenseInstvarInterfaceExtractor methodsFor:'opcodes-control'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
nativeSend: selector numArgs: na 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
        | receiver args |
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
        args := stack removeLast: na.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
        receiver := stack removeLast.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
        receiver isInteger 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
                ifTrue: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
                        [ collector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
                                addSend: selector
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
                                to: receiver ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
                ifFalse: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
                        [ receiver isVariableBinding ifTrue: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
                                [ receiver key = #temp 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
                                        ifTrue: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
                                                [ collector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
                                                        addSend: selector
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
                                                        toTmp: receiver value ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
                                        ifFalse: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   470
                                                [ receiver key = #return ifTrue: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
                                                        [ collector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
                                                                addSend: selector
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
                                                                onReturnOfSelfMethod: receiver value ] ] ] ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
        (receiver = #self and: [ collector theClass methodDictionary includesKey: selector ]) ifTrue: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
                [ args doWithIndex: 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
                        [ :arg :index | 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
                        collector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   478
                                handleAssignment: arg
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   479
                                forTmp: index - 1
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   480
                                in: collector theClass >> selector ] ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   481
        stack add: (collector 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   482
                        pushSendOf: selector
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   483
                        to: receiver
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   484
                        args: args)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   485
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   486
    "Modified: / 18-05-2011 / 23:47:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   487
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   488
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   489
send: selector numArgs: na 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   490
	^self 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   491
		nativeSend: selector
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   492
		numArgs: na
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   493
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   494
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   495
!SmallSenseInstvarInterfaceExtractor methodsFor:'opcodes-data movement'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   496
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   497
dupFirst
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   498
	stack add: stack last
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   499
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   500
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   501
pop
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
	stack removeLast
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
pushConstant: value
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
	value class == BlockClosure
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   507
		ifTrue:
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
			[self
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
				readBlock: value method
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
				copied: 0]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   511
		ifFalse: [
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
			blockArgs := value.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
			stack addLast: value class]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   514
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   515
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   516
pushContext
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
	stack add: #context
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   519
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
pushInst: index
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
	stack add: index
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   523
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
pushReceiver
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
	stack addLast: #self
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   526
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   527
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   528
pushStatic: assoc
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   529
	"assoc can be an association OR a variable binding. I just push the complete association, since it does not interest me for the moment."
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
	stack addLast: assoc
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   532
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
!SmallSenseInstvarInterfaceExtractor methodsFor:'parsing-expressions'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   535
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   536
binaryExpressionFor:receiverArg 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   537
    |node|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   538
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   539
    node := super binaryExpressionFor:receiverArg.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   540
   self parseNode:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   541
    ^ node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   542
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   543
    "Modified: / 14-12-2010 / 23:50:17 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   544
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   545
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   546
parseCascadeNodetypeCollector:node expression:expression 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   547
    |receiver ret break collectionSends|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   548
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   549
    receiver := expression receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   550
    break := false.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   551
    collectionSends := Set new.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   552
     "we add first selector"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   553
    collectionSends add:expression selector.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   554
     "we must find receiver"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   555
    [
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   556
        (receiver isKindOf:VariableNode) or:[ break ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   557
    ] whileFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   558
        (receiver respondsTo:#receiver) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   559
            (receiver respondsTo:#selector) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   560
                "we remember all selectors x print;size;all;pro"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   561
                collectionSends add:receiver selector.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   562
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   563
            receiver := receiver receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   564
        ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   565
            receiver := nil.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   566
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   567
        (receiver isNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   568
            break := true.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   569
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   570
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   571
     "we found first receiver and add represantive ."
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   572
    collectionSends do:[:sendSelector | 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   573
        (((receiver) respondsTo:#index) and:[ receiver index notNil ]) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   574
            ret := collector assignmentsTo:receiver name.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   575
            (ret notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   576
                collector addSend:sendSelector to:receiver index
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   577
            ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   578
                collector addSend:sendSelector selector toTmp:receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   579
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   580
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   581
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   582
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   583
    "Created: / 10-11-2010 / 16:05:10 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   584
    "Modified: / 15-02-2011 / 13:04:21 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   585
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   586
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   587
parseMessageNodeToTypeCollector:node 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   588
    |helperNode receiver break ret|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   589
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   590
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   591
     "Getting receiver"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   592
    receiver := helperNode receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   593
    break := false.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   594
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   595
(receiver isKindOf:MessageNode)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   596
     ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   597
       self parseMessageNodeToTypeCollector:receiver. 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   598
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   599
     "Check if receiver is variable. If not then receiver is some kind of node result"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   600
     (receiver isKindOf:VariableNode)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   601
     ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   602
       ^self.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   603
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   604
    
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   605
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   606
    (((receiver) respondsTo:#index) and:[ receiver index notNil ]) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   607
        "Check if receiver is tmp"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   608
        ret := collector assignmentsTo:receiver name.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   609
        (ret notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   610
            "not tmp"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   611
            collector addSend:helperNode selector to:receiver index
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   612
        ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   613
            "tmp"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   614
            collector addSend:helperNode selector toTmp:receiver .
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   615
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   616
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   617
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   618
    "Created: / 03-11-2010 / 22:25:23 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   619
    "Modified: / 15-02-2011 / 13:04:28 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   620
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   621
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   622
parseNode:node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   623
|helperNode|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   624
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   625
helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   626
 (node isKindOf: StatementNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   627
        "x printString; size"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   628
       self parseStatementNodeToTypeCollector:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   629
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   630
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   631
   (node isKindOf:UnaryNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   632
    "(Point new. a new. b floor) -> we must recognize and parse node with single message(easy to parse)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   633
       self parseUnaryNodeToTypeCollector:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   634
        ^ node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   636
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   637
    (node isKindOf:MessageNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
    "Every node which can send message except unary node ( x point:a. x point:a left....)"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
       self parseMessageNodeToTypeCollector:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   642
    (node isKindOf: AssignmentNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
       self parseAssignmentNodeToTypeCollector:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
        self parseNode:node expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   647
    "Created: / 14-12-2010 / 23:48:27 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   648
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   649
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
parseStatementNodeToTypeCollector:node 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   651
    |helperNode expression|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
    ((helperNode) respondsTo:#expression) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
        expression := helperNode expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   657
        (expression isKindOf:CascadeNode) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   658
           self parseCascadeNodetypeCollector:node expression:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
        (expression isKindOf:MessageNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   661
            "Check indirect assignments"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   662
            (expression receiver isKindOf:SelfNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   663
                self parseAssignmentNodeToTypeCollector:node.                
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   664
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   665
            self parseMessageNodeToTypeCollector:expression.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   666
        ]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   667
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   668
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   669
    "Created: / 10-11-2010 / 15:55:06 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   670
    "Modified: / 14-12-2010 / 22:06:17 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   671
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   672
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   673
parseUnaryNodeToTypeCollector:node 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   674
    |helperNode ret|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   675
"(Point new. a new. b floor) node with single message."
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   676
    helperNode := node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   677
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   678
"Check indirect sends"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   679
((helperNode receiver) isKindOf:UnaryNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   680
    "Check if receiver is self"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   681
    (helperNode receiver receiver isKindOf:SelfNode)ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   682
       "Check if selector is class Variable"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   683
        ret := collector assignmentsTo:helperNode receiver selector asString.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   684
        
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   685
         (ret notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   686
            collector addSend:helperNode selector to:( collector absoluteIndexForVar:(helperNode receiver selector asString)).
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   687
        ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   688
    ]ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   689
        self parseUnaryNodeToTypeCollector:node receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   690
    ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   691
].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   693
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   694
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   695
    (((helperNode receiver) respondsTo:#index) 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
        and:[ helperNode receiver index notNil ]) 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   697
            ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
                "we can simple find if receiver is tmp variable or not"    
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   699
                ret := collector assignmentsTo:helperNode receiver name.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   700
                (ret notNil) ifTrue:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   701
                    "it is not tmp variable"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   702
                    collector addSend:helperNode selector to:helperNode receiver index
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703
                ] ifFalse:[
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   704
                    "it is tmp variable"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   705
                    collector addSend:helperNode selector toTmp:helperNode receiver.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   706
                ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   707
            ].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   708
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   709
    "Created: / 03-11-2010 / 22:19:09 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   710
    "Modified: / 04-03-2011 / 16:58:11 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   711
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   712
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   713
unaryExpressionFor:receiverArg 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   714
    |node|
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   715
    node := super unaryExpressionFor:receiverArg.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   716
    self parseNode:node.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   717
    ^ node
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   718
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   719
    "Created: / 30-10-2010 / 15:45:45 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   720
    "Modified: / 17-03-2011 / 16:19:23 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   721
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   722
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   723
!SmallSenseInstvarInterfaceExtractor methodsFor:'private'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   724
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   725
copied: list
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   726
	copied := list
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   727
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   728
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   729
input
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   730
	^input
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   731
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   732
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   733
method: aMethod
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   734
	method := aMethod.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   735
	copied := #()
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   736
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   737
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   738
readBlock: block copied: count
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   739
        | newCopied |
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   740
        newCopied := stack removeLast: count.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   741
        stack add: #block.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   742
        ^(self class new)
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   743
                copied: newCopied;
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   744
                extractInterfacesFrom: block source class:block mclass
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   745
                        addTo: collector
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   746
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   747
    "Modified: / 17-03-2011 / 16:01:39 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   748
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   749
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   750
reloadStack
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   751
        stack isNil
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   752
                ifTrue:
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   753
                        [stack := self saveStacks
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   754
                                at: self input startPosition
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   755
                                ifAbsent: [initialStack copy].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   756
                        ^self].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   757
        stack := self saveStacks
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   758
                at: self input startPosition
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   759
                ifAbsent: [stack]
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   760
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   761
    "Modified: / 28-10-2010 / 15:04:05 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   762
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   763
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   764
saveStacks
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   765
	saveStacks ifNil: [saveStacks := Dictionary new].
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   766
	^saveStacks
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   767
!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   768
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   769
setColector:colectorSetter 
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   770
    collector := colectorSetter.
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   771
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   772
    "Created: / 03-11-2010 / 21:33:42 / Jakub <zelenja7@fel.cvut.cz>"
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   773
! !
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   774
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   775
!SmallSenseInstvarInterfaceExtractor class methodsFor:'documentation'!
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   776
29
fe650a6e5704 Moved NavigationState>>selectedClasses to package stx:libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   777
version_HG
fe650a6e5704 Moved NavigationState>>selectedClasses to package stx:libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   778
fe650a6e5704 Moved NavigationState>>selectedClasses to package stx:libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   779
    ^ '$Changeset: <not expanded> $'
fe650a6e5704 Moved NavigationState>>selectedClasses to package stx:libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   780
!
fe650a6e5704 Moved NavigationState>>selectedClasses to package stx:libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   781
0
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   782
version_SVN
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   783
    ^ '$Id: SmallSenseInstvarInterfaceExtractor.st 7823 2011-11-26 16:55:59Z vranyj1 $'
893cc7b0ed1d copied smallsense from old /branches/jv
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   784
! !
29
fe650a6e5704 Moved NavigationState>>selectedClasses to package stx:libtool.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 0
diff changeset
   785