Merge pull request #13297 from s-hadinger/berry_frugal

Berry reduce pressure on gc
This commit is contained in:
s-hadinger 2021-10-07 22:02:27 +02:00 committed by GitHub
commit 9b329a031a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 274 additions and 278 deletions

View File

@ -423,7 +423,7 @@ be_local_closure(find_key_i, /* name */
********************************************************************/ ********************************************************************/
be_local_closure(chars_in_string, /* name */ be_local_closure(chars_in_string, /* name */
be_nested_proto( be_nested_proto(
12, /* nstack */ 10, /* nstack */
4, /* argc */ 4, /* argc */
0, /* varg */ 0, /* varg */
0, /* has upvals */ 0, /* has upvals */
@ -431,58 +431,44 @@ be_local_closure(chars_in_string, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[ 3]) { /* constants */ ( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_const_int(0), /* K0 */ be_const_int(0),
/* K1 */ be_const_int(1), /* K1 */ be_const_int(1),
/* K2 */ be_nested_string("stop_iteration", -121173395, 14),
}), }),
(be_nested_const_str("chars_in_string", -1146182164, 15)), (be_nested_const_str("chars_in_string", -1146182164, 15)),
(be_nested_const_str("Tasmota.be", 825809411, 10)), (be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[44]) { /* code */ ( &(const binstruction[31]) { /* code */
0x780E0001, // 0000 JMPF R3 #0003 0x780E0001, // 0000 JMPF R3 #0003
0x50100200, // 0001 LDBOOL R4 1 0 0x50100200, // 0001 LDBOOL R4 1 0
0x70020000, // 0002 JMP #0004 0x70020000, // 0002 JMP #0004
0x50100000, // 0003 LDBOOL R4 0 0 0x50100000, // 0003 LDBOOL R4 0 0
0x60140010, // 0004 GETGBL R5 G16 0x58140000, // 0004 LDCONST R5 K0
0x6018000C, // 0005 GETGBL R6 G12 0x6018000C, // 0005 GETGBL R6 G12
0x5C1C0200, // 0006 MOVE R7 R1 0x5C1C0200, // 0006 MOVE R7 R1
0x7C180200, // 0007 CALL R6 1 0x7C180200, // 0007 CALL R6 1
0x04180D01, // 0008 SUB R6 R6 K1 0x14180A06, // 0008 LT R6 R5 R6
0x401A0006, // 0009 CONNECT R6 K0 R6 0x781A0012, // 0009 JMPF R6 #001D
0x7C140200, // 000A CALL R5 1 0x50180000, // 000A LDBOOL R6 0 0
0xA802001A, // 000B EXBLK 0 #0027 0x581C0000, // 000B LDCONST R7 K0
0x5C180A00, // 000C MOVE R6 R5 0x6020000C, // 000C GETGBL R8 G12
0x7C180000, // 000D CALL R6 0 0x5C240400, // 000D MOVE R9 R2
0x501C0000, // 000E LDBOOL R7 0 0 0x7C200200, // 000E CALL R8 1
0x60200010, // 000F GETGBL R8 G16 0x14200E08, // 000F LT R8 R7 R8
0x6024000C, // 0010 GETGBL R9 G12 0x78220006, // 0010 JMPF R8 #0018
0x5C280400, // 0011 MOVE R10 R2 0x94200205, // 0011 GETIDX R8 R1 R5
0x7C240200, // 0012 CALL R9 1 0x94240407, // 0012 GETIDX R9 R2 R7
0x04241301, // 0013 SUB R9 R9 K1 0x1C201009, // 0013 EQ R8 R8 R9
0x40260009, // 0014 CONNECT R9 K0 R9 0x78220000, // 0014 JMPF R8 #0016
0x7C200200, // 0015 CALL R8 1 0x50180200, // 0015 LDBOOL R6 1 0
0xA8020007, // 0016 EXBLK 0 #001F 0x001C0F01, // 0016 ADD R7 R7 K1
0x5C241000, // 0017 MOVE R9 R8 0x7001FFF3, // 0017 JMP #000C
0x7C240000, // 0018 CALL R9 0 0x20200806, // 0018 NE R8 R4 R6
0x94280206, // 0019 GETIDX R10 R1 R6 0x78220000, // 0019 JMPF R8 #001B
0x942C0409, // 001A GETIDX R11 R2 R9 0x80040A00, // 001A RET 1 R5
0x1C28140B, // 001B EQ R10 R10 R11 0x00140B01, // 001B ADD R5 R5 K1
0x782A0000, // 001C JMPF R10 #001E 0x7001FFE7, // 001C JMP #0005
0x501C0200, // 001D LDBOOL R7 1 0 0x5419FFFE, // 001D LDINT R6 -1
0x7001FFF7, // 001E JMP #0017 0x80040C00, // 001E RET 1 R6
0x58200002, // 001F LDCONST R8 K2
0xAC200200, // 0020 CATCH R8 1 0
0xB0080000, // 0021 RAISE 2 R0 R0
0x20200807, // 0022 NE R8 R4 R7
0x78220001, // 0023 JMPF R8 #0026
0xA8040001, // 0024 EXBLK 1 1
0x80040C00, // 0025 RET 1 R6
0x7001FFE4, // 0026 JMP #000C
0x58140002, // 0027 LDCONST R5 K2
0xAC140200, // 0028 CATCH R5 1 0
0xB0080000, // 0029 RAISE 2 R0 R0
0x5415FFFE, // 002A LDINT R5 -1
0x80040A00, // 002B RET 1 R5
}) })
) )
); );
@ -1147,7 +1133,7 @@ be_local_closure(remove_driver, /* name */
********************************************************************/ ********************************************************************/
be_local_closure(try_rule, /* name */ be_local_closure(try_rule, /* name */
be_nested_proto( be_nested_proto(
14, /* nstack */ 15, /* nstack */
4, /* argc */ 4, /* argc */
0, /* varg */ 0, /* varg */
0, /* has upvals */ 0, /* has upvals */
@ -1155,28 +1141,27 @@ be_local_closure(try_rule, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[17]) { /* constants */ ( &(const bvalue[16]) { /* constants */
/* K0 */ be_nested_string("string", 398550328, 6), /* K0 */ be_nested_string("string", 398550328, 6),
/* K1 */ be_nested_string("find_op", -528253920, 7), /* K1 */ be_nested_string("find_op", -528253920, 7),
/* K2 */ be_nested_string("split", -2017972765, 5), /* K2 */ be_nested_string("split", -2017972765, 5),
/* K3 */ be_const_int(0), /* K3 */ be_const_int(0),
/* K4 */ be_nested_string("#", 638357778, 1), /* K4 */ be_nested_string("#", 638357778, 1),
/* K5 */ be_nested_string("find_key_i", 850136726, 10), /* K5 */ be_nested_string("find_key_i", 850136726, 10),
/* K6 */ be_nested_string("stop_iteration", -121173395, 14), /* K6 */ be_const_int(1),
/* K7 */ be_const_int(1), /* K7 */ be_const_int(2),
/* K8 */ be_const_int(2), /* K8 */ be_nested_string("==", -1863000881, 2),
/* K9 */ be_nested_string("==", -1863000881, 2), /* K9 */ be_nested_string("!==", 559817114, 3),
/* K10 */ be_nested_string("!==", 559817114, 3), /* K10 */ be_nested_string("=", 940354920, 1),
/* K11 */ be_nested_string("=", 940354920, 1), /* K11 */ be_nested_string("!=", -1866252285, 2),
/* K12 */ be_nested_string("!=", -1866252285, 2), /* K12 */ be_nested_string(">", 990687777, 1),
/* K13 */ be_nested_string(">", 990687777, 1), /* K13 */ be_nested_string(">=", 284975636, 2),
/* K14 */ be_nested_string(">=", 284975636, 2), /* K14 */ be_nested_string("<", 957132539, 1),
/* K15 */ be_nested_string("<", 957132539, 1), /* K15 */ be_nested_string("<=", -1795743310, 2),
/* K16 */ be_nested_string("<=", -1795743310, 2),
}), }),
(be_nested_const_str("try_rule", 1986449405, 8)), (be_nested_const_str("try_rule", 1986449405, 8)),
(be_nested_const_str("Tasmota.be", 825809411, 10)), (be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[143]) { /* code */ ( &(const binstruction[141]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0 0xA4120000, // 0000 IMPORT R4 K0
0x8C140101, // 0001 GETMET R5 R0 K1 0x8C140101, // 0001 GETMET R5 R0 K1
0x5C1C0400, // 0002 MOVE R7 R2 0x5C1C0400, // 0002 MOVE R7 R2
@ -1186,140 +1171,138 @@ be_local_closure(try_rule, /* name */
0x94240B03, // 0006 GETIDX R9 R5 K3 0x94240B03, // 0006 GETIDX R9 R5 K3
0x58280004, // 0007 LDCONST R10 K4 0x58280004, // 0007 LDCONST R10 K4
0x7C1C0600, // 0008 CALL R7 3 0x7C1C0600, // 0008 CALL R7 3
0x60200010, // 0009 GETGBL R8 G16 0x58200003, // 0009 LDCONST R8 K3
0x5C240E00, // 000A MOVE R9 R7 0x6024000C, // 000A GETGBL R9 G12
0x7C200200, // 000B CALL R8 1 0x5C280E00, // 000B MOVE R10 R7
0xA802000D, // 000C EXBLK 0 #001B 0x7C240200, // 000C CALL R9 1
0x5C241000, // 000D MOVE R9 R8 0x14241009, // 000D LT R9 R8 R9
0x7C240000, // 000E CALL R9 0 0x7826000C, // 000E JMPF R9 #001C
0x8C280105, // 000F GETMET R10 R0 K5 0x94240E08, // 000F GETIDX R9 R7 R8
0x5C300C00, // 0010 MOVE R12 R6 0x8C280105, // 0010 GETMET R10 R0 K5
0x5C341200, // 0011 MOVE R13 R9 0x5C300C00, // 0011 MOVE R12 R6
0x7C280600, // 0012 CALL R10 3 0x5C341200, // 0012 MOVE R13 R9
0x4C2C0000, // 0013 LDNIL R11 0x7C280600, // 0013 CALL R10 3
0x1C2C140B, // 0014 EQ R11 R10 R11 0x4C2C0000, // 0014 LDNIL R11
0x782E0002, // 0015 JMPF R11 #0019 0x1C2C140B, // 0015 EQ R11 R10 R11
0x502C0000, // 0016 LDBOOL R11 0 0 0x782E0001, // 0016 JMPF R11 #0019
0xA8040001, // 0017 EXBLK 1 1 0x502C0000, // 0017 LDBOOL R11 0 0
0x80041600, // 0018 RET 1 R11 0x80041600, // 0018 RET 1 R11
0x94180C0A, // 0019 GETIDX R6 R6 R10 0x94180C0A, // 0019 GETIDX R6 R6 R10
0x7001FFF1, // 001A JMP #000D 0x00201106, // 001A ADD R8 R8 K6
0x58200006, // 001B LDCONST R8 K6 0x7001FFED, // 001B JMP #000A
0xAC200200, // 001C CATCH R8 1 0 0x94240B06, // 001C GETIDX R9 R5 K6
0xB0080000, // 001D RAISE 2 R0 R0 0x94280B07, // 001D GETIDX R10 R5 K7
0x94200B07, // 001E GETIDX R8 R5 K7 0x78260066, // 001E JMPF R9 #0086
0x94240B08, // 001F GETIDX R9 R5 K8 0x1C2C1308, // 001F EQ R11 R9 K8
0x78220066, // 0020 JMPF R8 #0088 0x782E000A, // 0020 JMPF R11 #002C
0x1C281109, // 0021 EQ R10 R8 K9 0x602C0008, // 0021 GETGBL R11 G8
0x782A000A, // 0022 JMPF R10 #002E 0x5C300C00, // 0022 MOVE R12 R6
0x60280008, // 0023 GETGBL R10 G8 0x7C2C0200, // 0023 CALL R11 1
0x5C2C0C00, // 0024 MOVE R11 R6 0x60300008, // 0024 GETGBL R12 G8
0x7C280200, // 0025 CALL R10 1 0x5C341400, // 0025 MOVE R13 R10
0x602C0008, // 0026 GETGBL R11 G8 0x7C300200, // 0026 CALL R12 1
0x5C301200, // 0027 MOVE R12 R9 0x202C160C, // 0027 NE R11 R11 R12
0x7C2C0200, // 0028 CALL R11 1 0x782E0001, // 0028 JMPF R11 #002B
0x2028140B, // 0029 NE R10 R10 R11 0x502C0000, // 0029 LDBOOL R11 0 0
0x782A0001, // 002A JMPF R10 #002D 0x80041600, // 002A RET 1 R11
0x50280000, // 002B LDBOOL R10 0 0 0x70020059, // 002B JMP #0086
0x80041400, // 002C RET 1 R10 0x1C2C1309, // 002C EQ R11 R9 K9
0x70020059, // 002D JMP #0088 0x782E000A, // 002D JMPF R11 #0039
0x1C28110A, // 002E EQ R10 R8 K10 0x602C0008, // 002E GETGBL R11 G8
0x782A000A, // 002F JMPF R10 #003B 0x5C300C00, // 002F MOVE R12 R6
0x60280008, // 0030 GETGBL R10 G8 0x7C2C0200, // 0030 CALL R11 1
0x5C2C0C00, // 0031 MOVE R11 R6 0x60300008, // 0031 GETGBL R12 G8
0x7C280200, // 0032 CALL R10 1 0x5C341400, // 0032 MOVE R13 R10
0x602C0008, // 0033 GETGBL R11 G8 0x7C300200, // 0033 CALL R12 1
0x5C301200, // 0034 MOVE R12 R9 0x1C2C160C, // 0034 EQ R11 R11 R12
0x7C2C0200, // 0035 CALL R11 1 0x782E0001, // 0035 JMPF R11 #0038
0x1C28140B, // 0036 EQ R10 R10 R11 0x502C0000, // 0036 LDBOOL R11 0 0
0x782A0001, // 0037 JMPF R10 #003A 0x80041600, // 0037 RET 1 R11
0x50280000, // 0038 LDBOOL R10 0 0 0x7002004C, // 0038 JMP #0086
0x80041400, // 0039 RET 1 R10 0x1C2C130A, // 0039 EQ R11 R9 K10
0x7002004C, // 003A JMP #0088 0x782E000A, // 003A JMPF R11 #0046
0x1C28110B, // 003B EQ R10 R8 K11 0x602C000A, // 003B GETGBL R11 G10
0x782A000A, // 003C JMPF R10 #0048 0x5C300C00, // 003C MOVE R12 R6
0x6028000A, // 003D GETGBL R10 G10 0x7C2C0200, // 003D CALL R11 1
0x5C2C0C00, // 003E MOVE R11 R6 0x6030000A, // 003E GETGBL R12 G10
0x7C280200, // 003F CALL R10 1 0x5C341400, // 003F MOVE R13 R10
0x602C000A, // 0040 GETGBL R11 G10 0x7C300200, // 0040 CALL R12 1
0x5C301200, // 0041 MOVE R12 R9 0x202C160C, // 0041 NE R11 R11 R12
0x7C2C0200, // 0042 CALL R11 1 0x782E0001, // 0042 JMPF R11 #0045
0x2028140B, // 0043 NE R10 R10 R11 0x502C0000, // 0043 LDBOOL R11 0 0
0x782A0001, // 0044 JMPF R10 #0047 0x80041600, // 0044 RET 1 R11
0x50280000, // 0045 LDBOOL R10 0 0 0x7002003F, // 0045 JMP #0086
0x80041400, // 0046 RET 1 R10 0x1C2C130B, // 0046 EQ R11 R9 K11
0x7002003F, // 0047 JMP #0088 0x782E000A, // 0047 JMPF R11 #0053
0x1C28110C, // 0048 EQ R10 R8 K12 0x602C000A, // 0048 GETGBL R11 G10
0x782A000A, // 0049 JMPF R10 #0055 0x5C300C00, // 0049 MOVE R12 R6
0x6028000A, // 004A GETGBL R10 G10 0x7C2C0200, // 004A CALL R11 1
0x5C2C0C00, // 004B MOVE R11 R6 0x6030000A, // 004B GETGBL R12 G10
0x7C280200, // 004C CALL R10 1 0x5C341400, // 004C MOVE R13 R10
0x602C000A, // 004D GETGBL R11 G10 0x7C300200, // 004D CALL R12 1
0x5C301200, // 004E MOVE R12 R9 0x1C2C160C, // 004E EQ R11 R11 R12
0x7C2C0200, // 004F CALL R11 1 0x782E0001, // 004F JMPF R11 #0052
0x1C28140B, // 0050 EQ R10 R10 R11 0x502C0000, // 0050 LDBOOL R11 0 0
0x782A0001, // 0051 JMPF R10 #0054 0x80041600, // 0051 RET 1 R11
0x50280000, // 0052 LDBOOL R10 0 0 0x70020032, // 0052 JMP #0086
0x80041400, // 0053 RET 1 R10 0x1C2C130C, // 0053 EQ R11 R9 K12
0x70020032, // 0054 JMP #0088 0x782E000A, // 0054 JMPF R11 #0060
0x1C28110D, // 0055 EQ R10 R8 K13 0x602C000A, // 0055 GETGBL R11 G10
0x782A000A, // 0056 JMPF R10 #0062 0x5C300C00, // 0056 MOVE R12 R6
0x6028000A, // 0057 GETGBL R10 G10 0x7C2C0200, // 0057 CALL R11 1
0x5C2C0C00, // 0058 MOVE R11 R6 0x6030000A, // 0058 GETGBL R12 G10
0x7C280200, // 0059 CALL R10 1 0x5C341400, // 0059 MOVE R13 R10
0x602C000A, // 005A GETGBL R11 G10 0x7C300200, // 005A CALL R12 1
0x5C301200, // 005B MOVE R12 R9 0x182C160C, // 005B LE R11 R11 R12
0x7C2C0200, // 005C CALL R11 1 0x782E0001, // 005C JMPF R11 #005F
0x1828140B, // 005D LE R10 R10 R11 0x502C0000, // 005D LDBOOL R11 0 0
0x782A0001, // 005E JMPF R10 #0061 0x80041600, // 005E RET 1 R11
0x50280000, // 005F LDBOOL R10 0 0 0x70020025, // 005F JMP #0086
0x80041400, // 0060 RET 1 R10 0x1C2C130D, // 0060 EQ R11 R9 K13
0x70020025, // 0061 JMP #0088 0x782E000A, // 0061 JMPF R11 #006D
0x1C28110E, // 0062 EQ R10 R8 K14 0x602C000A, // 0062 GETGBL R11 G10
0x782A000A, // 0063 JMPF R10 #006F 0x5C300C00, // 0063 MOVE R12 R6
0x6028000A, // 0064 GETGBL R10 G10 0x7C2C0200, // 0064 CALL R11 1
0x5C2C0C00, // 0065 MOVE R11 R6 0x6030000A, // 0065 GETGBL R12 G10
0x7C280200, // 0066 CALL R10 1 0x5C341400, // 0066 MOVE R13 R10
0x602C000A, // 0067 GETGBL R11 G10 0x7C300200, // 0067 CALL R12 1
0x5C301200, // 0068 MOVE R12 R9 0x142C160C, // 0068 LT R11 R11 R12
0x7C2C0200, // 0069 CALL R11 1 0x782E0001, // 0069 JMPF R11 #006C
0x1428140B, // 006A LT R10 R10 R11 0x502C0000, // 006A LDBOOL R11 0 0
0x782A0001, // 006B JMPF R10 #006E 0x80041600, // 006B RET 1 R11
0x50280000, // 006C LDBOOL R10 0 0 0x70020018, // 006C JMP #0086
0x80041400, // 006D RET 1 R10 0x1C2C130E, // 006D EQ R11 R9 K14
0x70020018, // 006E JMP #0088 0x782E000A, // 006E JMPF R11 #007A
0x1C28110F, // 006F EQ R10 R8 K15 0x602C000A, // 006F GETGBL R11 G10
0x782A000A, // 0070 JMPF R10 #007C 0x5C300C00, // 0070 MOVE R12 R6
0x6028000A, // 0071 GETGBL R10 G10 0x7C2C0200, // 0071 CALL R11 1
0x5C2C0C00, // 0072 MOVE R11 R6 0x6030000A, // 0072 GETGBL R12 G10
0x7C280200, // 0073 CALL R10 1 0x5C341400, // 0073 MOVE R13 R10
0x602C000A, // 0074 GETGBL R11 G10 0x7C300200, // 0074 CALL R12 1
0x5C301200, // 0075 MOVE R12 R9 0x282C160C, // 0075 GE R11 R11 R12
0x7C2C0200, // 0076 CALL R11 1 0x782E0001, // 0076 JMPF R11 #0079
0x2828140B, // 0077 GE R10 R10 R11 0x502C0000, // 0077 LDBOOL R11 0 0
0x782A0001, // 0078 JMPF R10 #007B 0x80041600, // 0078 RET 1 R11
0x50280000, // 0079 LDBOOL R10 0 0 0x7002000B, // 0079 JMP #0086
0x80041400, // 007A RET 1 R10 0x1C2C130F, // 007A EQ R11 R9 K15
0x7002000B, // 007B JMP #0088 0x782E0009, // 007B JMPF R11 #0086
0x1C281110, // 007C EQ R10 R8 K16 0x602C000A, // 007C GETGBL R11 G10
0x782A0009, // 007D JMPF R10 #0088 0x5C300C00, // 007D MOVE R12 R6
0x6028000A, // 007E GETGBL R10 G10 0x7C2C0200, // 007E CALL R11 1
0x5C2C0C00, // 007F MOVE R11 R6 0x6030000A, // 007F GETGBL R12 G10
0x7C280200, // 0080 CALL R10 1 0x5C341400, // 0080 MOVE R13 R10
0x602C000A, // 0081 GETGBL R11 G10 0x7C300200, // 0081 CALL R12 1
0x5C301200, // 0082 MOVE R12 R9 0x242C160C, // 0082 GT R11 R11 R12
0x7C2C0200, // 0083 CALL R11 1 0x782E0001, // 0083 JMPF R11 #0086
0x2428140B, // 0084 GT R10 R10 R11 0x502C0000, // 0084 LDBOOL R11 0 0
0x782A0001, // 0085 JMPF R10 #0088 0x80041600, // 0085 RET 1 R11
0x50280000, // 0086 LDBOOL R10 0 0 0x5C2C0600, // 0086 MOVE R11 R3
0x80041400, // 0087 RET 1 R10 0x5C300C00, // 0087 MOVE R12 R6
0x5C280600, // 0088 MOVE R10 R3 0x94340B03, // 0088 GETIDX R13 R5 K3
0x5C2C0C00, // 0089 MOVE R11 R6 0x5C380200, // 0089 MOVE R14 R1
0x94300B03, // 008A GETIDX R12 R5 K3 0x7C2C0600, // 008A CALL R11 3
0x5C340200, // 008B MOVE R13 R1 0x502C0200, // 008B LDBOOL R11 1 0
0x7C280600, // 008C CALL R10 3 0x80041600, // 008C RET 1 R11
0x50280200, // 008D LDBOOL R10 1 0
0x80041400, // 008E RET 1 R10
}) })
) )
); );
@ -1419,7 +1402,7 @@ be_local_closure(event, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[18]) { /* constants */ ( &(const bvalue[19]) { /* constants */
/* K0 */ be_nested_string("introspect", 164638290, 10), /* K0 */ be_nested_string("introspect", 164638290, 10),
/* K1 */ be_nested_string("every_50ms", -1911083288, 10), /* K1 */ be_nested_string("every_50ms", -1911083288, 10),
/* K2 */ be_nested_string("run_deferred", 371594696, 12), /* K2 */ be_nested_string("run_deferred", 371594696, 12),
@ -1429,19 +1412,20 @@ be_local_closure(event, /* name */
/* K6 */ be_nested_string("exec_rules", 1445221092, 10), /* K6 */ be_nested_string("exec_rules", 1445221092, 10),
/* K7 */ be_nested_string("gc", 1042313471, 2), /* K7 */ be_nested_string("gc", 1042313471, 2),
/* K8 */ be_nested_string("_drivers", -1034638311, 8), /* K8 */ be_nested_string("_drivers", -1034638311, 8),
/* K9 */ be_nested_string("get", 1410115415, 3), /* K9 */ be_const_int(0),
/* K10 */ be_nested_string("function", -1630125495, 8), /* K10 */ be_nested_string("get", 1410115415, 3),
/* K11 */ be_nested_string("string", 398550328, 6), /* K11 */ be_nested_string("function", -1630125495, 8),
/* K12 */ be_nested_string("format", -1180859054, 6), /* K12 */ be_nested_string("string", 398550328, 6),
/* K13 */ be_nested_string("BRY: Exception> '%s' - %s", -2047976332, 25), /* K13 */ be_nested_string("format", -1180859054, 6),
/* K14 */ be_nested_string("stop_iteration", -121173395, 14), /* K14 */ be_nested_string("BRY: Exception> '%s' - %s", -2047976332, 25),
/* K15 */ be_nested_string("save_before_restart", 1253239338, 19), /* K15 */ be_const_int(1),
/* K16 */ be_nested_string("persist", -377883517, 7), /* K16 */ be_nested_string("save_before_restart", 1253239338, 19),
/* K17 */ be_nested_string("save", -855671224, 4), /* K17 */ be_nested_string("persist", -377883517, 7),
/* K18 */ be_nested_string("save", -855671224, 4),
}), }),
(be_nested_const_str("event", -30355297, 5)), (be_nested_const_str("event", -30355297, 5)),
(be_nested_const_str("input", -103256197, 5)), (be_nested_const_str("input", -103256197, 5)),
( &(const binstruction[83]) { /* code */ ( &(const binstruction[81]) { /* code */
0xA41A0000, // 0000 IMPORT R6 K0 0xA41A0000, // 0000 IMPORT R6 K0
0x1C1C0301, // 0001 EQ R7 R1 K1 0x1C1C0301, // 0001 EQ R7 R1 K1
0x781E0001, // 0002 JMPF R7 #0005 0x781E0001, // 0002 JMPF R7 #0005
@ -1456,75 +1440,73 @@ be_local_closure(event, /* name */
0x5C300800, // 000B MOVE R12 R4 0x5C300800, // 000B MOVE R12 R4
0x7C200800, // 000C CALL R8 4 0x7C200800, // 000C CALL R8 4
0x80041000, // 000D RET 1 R8 0x80041000, // 000D RET 1 R8
0x7002003D, // 000E JMP #004D 0x7002003B, // 000E JMP #004B
0x1C200305, // 000F EQ R8 R1 K5 0x1C200305, // 000F EQ R8 R1 K5
0x78220004, // 0010 JMPF R8 #0016 0x78220004, // 0010 JMPF R8 #0016
0x8C200106, // 0011 GETMET R8 R0 K6 0x8C200106, // 0011 GETMET R8 R0 K6
0x5C280800, // 0012 MOVE R10 R4 0x5C280800, // 0012 MOVE R10 R4
0x7C200400, // 0013 CALL R8 2 0x7C200400, // 0013 CALL R8 2
0x80041000, // 0014 RET 1 R8 0x80041000, // 0014 RET 1 R8
0x70020036, // 0015 JMP #004D 0x70020034, // 0015 JMP #004B
0x1C200307, // 0016 EQ R8 R1 K7 0x1C200307, // 0016 EQ R8 R1 K7
0x78220003, // 0017 JMPF R8 #001C 0x78220003, // 0017 JMPF R8 #001C
0x8C200107, // 0018 GETMET R8 R0 K7 0x8C200107, // 0018 GETMET R8 R0 K7
0x7C200200, // 0019 CALL R8 1 0x7C200200, // 0019 CALL R8 1
0x80041000, // 001A RET 1 R8 0x80041000, // 001A RET 1 R8
0x70020030, // 001B JMP #004D 0x7002002E, // 001B JMP #004B
0x88200108, // 001C GETMBR R8 R0 K8 0x88200108, // 001C GETMBR R8 R0 K8
0x7822002E, // 001D JMPF R8 #004D 0x7822002C, // 001D JMPF R8 #004B
0x60200010, // 001E GETGBL R8 G16 0x58200009, // 001E LDCONST R8 K9
0x88240108, // 001F GETMBR R9 R0 K8 0x6024000C, // 001F GETGBL R9 G12
0x7C200200, // 0020 CALL R8 1 0x88280108, // 0020 GETMBR R10 R0 K8
0xA8020027, // 0021 EXBLK 0 #004A 0x7C240200, // 0021 CALL R9 1
0x5C241000, // 0022 MOVE R9 R8 0x14241009, // 0022 LT R9 R8 R9
0x7C240000, // 0023 CALL R9 0 0x78260026, // 0023 JMPF R9 #004B
0x8C280D09, // 0024 GETMET R10 R6 K9 0x88240108, // 0024 GETMBR R9 R0 K8
0x5C301200, // 0025 MOVE R12 R9 0x94241208, // 0025 GETIDX R9 R9 R8
0x5C340200, // 0026 MOVE R13 R1 0x8C280D0A, // 0026 GETMET R10 R6 K10
0x7C280600, // 0027 CALL R10 3 0x5C301200, // 0027 MOVE R12 R9
0x602C0004, // 0028 GETGBL R11 G4 0x5C340200, // 0028 MOVE R13 R1
0x5C301400, // 0029 MOVE R12 R10 0x7C280600, // 0029 CALL R10 3
0x7C2C0200, // 002A CALL R11 1 0x602C0004, // 002A GETGBL R11 G4
0x1C2C170A, // 002B EQ R11 R11 K10 0x5C301400, // 002B MOVE R12 R10
0x782E0019, // 002C JMPF R11 #0047 0x7C2C0200, // 002C CALL R11 1
0xA802000C, // 002D EXBLK 0 #003B 0x1C2C170B, // 002D EQ R11 R11 K11
0x5C2C1400, // 002E MOVE R11 R10 0x782E0019, // 002E JMPF R11 #0049
0x5C301200, // 002F MOVE R12 R9 0xA802000C, // 002F EXBLK 0 #003D
0x5C340400, // 0030 MOVE R13 R2 0x5C2C1400, // 0030 MOVE R11 R10
0x5C380600, // 0031 MOVE R14 R3 0x5C301200, // 0031 MOVE R12 R9
0x5C3C0800, // 0032 MOVE R15 R4 0x5C340400, // 0032 MOVE R13 R2
0x5C400A00, // 0033 MOVE R16 R5 0x5C380600, // 0033 MOVE R14 R3
0x7C2C0A00, // 0034 CALL R11 5 0x5C3C0800, // 0034 MOVE R15 R4
0x5C1C1600, // 0035 MOVE R7 R11 0x5C400A00, // 0035 MOVE R16 R5
0x781E0001, // 0036 JMPF R7 #0039 0x7C2C0A00, // 0036 CALL R11 5
0xA8040001, // 0037 EXBLK 1 1 0x5C1C1600, // 0037 MOVE R7 R11
0x7002000E, // 0038 JMP #0048 0x781E0001, // 0038 JMPF R7 #003B
0xA8040001, // 0039 EXBLK 1 1 0xA8040001, // 0039 EXBLK 1 1
0x7002000B, // 003A JMP #0047 0x7002000F, // 003A JMP #004B
0xAC2C0002, // 003B CATCH R11 0 2 0xA8040001, // 003B EXBLK 1 1
0x70020008, // 003C JMP #0046 0x7002000B, // 003C JMP #0049
0xA4361600, // 003D IMPORT R13 K11 0xAC2C0002, // 003D CATCH R11 0 2
0x60380001, // 003E GETGBL R14 G1 0x70020008, // 003E JMP #0048
0x8C3C1B0C, // 003F GETMET R15 R13 K12 0xA4361800, // 003F IMPORT R13 K12
0x5844000D, // 0040 LDCONST R17 K13 0x60380001, // 0040 GETGBL R14 G1
0x5C481600, // 0041 MOVE R18 R11 0x8C3C1B0D, // 0041 GETMET R15 R13 K13
0x5C4C1800, // 0042 MOVE R19 R12 0x5844000E, // 0042 LDCONST R17 K14
0x7C3C0800, // 0043 CALL R15 4 0x5C481600, // 0043 MOVE R18 R11
0x7C380200, // 0044 CALL R14 1 0x5C4C1800, // 0044 MOVE R19 R12
0x70020000, // 0045 JMP #0047 0x7C3C0800, // 0045 CALL R15 4
0xB0080000, // 0046 RAISE 2 R0 R0 0x7C380200, // 0046 CALL R14 1
0x7001FFD9, // 0047 JMP #0022 0x70020000, // 0047 JMP #0049
0xA8040001, // 0048 EXBLK 1 1 0xB0080000, // 0048 RAISE 2 R0 R0
0x70020002, // 0049 JMP #004D 0x0020110F, // 0049 ADD R8 R8 K15
0x5820000E, // 004A LDCONST R8 K14 0x7001FFD3, // 004A JMP #001F
0xAC200200, // 004B CATCH R8 1 0 0x1C200310, // 004B EQ R8 R1 K16
0xB0080000, // 004C RAISE 2 R0 R0 0x78220002, // 004C JMPF R8 #0050
0x1C20030F, // 004D EQ R8 R1 K15 0xA4222200, // 004D IMPORT R8 K17
0x78220002, // 004E JMPF R8 #0052 0x8C241112, // 004E GETMET R9 R8 K18
0xA4222000, // 004F IMPORT R8 K16 0x7C240200, // 004F CALL R9 1
0x8C241111, // 0050 GETMET R9 R8 K17 0x80040E00, // 0050 RET 1 R7
0x7C240200, // 0051 CALL R9 1
0x80040E00, // 0052 RET 1 R7
}) })
) )
); );

