call CheckDefFailure(['&ts = 3', 'let asdf'], 'E1022:')
&ts = 8
+ call CheckDefFailure(['let s:var = 123'], 'E1101:')
+ call CheckDefFailure(['let s:var: number'], 'E1101:')
+
g:inc_counter += 1
assert_equal(2, g:inc_counter)
assert_equal('noneagain', v:errmsg)
call CheckDefFailure(['v:errmsg += "more"'], 'E1013:')
call CheckDefFailure(['v:errmsg += 123'], 'E1013:')
+
+ # single letter variables
+ a = 123
+ assert_equal(123, a)
+ let b: number
+ b = 123
+ assert_equal(123, b)
+ let g: number
+ g = 123
+ assert_equal(123, g)
+ let s: number
+ s = 123
+ assert_equal(123, s)
+ let t: number
+ t = 123
+ assert_equal(123, t)
+ let v: number
+ v = 123
+ assert_equal(123, v)
+ let w: number
+ w = 123
+ assert_equal(123, w)
enddef
def Test_vim9_single_char_vars()
goto theend;
}
}
- else if (STRNCMP(var_start, "g:", 2) == 0)
+ else if (varlen > 1 && STRNCMP(var_start, "g:", 2) == 0)
{
dest = dest_global;
if (is_decl)
goto theend;
}
}
- else if (STRNCMP(var_start, "b:", 2) == 0)
+ else if (varlen > 1 && STRNCMP(var_start, "b:", 2) == 0)
{
dest = dest_buffer;
if (is_decl)
goto theend;
}
}
- else if (STRNCMP(var_start, "w:", 2) == 0)
+ else if (varlen > 1 && STRNCMP(var_start, "w:", 2) == 0)
{
dest = dest_window;
if (is_decl)
goto theend;
}
}
- else if (STRNCMP(var_start, "t:", 2) == 0)
+ else if (varlen > 1 && STRNCMP(var_start, "t:", 2) == 0)
{
dest = dest_tab;
if (is_decl)
goto theend;
}
}
- else if (STRNCMP(var_start, "v:", 2) == 0)
+ else if (varlen > 1 && STRNCMP(var_start, "v:", 2) == 0)
{
typval_T *vtv;
int di_flags;
goto theend;
}
}
- else if (STRNCMP(var_start, "s:", 2) == 0
+ else if ((varlen > 1 && STRNCMP(var_start, "s:", 2) == 0)
|| lookup_script(var_start, varlen) == OK
|| find_imported(var_start, varlen, cctx) != NULL)
{
dest = dest_script;
if (is_decl)
{
- semsg(_("E1054: Variable already declared in the script: %s"),
+ if ((varlen > 1 && STRNCMP(var_start, "s:", 2) == 0))
+ semsg(_("E1101: Cannot declare a script variable in a function: %s"),
+ name);
+ else
+ semsg(_("E1054: Variable already declared in the script: %s"),
name);
goto theend;
}