# HG changeset patch # User Edouard Tisserant # Date 1639468085 -3600 # Node ID fad6e7a818e25cc8793526792e987a25e617f8f7 # Parent 36bbd0b64816e6a5fdc4b794251d5fb2222ba3a9 Variable forcing now uses limited list and buffer instead of systematical instance tree traversal and in-tree "fvalue" to keep track of forced value for pointed variables (external, located). Pointer swapping is performed when forcing externals and located, with backup being restored when forcing is reset. Match Beremiz commit 93ad018fb602. diff -r 36bbd0b64816 -r fad6e7a818e2 lib/C/accessor.h --- a/lib/C/accessor.h Wed Nov 24 08:58:58 2021 +0100 +++ b/lib/C/accessor.h Tue Dec 14 08:48:05 2021 +0100 @@ -87,20 +87,20 @@ #define __GET_VAR(name, ...)\ name.value __VA_ARGS__ #define __GET_EXTERNAL(name, ...)\ - ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) + ((*(name.value)) __VA_ARGS__) #define __GET_EXTERNAL_FB(name, ...)\ __GET_VAR(((*name) __VA_ARGS__)) #define __GET_LOCATED(name, ...)\ - ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) + ((*(name.value)) __VA_ARGS__) #define __GET_VAR_BY_REF(name, ...)\ - ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__)) + (&(name.value __VA_ARGS__)) #define __GET_EXTERNAL_BY_REF(name, ...)\ - ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) + (&((*(name.value)) __VA_ARGS__)) #define __GET_EXTERNAL_FB_BY_REF(name, ...)\ __GET_EXTERNAL_BY_REF(((*name) __VA_ARGS__)) #define __GET_LOCATED_BY_REF(name, ...)\ - ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) + (&((*(name.value)) __VA_ARGS__)) #define __GET_VAR_REF(name, ...)\ (&(name.value __VA_ARGS__)) diff -r 36bbd0b64816 -r fad6e7a818e2 lib/C/iec_types_all.h --- a/lib/C/iec_types_all.h Wed Nov 24 08:58:58 2021 +0100 +++ b/lib/C/iec_types_all.h Tue Dec 14 08:48:05 2021 +0100 @@ -83,7 +83,6 @@ typedef struct {\ IEC_##type *value;\ IEC_BYTE flags;\ - IEC_##type fvalue;\ } __IEC_##type##_p; @@ -102,7 +101,6 @@ typedef struct {\ type *value;\ IEC_BYTE flags;\ - type fvalue;\ } __IEC_##type##_p; #define __DECLARE_ENUMERATED_TYPE(type, ...)\