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