]> git.lizzy.rs Git - rust.git/commitdiff
Don't ICE when protocol steps to invalid mesasge.
authorEric Holk <eric.holk@gmail.com>
Tue, 17 Jul 2012 19:51:24 +0000 (12:51 -0700)
committerEric Holk <eric.holk@gmail.com>
Wed, 18 Jul 2012 00:46:31 +0000 (17:46 -0700)
src/libsyntax/ext/pipes/check.rs

index 7cf96707bca919b7a58208e08fdbe848033aca47..492cb255805e9bb9f61049c0cf54dcf79f04e1c5 100644 (file)
@@ -44,28 +44,29 @@ fn visit_state(state: state, _m: &[()]) {
 
     fn visit_message(name: ident, _tys: &[@ast::ty],
                      this: state, next: next_state) {
-         alt next {
-           some({state: next, tys: next_tys}) {
-             let proto = this.proto;
-             if !proto.has_state(next) {
-                 // This should be a span fatal, but then we need to
-                 // track span information.
-                 self.span_err(
-                     empty_span(),
-                     #fmt("message %s steps to undefined state, %s",
-                          *name, *next));
-            }
-
-            let next = proto.get_state(next);
-
-            if next.ty_params.len() != next_tys.len() {
+        alt next {
+          some({state: next, tys: next_tys}) {
+            let proto = this.proto;
+            if !proto.has_state(next) {
+                // This should be a span fatal, but then we need to
+                // track span information.
                 self.span_err(
-                    empty_span(), // use a real span
-                    #fmt("message %s target (%s) \
-                          needs %u type parameters, but got %u",
-                         *name, *next.name,
-                         next.ty_params.len(),
-                         next_tys.len()));
+                    empty_span(),
+                    #fmt("message %s steps to undefined state, %s",
+                         *name, *next));
+            }
+            else {
+                let next = proto.get_state(next);
+
+                if next.ty_params.len() != next_tys.len() {
+                    self.span_err(
+                        empty_span(), // use a real span
+                        #fmt("message %s target (%s) \
+                              needs %u type parameters, but got %u",
+                             *name, *next.name,
+                             next.ty_params.len(),
+                             next_tys.len()));
+                }
             }
           }
           none { }