diff --git a/emitter_c.go b/emitter_c.go
index 2f806c8..507a2fd 100644
--- a/emitter_c.go
+++ b/emitter_c.go
@@ -546,13 +546,12 @@
 	if !emitter.canonical && yaml_emitter_check_simple_key(emitter) {
 		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)
 		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
-	} else {
-		if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {
-			return false
-		}
-		emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)
-		return yaml_emitter_emit_node(emitter, event, false, false, true, false)
 	}
+	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {
+		return false
+	}
+	emitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)
+	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
 }
 
 // Expect a flow value node.
@@ -619,13 +618,12 @@
 	if yaml_emitter_check_simple_key(emitter) {
 		emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)
 		return yaml_emitter_emit_node(emitter, event, false, false, true, true)
-	} else {
-		if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {
-			return false
-		}
-		emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)
-		return yaml_emitter_emit_node(emitter, event, false, false, true, false)
 	}
+	if !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {
+		return false
+	}
+	emitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)
+	return yaml_emitter_emit_node(emitter, event, false, false, true, false)
 }
 
 // Expect a block value node.
@@ -1497,13 +1495,13 @@
 			default:
 				if v <= 0xFF {
 					ok = put(emitter, 'x')
-					w= 2
+					w = 2
 				} else if v <= 0xFFFF {
 					ok = put(emitter, 'u')
-					w= 4
+					w = 4
 				} else {
 					ok = put(emitter, 'U')
-					w= 8
+					w = 8
 				}
 				for k := (w - 1) * 4; ok && k >= 0; k -= 4 {
 					digit := byte((v >> uint(k)) & 0x0F)
diff --git a/parser_c.go b/parser_c.go
index da0c19f..5210b4f 100644
--- a/parser_c.go
+++ b/parser_c.go
@@ -294,9 +294,8 @@
 		parser.states = parser.states[:len(parser.states)-1]
 		return yaml_parser_process_empty_scalar(parser, event,
 			token.start_mark)
-	} else {
-		return yaml_parser_parse_node(parser, event, true, false)
 	}
+	return yaml_parser_parse_node(parser, event, true, false)
 }
 
 // Parse the productions:
@@ -649,21 +648,19 @@
 			token.typ != yaml_BLOCK_END_TOKEN {
 			parser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)
 			return yaml_parser_parse_node(parser, event, true, false)
-		} else {
-			parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
-			return yaml_parser_process_empty_scalar(parser, event, mark)
 		}
-	} else {
-		parser.state = parser.states[len(parser.states)-1]
-		parser.states = parser.states[:len(parser.states)-1]
-
-		*event = yaml_event_t{
-			typ:        yaml_SEQUENCE_END_EVENT,
-			start_mark: token.start_mark,
-			end_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?
-		}
-		return true
+		parser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE
+		return yaml_parser_process_empty_scalar(parser, event, mark)
 	}
+	parser.state = parser.states[len(parser.states)-1]
+	parser.states = parser.states[:len(parser.states)-1]
+
+	*event = yaml_event_t{
+		typ:        yaml_SEQUENCE_END_EVENT,
+		start_mark: token.start_mark,
+		end_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?
+	}
+	return true
 }
 
 // Parse the productions:
@@ -751,14 +748,12 @@
 			token.typ != yaml_BLOCK_END_TOKEN {
 			parser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)
 			return yaml_parser_parse_node(parser, event, true, true)
-		} else {
-			parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
-			return yaml_parser_process_empty_scalar(parser, event, mark)
 		}
-	} else {
 		parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
-		return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
+		return yaml_parser_process_empty_scalar(parser, event, mark)
 	}
+	parser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE
+	return yaml_parser_process_empty_scalar(parser, event, token.start_mark)
 }
 
 // Parse the productions:
@@ -846,12 +841,11 @@
 		token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {
 		parser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)
 		return yaml_parser_parse_node(parser, event, false, false)
-	} else {
-		mark := token.end_mark
-		skip_token(parser)
-		parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
-		return yaml_parser_process_empty_scalar(parser, event, mark)
 	}
+	mark := token.end_mark
+	skip_token(parser)
+	parser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE
+	return yaml_parser_process_empty_scalar(parser, event, mark)
 }
 
 // Parse the productions:
