SmallSense__SmalltalkInferencer.st
author convert-repo
Wed, 11 Dec 2019 04:28:36 +0000
changeset 1116 b51ace366efc
parent 1072 a44c741ee5ef
child 1124 d5b11626ff79
permissions -rw-r--r--
update tags
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     1
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     2
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 310
diff changeset
     3
Copyright (C) 2013-2015 Jan Vrany
1072
a44c741ee5ef Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1060
diff changeset
     4
Copyright (C) 2017 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     5
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     6
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     7
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
     8
License as published by the Free Software Foundation; either
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
     9
version 2.1 of the License.
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    10
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    11
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    12
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    14
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    15
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    16
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    17
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    18
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    19
"
249
8bc64027b189 Package renamed to stx:goodies/smallsense
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 205
diff changeset
    20
"{ Package: 'stx:goodies/smallsense' }"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
"{ NameSpace: SmallSense }"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    24
Object subclass:#SmalltalkInferencer
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
    25
	instanceVariableNames:'type class classInfo source parser parserClass tree environment
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
    26
		manager'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
	classVariableNames:''
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
	poolDictionaries:''
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    29
	category:'SmallSense-Smalltalk-Types-Inference'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
101
a300290bf8fc Classes renamed to better express theit purpose.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
    32
SmalltalkParseNodeVisitor subclass:#Phase1
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
	instanceVariableNames:'classInfo sends types'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
	classVariableNames:''
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
    35
	poolDictionaries:'SmallSense::SmalltalkInferencerParameters'
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    36
	privateIn:SmalltalkInferencer
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
101
a300290bf8fc Classes renamed to better express theit purpose.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 95
diff changeset
    39
SmalltalkParseNodeVisitor subclass:#Phase2
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
	instanceVariableNames:'classInfo'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
	classVariableNames:''
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
	poolDictionaries:''
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    43
	privateIn:SmalltalkInferencer
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    46
SmalltalkParseNodeVisitor subclass:#Phase3
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    47
	instanceVariableNames:''
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    48
	classVariableNames:''
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    49
	poolDictionaries:''
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    50
	privateIn:SmalltalkInferencer
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    51
!
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
    52
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    53
!SmalltalkInferencer class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    55
copyright
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    56
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    57
stx:goodies/smallsense - A productivity plugin for Smalltalk/X IDE
374
e65bd2bf892a Updated copyright notice.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 310
diff changeset
    58
Copyright (C) 2013-2015 Jan Vrany
1072
a44c741ee5ef Copyright updates
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1060
diff changeset
    59
