mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 03:36:42 +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``
|
- Display of active drivers using command ``status 4``
|
||||||
- ESP32 used UART information
|
- ESP32 used UART information
|
||||||
- HASPmota added `haspmota.page_show()` to change page
|
- HASPmota added `haspmota.page_show()` to change page
|
||||||
|
- Berry added `introspect.set()` for class attributes
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
- Refactoring of Berry `animate` module for WS2812 Leds (#20236)
|
- 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);
|
bstring *key = be_newstr(vm, k);
|
||||||
bmodule *mod = var_toobj(o);
|
bmodule *mod = var_toobj(o);
|
||||||
return be_module_setmember(vm, mod, key, v);
|
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;
|
return bfalse;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ static int m_findmember(bvm *vm)
|
|||||||
static int m_setmember(bvm *vm)
|
static int m_setmember(bvm *vm)
|
||||||
{
|
{
|
||||||
int top = be_top(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_setmember(vm, 1, be_tostring(vm, 2));
|
||||||
be_return(vm);
|
be_return(vm);
|
||||||
}
|
}
|
||||||
|
@ -42,3 +42,25 @@ assert(introspect.name(A) == 'A')
|
|||||||
assert(introspect.name(A.a) == 'a')
|
assert(introspect.name(A.a) == 'a')
|
||||||
assert(introspect.name(A.b) == 'b')
|
assert(introspect.name(A.b) == 'b')
|
||||||
assert(introspect.name(A.c) == nil)
|
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