|
1 |
| -use std::ffi::CStr; |
2 | 1 | use std::os::raw::{c_int, c_void};
|
3 | 2 | use std::{ptr, str};
|
4 | 3 |
|
@@ -222,50 +221,47 @@ unsafe fn init_userdata_metatable_index(state: *mut ffi::lua_State) -> Result<()
|
222 | 221 | ffi::lua_pop(state, 1);
|
223 | 222 |
|
224 | 223 | // Create and cache `__index` generator
|
225 |
| - let code = cstr!( |
226 |
| - r#" |
227 |
| - local error, isfunction, istable = ... |
228 |
| - return function (__index, field_getters, methods) |
229 |
| - -- Common case: has field getters and index is a table |
230 |
| - if field_getters ~= nil and methods == nil and istable(__index) then |
231 |
| - return function (self, key) |
232 |
| - local field_getter = field_getters[key] |
233 |
| - if field_getter ~= nil then |
234 |
| - return field_getter(self) |
235 |
| - end |
236 |
| - return __index[key] |
| 224 | + let code = cr#" |
| 225 | + local error, isfunction, istable = ... |
| 226 | + return function (__index, field_getters, methods) |
| 227 | + -- Common case: has field getters and index is a table |
| 228 | + if field_getters ~= nil and methods == nil and istable(__index) then |
| 229 | + return function (self, key) |
| 230 | + local field_getter = field_getters[key] |
| 231 | + if field_getter ~= nil then |
| 232 | + return field_getter(self) |
237 | 233 | end
|
| 234 | + return __index[key] |
238 | 235 | end
|
| 236 | + end |
239 | 237 |
|
240 |
| - return function (self, key) |
241 |
| - if field_getters ~= nil then |
242 |
| - local field_getter = field_getters[key] |
243 |
| - if field_getter ~= nil then |
244 |
| - return field_getter(self) |
245 |
| - end |
| 238 | + return function (self, key) |
| 239 | + if field_getters ~= nil then |
| 240 | + local field_getter = field_getters[key] |
| 241 | + if field_getter ~= nil then |
| 242 | + return field_getter(self) |
246 | 243 | end
|
| 244 | + end |
247 | 245 |
|
248 |
| - if methods ~= nil then |
249 |
| - local method = methods[key] |
250 |
| - if method ~= nil then |
251 |
| - return method |
252 |
| - end |
| 246 | + if methods ~= nil then |
| 247 | + local method = methods[key] |
| 248 | + if method ~= nil then |
| 249 | + return method |
253 | 250 | end
|
| 251 | + end |
254 | 252 |
|
255 |
| - if isfunction(__index) then |
256 |
| - return __index(self, key) |
257 |
| - elseif __index == nil then |
258 |
| - error("attempt to get an unknown field '"..key.."'") |
259 |
| - else |
260 |
| - return __index[key] |
261 |
| - end |
| 253 | + if isfunction(__index) then |
| 254 | + return __index(self, key) |
| 255 | + elseif __index == nil then |
| 256 | + error("attempt to get an unknown field '"..key.."'") |
| 257 | + else |
| 258 | + return __index[key] |
262 | 259 | end
|
263 | 260 | end
|
264 |
| - "# |
265 |
| - ); |
266 |
| - let code_len = CStr::from_ptr(code).to_bytes().len(); |
| 261 | + end |
| 262 | + "#; |
267 | 263 | protect_lua!(state, 0, 1, |state| {
|
268 |
| - let ret = ffi::luaL_loadbuffer(state, code, code_len, cstr!("__mlua_index")); |
| 264 | + let ret = ffi::luaL_loadbuffer(state, code.as_ptr(), code.count_bytes(), cstr!("__mlua_index")); |
269 | 265 | if ret != ffi::LUA_OK {
|
270 | 266 | ffi::lua_error(state);
|
271 | 267 | }
|
@@ -293,33 +289,30 @@ unsafe fn init_userdata_metatable_newindex(state: *mut ffi::lua_State) -> Result
|
293 | 289 | ffi::lua_pop(state, 1);
|
294 | 290 |
|
295 | 291 | // Create and cache `__newindex` generator
|
296 |
| - let code = cstr!( |
297 |
| - r#" |
298 |
| - local error, isfunction = ... |
299 |
| - return function (__newindex, field_setters) |
300 |
| - return function (self, key, value) |
301 |
| - if field_setters ~= nil then |
302 |
| - local field_setter = field_setters[key] |
303 |
| - if field_setter ~= nil then |
304 |
| - field_setter(self, value) |
305 |
| - return |
306 |
| - end |
| 292 | + let code = cr#" |
| 293 | + local error, isfunction = ... |
| 294 | + return function (__newindex, field_setters) |
| 295 | + return function (self, key, value) |
| 296 | + if field_setters ~= nil then |
| 297 | + local field_setter = field_setters[key] |
| 298 | + if field_setter ~= nil then |
| 299 | + field_setter(self, value) |
| 300 | + return |
307 | 301 | end
|
| 302 | + end |
308 | 303 |
|
309 |
| - if isfunction(__newindex) then |
310 |
| - __newindex(self, key, value) |
311 |
| - elseif __newindex == nil then |
312 |
| - error("attempt to set an unknown field '"..key.."'") |
313 |
| - else |
314 |
| - __newindex[key] = value |
315 |
| - end |
| 304 | + if isfunction(__newindex) then |
| 305 | + __newindex(self, key, value) |
| 306 | + elseif __newindex == nil then |
| 307 | + error("attempt to set an unknown field '"..key.."'") |
| 308 | + else |
| 309 | + __newindex[key] = value |
316 | 310 | end
|
317 | 311 | end
|
318 |
| - "# |
319 |
| - ); |
320 |
| - let code_len = CStr::from_ptr(code).to_bytes().len(); |
| 312 | + end |
| 313 | + "#; |
321 | 314 | protect_lua!(state, 0, 1, |state| {
|
322 |
| - let ret = ffi::luaL_loadbuffer(state, code, code_len, cstr!("__mlua_newindex")); |
| 315 | + let ret = ffi::luaL_loadbuffer(state, code.as_ptr(), code.count_bytes(), cstr!("__mlua_newindex")); |
323 | 316 | if ret != ffi::LUA_OK {
|
324 | 317 | ffi::lua_error(state);
|
325 | 318 | }
|
|
0 commit comments