Mercurial > vim
comparison src/testdir/test_vim9_script.vim @ 25284:29191571eceb v8.2.3179
patch 8.2.3179: Vim9: cannot assign to an imported variable at script level
Commit: https://github.com/vim/vim/commit/24e9316560bd5c9ea2e5a963335aedff025e7f66
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jul 18 20:40:33 2021 +0200
patch 8.2.3179: Vim9: cannot assign to an imported variable at script level
Problem: Vim9: cannot assign to an imported variable at script level.
Solution: Lookup imported items when assigning.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 18 Jul 2021 20:45:04 +0200 |
parents | 9bce044c7643 |
children | 90fa50a31994 |
comparison
equal
deleted
inserted
replaced
25283:dbf77501fe00 | 25284:29191571eceb |
---|---|
1060 export var exported = 9876 | 1060 export var exported = 9876 |
1061 export var exp_name = 'John' | 1061 export var exp_name = 'John' |
1062 export def Exported(): string | 1062 export def Exported(): string |
1063 return 'Exported' | 1063 return 'Exported' |
1064 enddef | 1064 enddef |
1065 export def ExportedValue(): number | |
1066 return exported | |
1067 enddef | |
1068 export def ExportedInc() | |
1069 exported += 5 | |
1070 enddef | |
1065 export final theList = [1] | 1071 export final theList = [1] |
1066 END | 1072 END |
1067 | 1073 |
1068 def Undo_export_script_lines() | 1074 def Undo_export_script_lines() |
1069 unlet g:result | 1075 unlet g:result |
1071 enddef | 1077 enddef |
1072 | 1078 |
1073 def Test_vim9_import_export() | 1079 def Test_vim9_import_export() |
1074 var import_script_lines =<< trim END | 1080 var import_script_lines =<< trim END |
1075 vim9script | 1081 vim9script |
1076 import {exported, Exported} from './Xexport.vim' | 1082 import {exported, Exported, ExportedValue} from './Xexport.vim' |
1077 g:imported = exported | 1083 g:exported1 = exported |
1078 exported += 3 | 1084 exported += 3 |
1079 g:imported_added = exported | 1085 g:exported2 = exported |
1086 g:exported3 = ExportedValue() | |
1087 | |
1088 import ExportedInc from './Xexport.vim' | |
1089 ExportedInc() | |
1090 g:exported_i1 = exported | |
1091 g:exported_i2 = ExportedValue() | |
1092 | |
1093 exported = 11 | |
1094 g:exported_s1 = exported | |
1095 g:exported_s2 = ExportedValue() | |
1096 | |
1080 g:imported_func = Exported() | 1097 g:imported_func = Exported() |
1081 | 1098 |
1082 def GetExported(): string | 1099 def GetExported(): string |
1083 var local_dict = {ref: Exported} | 1100 var local_dict = {ref: Exported} |
1084 return local_dict.ref() | 1101 return local_dict.ref() |
1089 var ext = ".vim" | 1106 var ext = ".vim" |
1090 import {exp_name} from dir .. 'Xexport' .. ext | 1107 import {exp_name} from dir .. 'Xexport' .. ext |
1091 g:imported_name = exp_name | 1108 g:imported_name = exp_name |
1092 exp_name ..= ' Doe' | 1109 exp_name ..= ' Doe' |
1093 g:imported_name_appended = exp_name | 1110 g:imported_name_appended = exp_name |
1094 g:imported_later = exported | 1111 g:exported_later = exported |
1095 | 1112 |
1096 import theList from './Xexport.vim' | 1113 import theList from './Xexport.vim' |
1097 theList->add(2) | 1114 theList->add(2) |
1098 assert_equal([1, 2], theList) | 1115 assert_equal([1, 2], theList) |
1099 END | 1116 END |
1103 | 1120 |
1104 source Ximport.vim | 1121 source Ximport.vim |
1105 | 1122 |
1106 assert_equal('bobbie', g:result) | 1123 assert_equal('bobbie', g:result) |
1107 assert_equal('bob', g:localname) | 1124 assert_equal('bob', g:localname) |
1108 assert_equal(9876, g:imported) | 1125 assert_equal(9876, g:exported1) |
1109 assert_equal(9879, g:imported_added) | 1126 assert_equal(9879, g:exported2) |
1110 assert_equal(9879, g:imported_later) | 1127 assert_equal(9879, g:exported3) |
1128 | |
1129 assert_equal(9884, g:exported_i1) | |
1130 assert_equal(9884, g:exported_i2) | |
1131 | |
1132 assert_equal(11, g:exported_s1) | |
1133 assert_equal(11, g:exported_s2) | |
1134 assert_equal(11, g:exported_later) | |
1135 | |
1111 assert_equal('Exported', g:imported_func) | 1136 assert_equal('Exported', g:imported_func) |
1112 assert_equal('Exported', g:funcref_result) | 1137 assert_equal('Exported', g:funcref_result) |
1113 assert_equal('John', g:imported_name) | 1138 assert_equal('John', g:imported_name) |
1114 assert_equal('John Doe', g:imported_name_appended) | 1139 assert_equal('John Doe', g:imported_name_appended) |
1115 assert_false(exists('g:name')) | 1140 assert_false(exists('g:name')) |
1116 | 1141 |
1117 Undo_export_script_lines() | 1142 Undo_export_script_lines() |
1118 unlet g:imported | 1143 unlet g:exported1 |
1119 unlet g:imported_added | 1144 unlet g:exported2 |
1120 unlet g:imported_later | 1145 unlet g:exported3 |
1146 unlet g:exported_i1 | |
1147 unlet g:exported_i2 | |
1148 unlet g:exported_later | |
1121 unlet g:imported_func | 1149 unlet g:imported_func |
1122 unlet g:imported_name g:imported_name_appended | 1150 unlet g:imported_name g:imported_name_appended |
1123 delete('Ximport.vim') | 1151 delete('Ximport.vim') |
1124 | 1152 |
1125 # similar, with line breaks | 1153 # similar, with line breaks |
1129 exported, | 1157 exported, |
1130 Exported, | 1158 Exported, |
1131 } | 1159 } |
1132 from | 1160 from |
1133 './Xexport.vim' | 1161 './Xexport.vim' |
1134 g:imported = exported | 1162 g:exported = exported |
1135 exported += 5 | 1163 exported += 7 |
1136 g:imported_added = exported | 1164 g:exported_added = exported |
1137 g:imported_func = Exported() | 1165 g:imported_func = Exported() |
1138 END | 1166 END |
1139 writefile(import_line_break_script_lines, 'Ximport_lbr.vim') | 1167 writefile(import_line_break_script_lines, 'Ximport_lbr.vim') |
1140 source Ximport_lbr.vim | 1168 source Ximport_lbr.vim |
1141 | 1169 |
1142 assert_equal(9876, g:imported) | 1170 assert_equal(11, g:exported) |
1143 assert_equal(9881, g:imported_added) | 1171 assert_equal(18, g:exported_added) |
1144 assert_equal('Exported', g:imported_func) | 1172 assert_equal('Exported', g:imported_func) |
1145 | 1173 |
1146 # exported script not sourced again | 1174 # exported script not sourced again |
1147 assert_false(exists('g:result')) | 1175 assert_false(exists('g:result')) |
1148 unlet g:imported | 1176 unlet g:exported |
1149 unlet g:imported_added | 1177 unlet g:exported_added |
1150 unlet g:imported_func | 1178 unlet g:imported_func |
1151 delete('Ximport_lbr.vim') | 1179 delete('Ximport_lbr.vim') |
1152 | 1180 |
1153 var import_star_as_lines =<< trim END | 1181 var import_star_as_lines =<< trim END |
1154 vim9script | 1182 vim9script |
1155 import * as Export from './Xexport.vim' | 1183 import * as Export from './Xexport.vim' |
1156 def UseExport() | 1184 def UseExport() |
1157 g:imported_def = Export.exported | 1185 g:exported_def = Export.exported |
1158 enddef | 1186 enddef |
1159 g:imported_script = Export.exported | 1187 g:exported_script = Export.exported |
1160 assert_equal(1, exists('Export.exported')) | 1188 assert_equal(1, exists('Export.exported')) |
1161 assert_equal(0, exists('Export.notexported')) | 1189 assert_equal(0, exists('Export.notexported')) |
1162 UseExport() | 1190 UseExport() |
1163 END | 1191 END |
1164 writefile(import_star_as_lines, 'Ximport.vim') | 1192 writefile(import_star_as_lines, 'Ximport.vim') |
1165 source Ximport.vim | 1193 source Ximport.vim |
1166 # FIXME: this should be 9881 | 1194 |
1167 assert_equal(9876, g:imported_def) | 1195 assert_equal(18, g:exported_def) |
1168 assert_equal(9876, g:imported_script) | 1196 assert_equal(18, g:exported_script) |
1197 unlet g:exported_def | |
1198 unlet g:exported_script | |
1169 | 1199 |
1170 var import_star_as_lines_no_dot =<< trim END | 1200 var import_star_as_lines_no_dot =<< trim END |
1171 vim9script | 1201 vim9script |
1172 import * as Export from './Xexport.vim' | 1202 import * as Export from './Xexport.vim' |
1173 def Func() | 1203 def Func() |
1232 import * | 1262 import * |
1233 as Export | 1263 as Export |
1234 from | 1264 from |
1235 './Xexport.vim' | 1265 './Xexport.vim' |
1236 def UseExport() | 1266 def UseExport() |
1237 g:imported = Export.exported | 1267 g:exported = Export.exported |
1238 enddef | 1268 enddef |
1239 UseExport() | 1269 UseExport() |
1240 END | 1270 END |
1241 writefile(import_star_as_lbr_lines, 'Ximport.vim') | 1271 writefile(import_star_as_lbr_lines, 'Ximport.vim') |
1242 source Ximport.vim | 1272 source Ximport.vim |
1243 assert_equal(9876, g:imported) | 1273 assert_equal(18, g:exported) |
1274 unlet g:exported | |
1244 | 1275 |
1245 var import_star_lines =<< trim END | 1276 var import_star_lines =<< trim END |
1246 vim9script | 1277 vim9script |
1247 import * from './Xexport.vim' | 1278 import * from './Xexport.vim' |
1248 END | 1279 END |