comparison src/eval.c @ 21024:02b03915855d v8.2.1063

patch 8.2.1063: Vim9: no line break allowed before || or && Commit: https://github.com/vim/vim/commit/be7ee488761a5582a5605197c3951a17f20d072e Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 26 21:38:51 2020 +0200 patch 8.2.1063: Vim9: no line break allowed before || or && Problem: Vim9: no line break allowed before || or &&. Solution: Check for operator after line break.
author Bram Moolenaar <Bram@vim.org>
date Fri, 26 Jun 2020 21:45:16 +0200
parents 9d8634e91d1b
children fe2ed85db946
comparison
equal deleted inserted replaced
21023:71f6a958bd70 21024:02b03915855d
1989 * Return OK or FAIL. 1989 * Return OK or FAIL.
1990 */ 1990 */
1991 static int 1991 static int
1992 eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg) 1992 eval2(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
1993 { 1993 {
1994 char_u *p;
1995 int getnext;
1994 typval_T var2; 1996 typval_T var2;
1995 long result; 1997 long result;
1996 int first; 1998 int first;
1997 int error = FALSE; 1999 int error = FALSE;
1998 2000
2005 /* 2007 /*
2006 * Repeat until there is no following "||". 2008 * Repeat until there is no following "||".
2007 */ 2009 */
2008 first = TRUE; 2010 first = TRUE;
2009 result = FALSE; 2011 result = FALSE;
2010 while ((*arg)[0] == '|' && (*arg)[1] == '|') 2012 p = eval_next_non_blank(*arg, evalarg, &getnext);
2013 while (p[0] == '|' && p[1] == '|')
2011 { 2014 {
2012 evalarg_T nested_evalarg; 2015 evalarg_T nested_evalarg;
2013 int evaluate; 2016 int evaluate;
2014 int orig_flags; 2017 int orig_flags;
2018
2019 if (getnext)
2020 *arg = eval_next_line(evalarg);
2015 2021
2016 if (evalarg == NULL) 2022 if (evalarg == NULL)
2017 { 2023 {
2018 CLEAR_FIELD(nested_evalarg); 2024 CLEAR_FIELD(nested_evalarg);
2019 orig_flags = 0; 2025 orig_flags = 0;
2059 if (evaluate) 2065 if (evaluate)
2060 { 2066 {
2061 rettv->v_type = VAR_NUMBER; 2067 rettv->v_type = VAR_NUMBER;
2062 rettv->vval.v_number = result; 2068 rettv->vval.v_number = result;
2063 } 2069 }
2070
2071 p = eval_next_non_blank(*arg, evalarg, &getnext);
2064 } 2072 }
2065 2073
2066 return OK; 2074 return OK;
2067 } 2075 }
2068 2076
2076 * Return OK or FAIL. 2084 * Return OK or FAIL.
2077 */ 2085 */
2078 static int 2086 static int
2079 eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg) 2087 eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
2080 { 2088 {
2089 char_u *p;
2090 int getnext;
2081 typval_T var2; 2091 typval_T var2;
2082 long result; 2092 long result;
2083 int first; 2093 int first;
2084 int error = FALSE; 2094 int error = FALSE;
2085 2095
2092 /* 2102 /*
2093 * Repeat until there is no following "&&". 2103 * Repeat until there is no following "&&".
2094 */ 2104 */
2095 first = TRUE; 2105 first = TRUE;
2096 result = TRUE; 2106 result = TRUE;
2097 while ((*arg)[0] == '&' && (*arg)[1] == '&') 2107 p = eval_next_non_blank(*arg, evalarg, &getnext);
2108 while (p[0] == '&' && p[1] == '&')
2098 { 2109 {
2099 evalarg_T nested_evalarg; 2110 evalarg_T nested_evalarg;
2100 int orig_flags; 2111 int orig_flags;
2101 int evaluate; 2112 int evaluate;
2113
2114 if (getnext)
2115 *arg = eval_next_line(evalarg);
2102 2116
2103 if (evalarg == NULL) 2117 if (evalarg == NULL)
2104 { 2118 {
2105 CLEAR_FIELD(nested_evalarg); 2119 CLEAR_FIELD(nested_evalarg);
2106 orig_flags = 0; 2120 orig_flags = 0;
2145 if (evaluate) 2159 if (evaluate)
2146 { 2160 {
2147 rettv->v_type = VAR_NUMBER; 2161 rettv->v_type = VAR_NUMBER;
2148 rettv->vval.v_number = result; 2162 rettv->vval.v_number = result;
2149 } 2163 }
2164
2165 p = eval_next_non_blank(*arg, evalarg, &getnext);
2150 } 2166 }
2151 2167
2152 return OK; 2168 return OK;
2153 } 2169 }
2154 2170