comparison src/eval.c @ 19922:1f42c49c3d29 v8.2.0517

patch 8.2.0517: Vim9: cannot separate "func" and "func(): void" Commit: https://github.com/vim/vim/commit/4c68375057c25e99656bc996d3fa5c6b0b6a7e6a Author: Bram Moolenaar <Bram@vim.org> Date: Sun Apr 5 21:38:23 2020 +0200 patch 8.2.0517: Vim9: cannot separate "func" and "func(): void" Problem: Vim9: cannot separate "func" and "func(): void". Solution: Use VAR_ANY for "any" and VAR_UNKNOWN for "no type".
author Bram Moolenaar <Bram@vim.org>
date Sun, 05 Apr 2020 21:45:25 +0200
parents 435726a03481
children aadd1cae2ff5
comparison
equal deleted inserted replaced
19921:05ac81e3e873 19922:1f42c49c3d29
1270 && tv2->v_type != VAR_BOOL && tv2->v_type != VAR_SPECIAL) 1270 && tv2->v_type != VAR_BOOL && tv2->v_type != VAR_SPECIAL)
1271 { 1271 {
1272 switch (tv1->v_type) 1272 switch (tv1->v_type)
1273 { 1273 {
1274 case VAR_UNKNOWN: 1274 case VAR_UNKNOWN:
1275 case VAR_ANY:
1275 case VAR_VOID: 1276 case VAR_VOID:
1276 case VAR_DICT: 1277 case VAR_DICT:
1277 case VAR_FUNC: 1278 case VAR_FUNC:
1278 case VAR_PARTIAL: 1279 case VAR_PARTIAL:
1279 case VAR_BOOL: 1280 case VAR_BOOL:
2965 case VAR_CHANNEL: 2966 case VAR_CHANNEL:
2966 if (verbose) 2967 if (verbose)
2967 emsg(_("E909: Cannot index a special variable")); 2968 emsg(_("E909: Cannot index a special variable"));
2968 return FAIL; 2969 return FAIL;
2969 case VAR_UNKNOWN: 2970 case VAR_UNKNOWN:
2971 case VAR_ANY:
2970 case VAR_VOID: 2972 case VAR_VOID:
2971 if (evaluate) 2973 if (evaluate)
2972 return FAIL; 2974 return FAIL;
2973 // FALLTHROUGH 2975 // FALLTHROUGH
2974 2976
3071 } 3073 }
3072 3074
3073 switch (rettv->v_type) 3075 switch (rettv->v_type)
3074 { 3076 {
3075 case VAR_UNKNOWN: 3077 case VAR_UNKNOWN:
3078 case VAR_ANY:
3076 case VAR_VOID: 3079 case VAR_VOID:
3077 case VAR_FUNC: 3080 case VAR_FUNC:
3078 case VAR_PARTIAL: 3081 case VAR_PARTIAL:
3079 case VAR_FLOAT: 3082 case VAR_FLOAT:
3080 case VAR_BOOL: 3083 case VAR_BOOL:
3666 3669
3667 return OK; 3670 return OK;
3668 } 3671 }
3669 3672
3670 /* 3673 /*
3671 * Return the function name of the partial. 3674 * Return the function name of partial "pt".
3672 */ 3675 */
3673 char_u * 3676 char_u *
3674 partial_name(partial_T *pt) 3677 partial_name(partial_T *pt)
3675 { 3678 {
3676 if (pt->pt_name != NULL) 3679 if (pt->pt_name != NULL)
3854 3857
3855 case VAR_FUNC: 3858 case VAR_FUNC:
3856 return tv1->vval.v_string == tv2->vval.v_string; 3859 return tv1->vval.v_string == tv2->vval.v_string;
3857 3860
3858 case VAR_UNKNOWN: 3861 case VAR_UNKNOWN:
3862 case VAR_ANY:
3859 case VAR_VOID: 3863 case VAR_VOID:
3860 break; 3864 break;
3861 } 3865 }
3862 3866
3863 // VAR_UNKNOWN can be the result of a invalid expression, let's say it 3867 // VAR_UNKNOWN can be the result of a invalid expression, let's say it
4568 } 4572 }
4569 break; 4573 break;
4570 4574
4571 case VAR_NUMBER: 4575 case VAR_NUMBER:
4572 case VAR_UNKNOWN: 4576 case VAR_UNKNOWN:
4577 case VAR_ANY:
4573 case VAR_VOID: 4578 case VAR_VOID:
4574 *tofree = NULL; 4579 *tofree = NULL;
4575 r = tv_get_string_buf(tv, numbuf); 4580 r = tv_get_string_buf(tv, numbuf);
4576 break; 4581 break;
4577 4582
5420 channel_unref(varp->vval.v_channel); 5425 channel_unref(varp->vval.v_channel);
5421 break; 5426 break;
5422 #endif 5427 #endif
5423 case VAR_NUMBER: 5428 case VAR_NUMBER:
5424 case VAR_FLOAT: 5429 case VAR_FLOAT:
5430 case VAR_ANY:
5425 case VAR_UNKNOWN: 5431 case VAR_UNKNOWN:
5426 case VAR_VOID: 5432 case VAR_VOID:
5427 case VAR_BOOL: 5433 case VAR_BOOL:
5428 case VAR_SPECIAL: 5434 case VAR_SPECIAL:
5429 break; 5435 break;
5484 #ifdef FEAT_JOB_CHANNEL 5490 #ifdef FEAT_JOB_CHANNEL
5485 channel_unref(varp->vval.v_channel); 5491 channel_unref(varp->vval.v_channel);
5486 varp->vval.v_channel = NULL; 5492 varp->vval.v_channel = NULL;
5487 #endif 5493 #endif
5488 case VAR_UNKNOWN: 5494 case VAR_UNKNOWN:
5495 case VAR_ANY:
5489 case VAR_VOID: 5496 case VAR_VOID:
5490 break; 5497 break;
5491 } 5498 }
5492 varp->v_lock = 0; 5499 varp->v_lock = 0;
5493 } 5500 }
5563 #endif 5570 #endif
5564 case VAR_BLOB: 5571 case VAR_BLOB:
5565 emsg(_("E974: Using a Blob as a Number")); 5572 emsg(_("E974: Using a Blob as a Number"));
5566 break; 5573 break;
5567 case VAR_UNKNOWN: 5574 case VAR_UNKNOWN:
5575 case VAR_ANY:
5568 case VAR_VOID: 5576 case VAR_VOID:
5569 internal_error_no_abort("tv_get_number(UNKNOWN)"); 5577 internal_error_no_abort("tv_get_number(UNKNOWN)");
5570 break; 5578 break;
5571 } 5579 }
5572 if (denote == NULL) // useful for values that must be unsigned 5580 if (denote == NULL) // useful for values that must be unsigned
5617 # endif 5625 # endif
5618 case VAR_BLOB: 5626 case VAR_BLOB:
5619 emsg(_("E975: Using a Blob as a Float")); 5627 emsg(_("E975: Using a Blob as a Float"));
5620 break; 5628 break;
5621 case VAR_UNKNOWN: 5629 case VAR_UNKNOWN:
5630 case VAR_ANY:
5622 case VAR_VOID: 5631 case VAR_VOID:
5623 internal_error_no_abort("tv_get_float(UNKNOWN)"); 5632 internal_error_no_abort("tv_get_float(UNKNOWN)");
5624 break; 5633 break;
5625 } 5634 }
5626 return 0; 5635 return 0;
5740 return buf; 5749 return buf;
5741 } 5750 }
5742 #endif 5751 #endif
5743 break; 5752 break;
5744 case VAR_UNKNOWN: 5753 case VAR_UNKNOWN:
5754 case VAR_ANY:
5745 case VAR_VOID: 5755 case VAR_VOID:
5746 emsg(_(e_inval_string)); 5756 emsg(_(e_inval_string));
5747 break; 5757 break;
5748 } 5758 }
5749 return NULL; 5759 return NULL;
5889 to->vval.v_dict = from->vval.v_dict; 5899 to->vval.v_dict = from->vval.v_dict;
5890 ++to->vval.v_dict->dv_refcount; 5900 ++to->vval.v_dict->dv_refcount;
5891 } 5901 }
5892 break; 5902 break;
5893 case VAR_UNKNOWN: 5903 case VAR_UNKNOWN:
5904 case VAR_ANY:
5894 case VAR_VOID: 5905 case VAR_VOID:
5895 internal_error_no_abort("copy_tv(UNKNOWN)"); 5906 internal_error_no_abort("copy_tv(UNKNOWN)");
5896 break; 5907 break;
5897 } 5908 }
5898 } 5909 }
5968 to->vval.v_dict = dict_copy(from->vval.v_dict, deep, copyID); 5979 to->vval.v_dict = dict_copy(from->vval.v_dict, deep, copyID);
5969 if (to->vval.v_dict == NULL) 5980 if (to->vval.v_dict == NULL)
5970 ret = FAIL; 5981 ret = FAIL;
5971 break; 5982 break;
5972 case VAR_UNKNOWN: 5983 case VAR_UNKNOWN:
5984 case VAR_ANY:
5973 case VAR_VOID: 5985 case VAR_VOID:
5974 internal_error_no_abort("item_copy(UNKNOWN)"); 5986 internal_error_no_abort("item_copy(UNKNOWN)");
5975 ret = FAIL; 5987 ret = FAIL;
5976 } 5988 }
5977 --recurse; 5989 --recurse;