File tree Expand file tree Collapse file tree 2 files changed +158
-0
lines changed
validation-test/compiler_crashers_2_fixed Expand file tree Collapse file tree 2 files changed +158
-0
lines changed Original file line number Diff line number Diff line change
1
+ // RUN: %target-swift-frontend %s -emit-ir
2
+
3
+ public class TiPresenter < V> {
4
+
5
+ private var view : V ? = nil
6
+
7
+ public func create( ) {
8
+
9
+ }
10
+
11
+ public func attchView( view: V ) {
12
+ self . view = view
13
+ }
14
+
15
+ public func detachView( ) {
16
+ self . view = nil
17
+ }
18
+
19
+ public func destroy( ) {
20
+
21
+ }
22
+ }
23
+
24
+
25
+ public class TiViewController < P: TiPresenter < V > , V>
26
+ /*: UiViewController*/ // should extend UiViewController but this is not problem here
27
+ {
28
+
29
+ lazy var presenter : P = {
30
+ return self . providePresenter ( )
31
+ } ( )
32
+
33
+ public init ( ) {
34
+ presenter. create ( )
35
+ }
36
+
37
+ func providePresenter( ) -> P {
38
+ fatalError ( " must override " )
39
+ }
40
+
41
+ func provideView( ) -> V {
42
+ if ( self is V ) {
43
+ return self as! V
44
+ } else {
45
+ fatalError ( " UIViewController doesn't implement TiView interface " )
46
+ }
47
+ }
48
+ }
49
+
50
+
51
+ protocol MyView {
52
+ func setDataItems( _: [ String ] )
53
+ }
54
+
55
+ class MyPresenter : TiPresenter < MyView > {
56
+ }
57
+
58
+
59
+ class MyController : TiViewController < MyPresenter , MyView > , MyView {
60
+
61
+
62
+ override func providePresenter( ) -> MyPresenter {
63
+ return MyPresenter ( )
64
+ }
65
+
66
+ internal func setDataItems( _: [ String ] ) {
67
+ //TODO
68
+ }
69
+ }
70
+
71
+ let vc = MyController ( )
72
+ let p = vc. presenter
Original file line number Diff line number Diff line change
1
+ // RUN: not %target-swift-frontend %s -typecheck
2
+
3
+ public protocol TiView {
4
+
5
+ }
6
+
7
+ public class TiPresenter < V: TiView > {
8
+
9
+ private var view : V ? = nil
10
+
11
+ public func create( ) {
12
+
13
+ }
14
+
15
+ public func attchView( view: V ) {
16
+ self . view = view
17
+ }
18
+
19
+ public func detachView( ) {
20
+ self . view = nil
21
+ }
22
+
23
+ public func destroy( ) {
24
+
25
+ }
26
+ }
27
+
28
+
29
+ public class TiViewController < P: TiPresenter < V > , V: TiView >
30
+ /*: UiViewController*/ // should extend UiViewController but this is not problem here
31
+ {
32
+
33
+ lazy var presenter : P = {
34
+ return self . providePresenter ( )
35
+ } ( )
36
+
37
+ public init ( ) {
38
+ presenter. create ( )
39
+ }
40
+
41
+ func providePresenter( ) -> P {
42
+ fatalError ( " must override " )
43
+ }
44
+
45
+ func provideView( ) -> V {
46
+ if ( self is V ) {
47
+ return self as! V
48
+ } else {
49
+ fatalError ( " UIViewController doesn't implement TiView interface " )
50
+ }
51
+ }
52
+ }
53
+
54
+
55
+ protocol MyView : TiView {
56
+ func setDataItems( _: [ String ] )
57
+ }
58
+
59
+ class MyPresenter : TiPresenter < MyView > { //ERROR: Using 'MyView' as a concrete type conforming to protocol 'TiView' is not supported
60
+
61
+ }
62
+
63
+
64
+ class MyController : TiViewController < MyPresenter , MyView > , MyView { // ERROR: 'TiViewController' requires that 'MyPresenter' inherit from 'TiPresenter<MyView>'
65
+
66
+
67
+ override func providePresenter( ) -> MyPresenter {
68
+ return MyPresenter ( )
69
+ }
70
+
71
+ internal func setDataItems( _: [ String ] ) {
72
+ //TODO
73
+ }
74
+ }
75
+
76
+ let vc = MyController ( )
77
+ let p = vc. presenter
78
+
79
+ class TestView : MyView {
80
+ internal func setDataItems( _: [ String ] ) {
81
+ // TODO
82
+ }
83
+ }
84
+ let view = TestView ( )
85
+
86
+ p. attchView ( view: view)
You can’t perform that action at this time.
0 commit comments