author | Jan Vrany <jan.vrany@fit.cvut.cz> |
Mon, 31 Aug 2015 18:37:31 +0100 | |
changeset 5 | 976f21e29d37 |
parent 3 | 97ee341d3e9f |
permissions | -rw-r--r-- |
1
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
1 |
"{ Package: 'jv:tea/compiler' }" |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
2 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
3 |
"{ NameSpace: Smalltalk }" |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
4 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
5 |
TType subclass:#TUnionType |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
6 |
instanceVariableNames:'types' |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
7 |
classVariableNames:'' |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
8 |
poolDictionaries:'' |
2
2a3e47c13905
Removed classes meant for hosting Tea within Smalltalk/X.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
1
diff
changeset
|
9 |
category:'Languages-Tea-Compiler-Types' |
1
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
10 |
! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
11 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
12 |
!TUnionType class methodsFor:'instance creation'! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
13 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
14 |
with: type1 with: type2 |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
15 |
^ self new initializeWith: type1 and: type2 |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
16 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
17 |
"Created: / 21-08-2015 / 18:38:21 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
18 |
! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
19 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
20 |
withAll: types |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
21 |
^ self new initializeWithAll: types |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
22 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
23 |
"Created: / 25-08-2015 / 22:51:01 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
1
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
24 |
! ! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
25 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
26 |
!TUnionType methodsFor:'accessing'! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
27 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
28 |
types |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
29 |
^ types |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
30 |
! ! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
31 |
|
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
32 |
!TUnionType methodsFor:'comparing'! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
33 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
34 |
hash |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
35 |
| h | |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
36 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
37 |
h := types size. |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
38 |
types do:[:type | h := h bitXor: type hash ]. |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
39 |
^ h |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
40 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
41 |
"Created: / 25-08-2015 / 23:35:28 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
42 |
! ! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
43 |
|
1
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
44 |
!TUnionType methodsFor:'initialization'! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
45 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
46 |
initializeWith: type1 with: type2 |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
47 |
type1 isUnionType |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
48 |
ifTrue: [ types := type1 types copy ] |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
49 |
ifFalse:[ types := Array with: type1 ]. |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
50 |
type2 isUnionType |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
51 |
ifTrue: [ types := types , type2 types ] |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
52 |
ifFalse:[ types := types copyWith: type2 ]. |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
53 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
54 |
"Created: / 21-08-2015 / 18:39:44 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
55 |
! |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
56 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
57 |
initializeWithAll: aCollection |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
58 |
types := OrderedCollection new: aCollection size. |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
59 |
aCollection do:[:type | |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
60 |
type isUnionType |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
61 |
ifTrue:[ types addAll: type types ] |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
62 |
ifFalse:[types add: type ]. |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
63 |
]. |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
64 |
types := types asArray. |
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
65 |
|
97ee341d3e9f
Initial shot of scopes & bindings and type checking. Must be rethought.
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
2
diff
changeset
|
66 |
"Created: / 25-08-2015 / 22:50:48 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
1
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
67 |
! ! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
68 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
69 |
!TUnionType methodsFor:'testing'! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
70 |
|
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
71 |
isUnionType |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
72 |
^ true |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
73 |
! ! |
18b4a3b98e96
Creates subpackage jv:tea/compiler
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff
changeset
|
74 |