From: Justin Viiret Date: Mon, 8 Feb 2016 02:32:21 +0000 (+1100) Subject: SET_GROUPS instr: don't generate more than one X-Git-Tag: v4.2.0^2~152 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=961e303ff344fa766536491b17bf217efffcd5b3;p=thirdparty%2Fvectorscan.git SET_GROUPS instr: don't generate more than one --- diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 81b28197..558603f7 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -3269,10 +3269,6 @@ void makeRoleInfixTriggers(RoseBuildImpl &build, build_context &bc, sort(begin(infix_program), end(infix_program)); unique_copy(begin(infix_program), end(infix_program), back_inserter(program)); - - // Groups may be cleared by an infix going quiet. Set groups immediately - // after infixes are triggered. - makeRoleGroups(g[u].groups, program); } static @@ -3373,9 +3369,13 @@ vector makeProgram(RoseBuildImpl &build, build_context &bc, makeRoleReports(build, bc, v, program); makeRoleInfixTriggers(build, bc, v, program); + + // Note: SET_GROUPS instruction must be after infix triggers, as an infix + // going dead may switch off groups. + makeRoleGroups(g[v].groups, program); + makeRoleSuffix(build, bc, v, program); makeRoleSetState(bc, v, program); - makeRoleGroups(g[v].groups, program); return program; }