v9.CheckDefFailure(['for i in range(5)', 'endtry'], 'E170:')
v9.CheckDefFailure(['if 1', 'endtry'], 'E171:')
v9.CheckDefFailure(['try', 'echo 1', 'endtry'], 'E1032:')
+ v9.CheckDefFailure(['try'], 'E600:')
+ v9.CheckDefFailure(['try', 'echo 0'], 'E600:')
+ v9.CheckDefFailure(['try', 'echo 0', 'catch'], 'E600:')
+ v9.CheckDefFailure(['try', 'echo 0', 'catch', 'echo 1'], 'E600:')
+ v9.CheckDefFailure(['try', 'echo 0', 'catch', 'echo 1', 'finally'], 'E600:')
+ v9.CheckDefFailure(['try', 'echo 0', 'catch', 'echo 1', 'finally', 'echo 2'], 'E600:')
+
+ # Missing :endtry inside a nested :try
+ var outer1 =<< trim END
+ try
+ echo 0
+ catch
+ echo 1
+ END
+ var outer2 =<< trim END
+ finally
+ echo 2
+ endtry
+ END
+ v9.CheckDefFailure(outer1 + ['try'] + outer2, 'E600:')
+ v9.CheckDefFailure(outer1 + ['try', 'echo 10'] + outer2, 'E600:')
+ v9.CheckDefFailure(outer1 + ['try', 'echo 10', 'catch'] + outer2, 'E600:')
+ v9.CheckDefFailure(outer1 + ['try', 'echo 10', 'catch', 'echo 11'] + outer2, 'E600:')
+ v9.CheckDefFailure(outer1 + ['try', 'echo 10', 'catch', 'echo 11', 'finally'] + outer2, 'E607:')
+ v9.CheckDefFailure(outer1 + ['try', 'echo 10', 'catch', 'echo 11', 'finally', 'echo 12'] + outer2, 'E607:')
v9.CheckDefFailure(['throw'], 'E1143:')
v9.CheckDefFailure(['throw xxx'], 'E1001:')
if (cctx->ctx_scope == NULL)
return FALSE;
- if (cctx->ctx_scope->se_type == IF_SCOPE)
- emsg(_(e_missing_endif));
- else if (cctx->ctx_scope->se_type == WHILE_SCOPE)
- emsg(_(e_missing_endwhile));
- else if (cctx->ctx_scope->se_type == FOR_SCOPE)
- emsg(_(e_missing_endfor));
- else
- emsg(_(e_missing_rcurly));
-
+ switch (cctx->ctx_scope->se_type)
+ {
+ case IF_SCOPE:
+ emsg(_(e_missing_endif));
+ break;
+ case WHILE_SCOPE:
+ emsg(_(e_missing_endwhile));
+ break;
+ case FOR_SCOPE:
+ emsg(_(e_missing_endfor));
+ break;
+ case TRY_SCOPE:
+ emsg(_(e_missing_endtry));
+ break;
+ case BLOCK_SCOPE:
+ // end block scope from :try (maybe)
+ compile_endblock(cctx);
+ if (cctx->ctx_scope != NULL
+ && cctx->ctx_scope->se_type == TRY_SCOPE)
+ emsg(_(e_missing_endtry));
+ else
+ emsg(_(e_missing_rcurly));
+ break;
+ default:
+ emsg(_(e_missing_rcurly));
+ }
return TRUE;
}