@@ -55,15 +55,31 @@ object MonoConnect {
55
55
* during the recursive decent and then rethrow them with extra information added.
56
56
* This gives the user a 'path' to where in the connections things went wrong.
57
57
*/
58
- def connect (sourceInfo : SourceInfo , connectCompileOptions : CompileOptions , sink : Data , source : Data , context_mod : UserModule ): Unit =
58
+ // scalastyle:off cyclomatic.complexity method.length
59
+ def connect (
60
+ sourceInfo : SourceInfo ,
61
+ connectCompileOptions : CompileOptions ,
62
+ sink : Data ,
63
+ source : Data ,
64
+ context_mod : UserModule ): Unit =
59
65
(sink, source) match {
60
- // Handle element case (root case)
61
- case (sink_e : Element , source_e : Element ) => {
66
+
67
+ // Handle legal element cases, note (Bool, Bool) is caught by the first two, as Bool is a UInt
68
+ case (sink_e : Bool , source_e : UInt ) =>
62
69
elemConnect(sourceInfo, connectCompileOptions, sink_e, source_e, context_mod)
63
- // TODO(twigg): Verify the element-level classes are connectable
64
- }
70
+ case (sink_e : UInt , source_e : Bool ) =>
71
+ elemConnect(sourceInfo, connectCompileOptions, sink_e, source_e, context_mod)
72
+ case (sink_e : UInt , source_e : UInt ) =>
73
+ elemConnect(sourceInfo, connectCompileOptions, sink_e, source_e, context_mod)
74
+ case (sink_e : SInt , source_e : SInt ) =>
75
+ elemConnect(sourceInfo, connectCompileOptions, sink_e, source_e, context_mod)
76
+ case (sink_e : FixedPoint , source_e : FixedPoint ) =>
77
+ elemConnect(sourceInfo, connectCompileOptions, sink_e, source_e, context_mod)
78
+ case (sink_e : Clock , source_e : Clock ) =>
79
+ elemConnect(sourceInfo, connectCompileOptions, sink_e, source_e, context_mod)
80
+
65
81
// Handle Vec case
66
- case (sink_v : Vec [Data @ unchecked], source_v : Vec [Data @ unchecked]) => {
82
+ case (sink_v : Vec [Data @ unchecked], source_v : Vec [Data @ unchecked]) =>
67
83
if (sink_v.length != source_v.length) { throw MismatchedVecException }
68
84
for (idx <- 0 until sink_v.length) {
69
85
try {
@@ -73,9 +89,9 @@ object MonoConnect {
73
89
case MonoConnectException (message) => throw MonoConnectException (s " ( $idx) $message" )
74
90
}
75
91
}
76
- }
92
+
77
93
// Handle Record case
78
- case (sink_r : Record , source_r : Record ) => {
94
+ case (sink_r : Record , source_r : Record ) =>
79
95
// For each field, descend with right
80
96
for ((field, sink_sub) <- sink_r.elements) {
81
97
try {
@@ -91,7 +107,7 @@ object MonoConnect {
91
107
case MonoConnectException (message) => throw MonoConnectException (s " . $field$message" )
92
108
}
93
109
}
94
- }
110
+
95
111
// Sink and source are different subtypes of data so fail
96
112
case (sink, source) => throw MismatchedException (sink.toString, source.toString)
97
113
}
0 commit comments