Copyright (C) 2017 Jan Vrany
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    60
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    61
This library is free software; you can redistribute it and/or
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    62
modify it under the terms of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    63
License as published by the Free Software Foundation; either
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    64
version 2.1 of the License.
252
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    65
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    66
This library is distributed in the hope that it will be useful,
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    67
but WITHOUT ANY WARRANTY; without even the implied warranty of
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    68
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    69
Lesser General Public License for more details.
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    70
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    71
You should have received a copy of the GNU Lesser General Public
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    72
License along with this library; if not, write to the Free Software
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    73
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    74
"
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    75
!
feba6ee5c814 Added copyright notice and license information (LGPL2)
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 249
diff changeset
    76
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
documentation
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
    A heart of SmallSense - a type inferencer. For given class
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
    and method source, instance of inferences walks the parse tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
    and annotate each node with inferred type.
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
    82
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
    [author:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
        Jan Vrany <jan.vrany@fit.cvut.cz>
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
    [instance variables:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
    [class variables:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
    [see also:]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
    96
!SmalltalkInferencer class methodsFor:'instance creation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
1060
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
    98
forClass: class expression: source
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
    99
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   100
    ^self new class: class expression: source.
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   101
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   102
    "Created: / 13-11-2017 / 22:21:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   103
!
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   104
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   105
forClass: class methodSource: source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   106
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   107
    ^self new class: class source: source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   108
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   109
    "Created: / 26-11-2011 / 12:45:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   110
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   111
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   112
forClass: class selector: selector
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   113
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   114
    ^self new class: class selector: selector.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   115
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   116
    "Created: / 26-11-2011 / 12:44:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   117
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   118
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   119
forMethod: method
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   120
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   121
    ^self new method: method.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   122
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   123
    "Created: / 26-11-2011 / 12:45:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   124
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   125
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   126
!SmalltalkInferencer methodsFor:'accessing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   127
205
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   128
environment
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   129
    ^ environment
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   130
!
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   131
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   132
environment:something
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   133
    environment := something.
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   134
!
43bee6463c53 Introduced notion of `environment` to completion context.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 182
diff changeset
   135
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   136
klass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   137
    ^ class
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   138
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   139
    "Created: / 26-11-2011 / 17:30:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   140
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   141
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   142
manager
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   143
    manager isNil ifTrue:[
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   144
        manager := Manager instance
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   145
    ].
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   146
    ^ manager
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   147
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   148
    "Created: / 27-11-2011 / 16:16:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   149
    "Modified: / 21-08-2015 / 14:32:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   150
!
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   151
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   152
manager: aManager
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   153
    manager := aManager
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   154
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   155
    "Created: / 21-08-2015 / 14:32:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   156
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   157
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   158
parser
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   159
    ^ parser
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   160
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   161
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   162
parserClass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   163
    ^ parserClass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   164
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   165
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   166
parserClass:aClass
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   167
    parserClass := aClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   168
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   169
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   170
source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   171
    ^ source
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   172
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   173
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   174
tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   175
    ^ tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   176
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   177
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   178
!SmalltalkInferencer methodsFor:'initialization'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   179
1060
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   180
class: klass expression: expression
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   181
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   182
    type := #expression.
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   183
    self class: klass source: expression.
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   184
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   185
    "Created: / 13-11-2017 / 22:22:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   186
!
af3a048f9618 Fixed xompletion of instance variables in inspector
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1058
diff changeset
   187
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   188
class: cls selector: sel
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   189
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   190
    | m |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   191
    m := cls >> sel.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   192
    m isNil ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   193
        self error: 'No method found'.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   194
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   195
    self method: m.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   196
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   197
    "Created: / 26-11-2011 / 12:47:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   198
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   199
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   200
class: cls source: src
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   201
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   202
    type isNil ifTrue:[
121
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   203
        "/ Guess...
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   204
        type := cls notNil ifTrue:[ #method ] ifFalse:[ #expression ]
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   205
    ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   206
    class := cls ? UndefinedObject.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   207
    classInfo := self manager infoForClass: class.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   208
    source := src.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   209
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   210
    "Created: / 26-11-2011 / 14:46:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
121
6fc2c58db318 Oops, fix in SmallSense::SmalltalkInferencer>>class:source:
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 120
diff changeset
   211
    "Modified: / 04-10-2013 / 08:31:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   212
!
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   213
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   214
method: method
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   215
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   216
    type := #method.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   217
    self class: method mclass source: method source.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   218
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   219
    "Created: / 26-11-2011 / 12:48:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   220
    "Modified: / 04-10-2013 / 08:13:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   221
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   222
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   223
!SmalltalkInferencer methodsFor:'private'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   224
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   225
infer
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   226
    Phase1 process:tree in:class manager:manager.
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   227
    Phase2 process:tree in:class manager:manager.
1054
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   228
    Phase3 process:tree in:class manager:manager.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   229
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   230
    "
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   231
     (SmallSenseParseNodeInspector new node: tree source: source) open"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   232
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   233
    "Created: / 26-11-2011 / 12:51:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1054
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   234
    "Modified: / 06-07-2017 / 16:21:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   235
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   236
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   237
parse
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   238
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   239
    parserClass isNil ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   240
        parserClass := class parserClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   241
    ].
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   242
    type == #method ifTrue:[
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   243
        parser := parserClass
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   244
                    parseMethod: source in: class
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   245
                    ignoreErrors:true
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   246
                    ignoreWarnings:true.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   247
        tree := parser tree.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   248
    ] ifFalse:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   249
        type == #expression ifTrue:[
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   250
            parser := parserClass for: source.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   251
            tree := parser
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   252
                        parseExpressionWithSelf:nil
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   253
                        notifying:nil
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   254
                        ignoreErrors:false
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   255
                        ignoreWarnings:false
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   256
                        inNameSpace:nil.
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   257
            parser tree: tree.
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   258
        ].
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   259
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   260
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   261
    "Created: / 26-11-2011 / 12:51:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
120
4fefce92f5bb Initial support for Java/Groovy completion and for mixed-language completion.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 119
diff changeset
   262
    "Modified: / 04-10-2013 / 08:15:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   263
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   264
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   265
!SmalltalkInferencer methodsFor:'processing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   266
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   267
process
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   268
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   269
    "Actually infer types. Returns an annotated method tree.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   270
     The tree is also stored in an instance variable, so it
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   271
     may be obtained form receiver any time by asking for #tree."
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   272
182
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   273
    [
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   274
        self parse.
182
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   275
    ] on: Error do:[:ex|
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   276
        Transcript showCR: ex description.
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   277
        ^ nil.
182
7fdc6e26f0f1 Fix in SmallSense::SmalltalkInferencer>>process: handle errors during inference...
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 179
diff changeset
   278
    ].
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   279
    tree notNil ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   280
        self infer.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   281
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   282
    ^tree
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   283
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   284
    "Created: / 26-11-2011 / 12:50:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   285
    "Modified: / 21-08-2015 / 14:35:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   286
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   287
262
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   288
!SmalltalkInferencer::Phase1 class methodsFor:'documentation'!
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   289
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   290
documentation
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   291
"
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   292
    Inferencing phase 1: guess type of variables based on message sends
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   293
    (idea taken from RoelTyper).
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   294
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   295
    Also, assign types for known variables (globals, literals, pseudo variables)
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   296
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   297
    [author:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   298
        Jan Vrany <jan.vrany@fit.cvut.cz>
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   299
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   300
    [instance variables:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   301
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   302
    [class variables:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   303
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   304
    [see also:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   305
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   306
"
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   307
! !
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   308
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   309
!SmalltalkInferencer::Phase1 methodsFor:'initialization'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   310
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   311
initialize
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   312
    "Invoked when a new instance is created."
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   313
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   314
    "/ please change as required (and remove this comment)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   315
    sends := Dictionary new.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   316
    types := Dictionary new.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   317
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   318
    "/ super initialize.   -- commented since inherited method does nothing
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   319
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   320
    "Modified: / 21-08-2015 / 15:44:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   321
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   322
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   323
!SmalltalkInferencer::Phase1 methodsFor:'private'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   324
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   325
rootsUnderstanding: selectors
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   326
    "When the set of selectors is not empty, answer a set of the highest possible classes in the system that implement all the selectors.
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   327
     When the set of selectors is empty, return the empty set."
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   328
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   329
    | initialClasses nextClasses traverseStack next |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   330
    selectors isEmpty ifTrue: [^OrderedCollection new].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   331
    nextClasses := OrderedCollection with: Object.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   332
    traverseStack := OrderedCollection new: 1000.
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   333
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   334
    selectors
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   335
        do:
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   336
            [:selector |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   337
            initialClasses := nextClasses.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   338
            nextClasses := OrderedCollection new.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   339
            initialClasses
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   340
                do:
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   341
                    [:initialClass |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   342
                    "inline canUnderstand: for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   343
                    |cl|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   344
                    cl := initialClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   345
                    [(cl == nil) or: [(cl methodDictionary includesKey: selector)]] whileFalse: [cl := cl superclass].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   346
                    (cl == nil)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   347
                        ifFalse: [nextClasses addLast: initialClass]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   348
                        ifTrue:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   349
                            [|size|
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   350
                            traverseStack reset.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   351
                            traverseStack addLast: initialClass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   352
                            size := 1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   353
                            "(traverseStack isEmpty) removed for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   354
                            [size = 0]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   355
                                whileFalse:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   356
                                    [
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   357
                                    "(traverseStack removeFirst) removed for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   358
                                    next := traverseStack removeFirst.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   359
                                    size := size -1.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   360
                                    next
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   361
                                        subclassesDo:
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   362
                                            [:subcl |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   363
                                            "(subcl includesSelector: selector) removed for performance"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   364
                                            (subcl methodDictionary includesKey: selector)
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   365
                                                ifTrue: [nextClasses addLast: subcl]
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   366
                                                ifFalse: [traverseStack addLast: subcl. size := size + 1]]]]]].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   367
    ^nextClasses
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   368
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   369
    "Modified: / 24-11-2010 / 14:39:35 / Jakub <zelenja7@fel.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   370
    "Modified: / 26-11-2011 / 14:01:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   371
    "Modified (comment): / 18-09-2013 / 01:22:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   372
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   373
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   374
!SmalltalkInferencer::Phase1 methodsFor:'processing'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   375
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   376
process: tree in: cls info: clsInfo
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   377
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   378
     | i c def prereqs |
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   379
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   380
    class := cls.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   381
    classInfo := clsInfo.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   382
302
44433b666576 Catch errors in background inferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 286
diff changeset
   383
    "/ Do not process if class is troublesome
44433b666576 Catch errors in background inferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 286
diff changeset
   384
    classInfo isErrorneous ifTrue:[ 
44433b666576 Catch errors in background inferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 286
diff changeset
   385
        ^ self.
44433b666576 Catch errors in background inferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 286
diff changeset
   386
    ].
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   387
    "Fill types with cached data..."
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   388
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   389
    c := class.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   390
    i := classInfo.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   391
    [ c notNil and:[i notNil] ] whileTrue:[
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   392
        c instVarNames do:[:nm|
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   393
            types at: nm put: (i infoForInstvar: nm)
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   394
        ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   395
        c := c superclass.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   396
        i := i superclassInfo.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   397
    ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   398
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   399
    self visit:tree.
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   400
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   401
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   402
    prereqs := nil.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   403
    def := ProjectDefinition definitionClassForPackage: class package createIfAbsent: false.
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   404
    def notNil ifTrue:[
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   405
        prereqs := def effectivePreRequisites.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   406
    ].
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   407
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   408
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   409
    "Now, infer variable types based on collected sends"
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   410
    sends keysAndValuesDo:[:varName :sentSelectors|
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   411
        (types includesKey: varName) ifTrue:[
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   412
            | classes union |
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   413
            classes := (self rootsUnderstanding: sentSelectors) collect:[:each |  ClassType new klass: each ].
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   414
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   415
            prereqs notNil ifTrue:[
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   416
                "/ Make classes in packages on which method's package does **NOT** depend
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   417
                "/ less likely to be correct (by lowering their trustfullness)
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   418
                classes do:[:each |
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   419
                    (prereqs includes: each klass package) ifTrue:[
179
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   420
                        each trustfullnessAdd: -20
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   421
                    ].
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   422
                ]
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   423
            ].
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   424
            union := UnionType new.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   425
            union addType: (types at: varName) type.
e444be9de40a Improved type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 174
diff changeset
   426
            union addTypes: classes.
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   427
            (types at: varName) type: union
142
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   428
        ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   429
    ].
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   430
211f95ac0835 - SmallSense::SmalltalkInferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 141
diff changeset
   431
    "Created: / 27-11-2011 / 16:22:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
302
44433b666576 Catch errors in background inferencer
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 286
diff changeset
   432
    "Modified (comment): / 21-11-2014 / 17:19:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
883
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   433
!
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   434
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   435
process:tree in:cls manager:manager 
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   436
    self 
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   437
        process:tree
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   438
        in:cls
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   439
        info:(manager infoForClass:cls)
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   440
9c644e7c1d97 Fix in Smalltalk type info manager: do not mark classes with no source stream as errorneous.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 453
diff changeset
   441
    "Modified: / 21-08-2015 / 15:44:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   442
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   443
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   444
!SmalltalkInferencer::Phase1 methodsFor:'visiting'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   445
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   446
visitBlockNode:anObject
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   447
    | type |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   448
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   449
    super visitBlockNode:anObject.
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   450
    type := Type withClass: Block.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   451
    type trustfullness: 100.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   452
    anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   453
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   454
    "Created: / 26-11-2011 / 14:46:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   455
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   456
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   457
visitConstantNode:anObject
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   458
    "Type of a constant is trivially its value class"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   459
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   460
    | type |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   461
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   462
    super visitConstantNode: anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   463
    type := (Type withClass: anObject value class).
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   464
    type trustfullness: 100.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   465
    anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   466
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   467
    "Created: / 26-11-2011 / 13:55:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   468
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   469
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   470
visitMessageNode:anObject
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   471
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   472
    | rec |
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   473
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   474
    super visitMessageNode: anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   475
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   476
    (rec := anObject receiver) isVariableNode ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   477
        "We don't have to infer types for global/class variables"
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   478
        (rec isGlobalVariable or:[rec isClassVariable]) ifTrue:[
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   479
            "/ Check for pattern: `Smalltalk at: #ClassName`
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   480
            (rec name = 'Smalltalk' and:[anObject arguments conform:[:node | node isConstant ] ]) ifTrue:[
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   481
                | result |
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   482
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   483
                "Here, evaluate the node, but only for certain known selectors!!
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   484
                 (think of selector #exit :-) - you'll laugh, but it hit me back hard
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   485
                 couple times...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   486
                "
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   487
                (#(	at:
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   488
                	classNamed:
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   489
                	"/ add more...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   490
                ) includes:anObject selector) ifTrue:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   491
                	[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   492
		                result := anObject evaluate.
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   493
	                	result notNil ifTrue:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   494
		                    anObject inferedType: ((Type withClass: result class) trustfullness: 100)
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   495
		                ]
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   496
	                ] on: Error do:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   497
	                	"/pass
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   498
	                ]
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   499
	            ]
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   500
            ].
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   501
        ] ifFalse:[
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   502
            (sends at: rec name ifAbsentPut:[Set new]) add: anObject selector.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   503
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   504
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   505
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   506
    "Created: / 26-11-2011 / 13:02:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
119
9bb3a9892c2e Small improvement in Smalltalk type inrefernece
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 101
diff changeset
   507
    "Modified: / 04-10-2013 / 07:56:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   508
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   509
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   510
visitSelfNode:anObject
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   511
    | type |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   512
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   513
    super visitSelfNode:anObject.
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   514
    type := Type withClass: class.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   515
    type trustfullness: 100.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   516
    anObject inferedType:type
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   517
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   518
    "Created: / 26-11-2011 / 14:43:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   519
    "Modified: / 18-09-2013 / 01:25:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   520
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   521
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   522
visitSuperNode:anObject
307
fb185b2c47b9 Fixed assertion during type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 302
diff changeset
   523
    | superclass type |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   524
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   525
    super visitSuperNode:anObject.
307
fb185b2c47b9 Fixed assertion during type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 302
diff changeset
   526
    superclass := class superclass.    
fb185b2c47b9 Fixed assertion during type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 302
diff changeset
   527
    type := superclass notNil ifTrue:[ Type withClass: class superclass ] ifFalse:[ Type unknown ].
91
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   528
    type trustfullness: 100.
920e30d788dc Minor fixes in inferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 70
diff changeset
   529
    anObject inferedType:type
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   530
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   531
    "Created: / 26-11-2011 / 14:44:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
307
fb185b2c47b9 Fixed assertion during type inference.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 302
diff changeset
   532
    "Modified: / 24-11-2014 / 22:17:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   533
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   534
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   535
visitVariableNode:anObject
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   536
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   537
    | t |
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   538
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   539
    "Following code ensures, that all variable nodes refering same
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   540
     variable shares the inferred type"
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   541
    t := types at: anObject name ifAbsentPut:[Type unknown].
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   542
    anObject inferedType: t.
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   543
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   544
    anObject isGlobalVariable ifTrue:[
310
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   545
        | globalName global globalClass |
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   546
310
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   547
        globalName := anObject name asSymbolIfInterned.
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   548
        globalName notNil ifTrue:[
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   549
            global := Smalltalk at: globalName.
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   550
310
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   551
            "/ Special hack for JAVA - its actually a JavaPackage...
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   552
            global == (Smalltalk at: #JAVA) ifTrue:[
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   553
                global := JavaPackage
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   554
            ].
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   555
            globalClass := global class.
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   556
310
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   557
            global notNil ifTrue:[
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   558
                t addClass:  globalClass.
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   559
                t trustfullness: 100.
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   560
            ].
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   561
        ].
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   562
        ^self.
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   563
    ].
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   564
    anObject isClassVariable ifTrue:[
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   565
        t addClass: (class theNonMetaclass classVarAt: anObject name asSymbol) class.
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   566
        t trustfullness: 100.
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   567
        ^self.
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   568
    ].
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   569
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   570
    "Created: / 26-11-2011 / 13:31:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
310
25c4dc83097d Fix in inferencer: care to not create new symbols
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 307
diff changeset
   571
    "Modified: / 02-12-2014 / 22:06:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   572
! !
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   573
262
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   574
!SmalltalkInferencer::Phase2 class methodsFor:'documentation'!
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   575
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   576
documentation
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   577
"
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   578
    Inferencing phase 2: Guess types based on 'known' selectors, like #==, #=, #class, #new: and so on...
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   579
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   580
    [author:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   581
        Jan Vrany <jan.vrany@fit.cvut.cz>
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   582
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   583
    [instance variables:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   584
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   585
    [class variables:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   586
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   587
    [see also:]
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   588
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   589
"
1eb48733dac1 Added some comments on individual inferencing phases.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 261
diff changeset
   590
! !
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   591
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   592
!SmalltalkInferencer::Phase2 methodsFor:'visiting'!
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   593
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   594
visitMessageNode:aMessageNode
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   595
286
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   596
    | selector |
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   597
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   598
    super visitMessageNode: aMessageNode.  
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   599
286
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   600
    selector := aMessageNode selector.
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   601
    "/ Some selectors are known / expected  to return boolean
286
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   602
    (#( #== #~~ #= #~= #< #<= #=> #> #contains: includes: includesKey: #anySatisfy: #allSatisfy:) includes: selector) ifTrue:[
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   603
        aMessageNode inferedType: (Type withClass: Boolean).
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   604
        ^ self.
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   605
    ].
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   606
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   607
    "/ Some selectors are known / expected  to return some numerical values
286
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   608
    (#( #+ #- #* #/ #// #\\ ) includes: selector) ifTrue:[
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   609
        aMessageNode inferedType: (Type withClass: Number).
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   610
        ^ self.
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   611
    ].
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   612
286
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   613
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   614
    "/ #new / #basicNew: conventionally returns an instance of the class, if receiver is a class.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   615
    (#(#new: #basicNew:) includes: selector) ifTrue:[
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   616
        | rec type |
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   617
        rec := aMessageNode receiver.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   618
        (rec isSelf and:[class isMetaclass]) ifTrue:[
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   619
            type := Type withClass: class theNonMetaclass.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   620
            type trustfullnessAdd: 50.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   621
            aMessageNode inferedType: type.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   622
            ^self.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   623
        ].
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   624
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   625
        type := aMessageNode receiver inferedType instanceSide.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   626
        aMessageNode inferedType: type.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   627
        ^self.
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   628
    ].
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   629
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   630
    "Created: / 05-08-2014 / 14:03:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
286
dc60bdb2fa92 Small fix in inferencer: assume #new: and #basicNew: returns an instance of a receiver.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 263
diff changeset
   631
    "Modified: / 26-09-2014 / 11:20:47 / Jan Vrany <jan.vrany@fit.cvut.cz>"
263
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   632
!
df89d5b4dfe0 Oops, added lost method.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 262
diff changeset
   633
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   634
visitUnaryNode:anObject
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   635
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   636
    | type sel rec classes |
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   637
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   638
    super visitUnaryNode:anObject.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   639
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   640
    sel := anObject selector.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   641
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   642
    "/ #class should always return a class of the receiver...
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   643
    sel == #class ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   644
        type := anObject receiver inferedType classSide.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   645
        anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   646
        ^self.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   647
    ].
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   648
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   649
    "/ #new / #basicNew: conventionally returns an instance of the class, if receiver is a class.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   650
    (sel == #new or:[sel == #basicNew]) ifTrue:[
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   651
        rec := anObject receiver.
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   652
        (rec isSelf and:[class isMetaclass]) ifTrue:[
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   653
            type := Type withClass: class theNonMetaclass.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   654
            type trustfullnessAdd: 50.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   655
            anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   656
            ^self.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   657
        ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   658
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   659
        type := anObject receiver inferedType instanceSide.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   660
        anObject inferedType: type.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   661
        ^self.
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   662
    ].
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   663
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   664
    rec := anObject receiver.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   665
    classes := rec inferedType classes.
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   666
    classes size == 1 ifTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   667
        "/ Special hack for Java, when code is like
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   668
        "/ `JAVA java lang reflect`
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   669
        classes anElement == JavaPackage class ifTrue:[
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   670
            (JAVA notNil and:[anObject selector first isUppercase]) ifTrue:[
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   671
                | jclass |
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   672
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   673
                "/ fetch an accessor...
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   674
                [
254
3542abc630fa Oops, fix in Smalltalk inferencer: there's nothing like BlockClosure in St/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 252
diff changeset
   675
                    jclass := anObject evaluate.
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   676
                    "/ fetch the class...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   677
                    jclass := JavaVM classNamed: jclass fullName definedBy: JavaVM systemClassLoader.
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   678
                    jclass notNil ifTrue:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   679
                        anObject inferedType: (Type withClass: jclass class).
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   680
                    ] ifFalse:[
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   681
                        anObject inferedType: (Type withClass: JavaClass class).
125
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   682
                    ].
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   683
                ] on: Error do:[
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   684
                    "/ ignore...
5219ed289f45 Fix for SmalltalkInferencer.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 123
diff changeset
   685
                ]
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   686
            ] ifFalse:[
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   687
                anObject inferedType: (Type withClass: JavaPackage class).
123
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   688
            ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   689
        ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   690
    ].
1b949542c4b2 Improvements for completion of Java classes/methods in Smalltalk code.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 121
diff changeset
   691
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   692
    "Created: / 27-11-2011 / 15:49:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
128
a98866596a98 Fix in SmalltalkInferencer for known globals.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 127
diff changeset
   693
    "Modified: / 08-10-2013 / 11:07:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   694
    "Modified (comment): / 05-08-2014 / 13:56:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   695
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   696
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   697
!SmalltalkInferencer::Phase3 class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   698
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   699
documentation
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   700
"
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   701
    Phase 3: guess types based on naming conventions. This is mainly to process
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   702
    parameters in form of aString or aStringOrBoolean...
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   703
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   704
    [author:]
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   705
        Jan Vrany <jan.vrany@fit.cvut.cz>
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   706
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   707
    [instance variables:]
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   708
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   709
    [class variables:]
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   710
261
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   711
    [see also:]
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   712
b583a3b5f398 Some tweaks in inferences - more support for "known selectors", like ,#==, #+ or: #class.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 254
diff changeset
   713
"
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   714
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   715
1054
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   716
!SmalltalkInferencer::Phase3 methodsFor:'visiting'!
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   717
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   718
visitVariableNode:anObject
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   719
    | name className |
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   720
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   721
    name := anObject name.
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   722
    (name size > 1 and:[name first == $a]) ifTrue:[ 
1058
6d4bf422a7dd Fix subscript out of bounds error in Smalltalk inderences
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1054
diff changeset
   723
        (name size > 2 and: [name second == $n and:[ name third isUppercase ]]) ifTrue:[ 
1054
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   724
            className := (name copyFrom: 3) asSymbolIfInterned.
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   725
        ] ifFalse:[ name second isUppercase ifTrue:[
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   726
            className := (name copyFrom: 2) asSymbolIfInterned.
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   727
        ]].
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   728
        className notNil ifTrue:[
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   729
            | cls |
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   730
            cls := Smalltalk at: className.
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   731
            cls notNil ifTrue:[ 
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   732
                anObject inferedType type: (Type withClass: cls) type
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   733
            ].
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   734
        ].
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   735
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   736
    ].
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   737
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   738
    "Created: / 06-07-2017 / 16:15:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1058
6d4bf422a7dd Fix subscript out of bounds error in Smalltalk inderences
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1054
diff changeset
   739
    "Modified: / 25-10-2017 / 23:39:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1054
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   740
! !
be59a463c886 Smalltalk type inference: implemented heuristics based on naming convention
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 883
diff changeset
   741
67
020b7461b15e Package structure reorganization.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 64
diff changeset
   742
!SmalltalkInferencer class methodsFor:'documentation'!
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   743
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   744
version_HG
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   745
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   746
    ^ '$Changeset: <not expanded> $'
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   747
!
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   748
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   749
version_SVN
320
5242593726f0 Updated from upstream repository to revision 0a4845a0c211
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 310
diff changeset
   750
    ^ '$Id$'
64
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   751
! !
2257d7223898 All classes moved to namespace SmallSense.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   752