View File

@ -30,12 +30,18 @@ class Tasmota
# inv is optional and inverses the behavior, i.e. look for chars not in the list # inv is optional and inverses the behavior, i.e. look for chars not in the list
def chars_in_string(s,c,inv) def chars_in_string(s,c,inv)
var inverted = inv ? true : false var inverted = inv ? true : false
for i:0..size(s)-1 var i = 0
while i < size(s)
# for i:0..size(s)-1
var found = false var found = false
for j:0..size(c)-1 var j = 0
while j < size(c)
# for j:0..size(c)-1
if s[i] == c[j] found = true end if s[i] == c[j] found = true end
j += 1
end end
if inverted != found return i end if inverted != found return i end
i += 1
end end
return -1 return -1
end end
@ -99,10 +105,14 @@ class Tasmota
var rl_list = self.find_op(rule) var rl_list = self.find_op(rule)
var sub_event = event var sub_event = event
var rl = string.split(rl_list[0],'#') var rl = string.split(rl_list[0],'#')
for it:rl var i = 0
while i < size(rl)
# for it:rl
var it = rl[i]
var found=self.find_key_i(sub_event,it) var found=self.find_key_i(sub_event,it)
if found == nil return false end if found == nil return false end
sub_event = sub_event[found] sub_event = sub_event[found]
i += 1
end end
var op=rl_list[1] var op=rl_list[1]
var op2=rl_list[2] var op2=rl_list[2]
@ -297,7 +307,10 @@ class Tasmota
elif event_type=='rule' return self.exec_rules(payload) elif event_type=='rule' return self.exec_rules(payload)
elif event_type=='gc' return self.gc() elif event_type=='gc' return self.gc()
elif self._drivers elif self._drivers
for d:self._drivers var i = 0
while i < size(self._drivers)
#for d:self._drivers
var d = self._drivers[i]
var f = introspect.get(d, event_type) # try to match a function or method with the same name var f = introspect.get(d, event_type) # try to match a function or method with the same name
if type(f) == 'function' if type(f) == 'function'
try try
@ -308,6 +321,7 @@ class Tasmota
print(string.format("BRY: Exception> '%s' - %s", e, m)) print(string.format("BRY: Exception> '%s' - %s", e, m))
end end
end end
i += 1
end end
end end