mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 02:36:35 +00:00
Berry added introspect.set()
for class attributes (#20339)
This commit is contained in:
parent
1f662a6dad
commit
6a8435b731
@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file.
|
||||
- Display of active drivers using command ``status 4``
|
||||
- ESP32 used UART information
|
||||
- HASPmota added `haspmota.page_show()` to change page
|
||||
- Berry added `introspect.set()` for class attributes
|
||||
|
||||
### Breaking Changed
|
||||
- Refactoring of Berry `animate` module for WS2812 Leds (#20236)
|
||||
|
@ -643,6 +643,10 @@ BERRY_API bbool be_setmember(bvm *vm, int index, const char *k)
|
||||
bstring *key = be_newstr(vm, k);
|
||||
bmodule *mod = var_toobj(o);
|
||||
return be_module_setmember(vm, mod, key, v);
|
||||
} else if (var_isclass(o)) {
|
||||
bstring *key = be_newstr(vm, k);
|
||||
bclass *cl = var_toobj(o);
|
||||
return be_class_setmember(vm, cl, key, v);
|
||||
}
|
||||
return bfalse;
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ static int m_findmember(bvm *vm)
|
||||
static int m_setmember(bvm *vm)
|
||||
{
|
||||
int top = be_top(vm);
|
||||
if (top >= 3 && (be_isinstance(vm, 1) || be_ismodule(vm, 1)) && be_isstring(vm, 2)) {
|
||||
if (top >= 3 && (be_isinstance(vm, 1) || be_ismodule(vm, 1) || be_isclass(vm, 1)) && be_isstring(vm, 2)) {
|
||||
be_setmember(vm, 1, be_tostring(vm, 2));
|
||||
be_return(vm);
|
||||
}
|
||||
|
@ -42,3 +42,25 @@ assert(introspect.name(A) == 'A')
|
||||
assert(introspect.name(A.a) == 'a')
|
||||
assert(introspect.name(A.b) == 'b')
|
||||
assert(introspect.name(A.c) == nil)
|
||||
|
||||
# test introspect get and set
|
||||
# class and instance
|
||||
class A
|
||||
static var a
|
||||
var b
|
||||
end
|
||||
|
||||
a = A()
|
||||
introspect.set(A, "a", 10)
|
||||
assert(A.a == 10)
|
||||
assert(introspect.get(A, "a") == 10)
|
||||
|
||||
introspect.set(a, "b", 20)
|
||||
assert(a.b == 20)
|
||||
assert(introspect.get(a, "b") == 20)
|
||||
|
||||
# module
|
||||
m = module('m')
|
||||
introspect.set(m, 'c', 30)
|
||||
assert(m.c == 30)
|
||||
assert(introspect.get(m, 'c') == 30)
|
||||
|
Loading…
x
Reference in New Issue
Block a user