1 /** 2 Copyright: Copyright (c) 2018, Joakim Brännström. All rights reserved. 3 License: MPL-2 4 Author: Joakim Brännström (joakim.brannstrom@gmx.com) 5 6 This Source Code Form is subject to the terms of the Mozilla Public License, 7 v.2.0. If a copy of the MPL was not distributed with this file, You can obtain 8 one at http://mozilla.org/MPL/2.0/. 9 */ 10 module dextool.plugin.mutate.backend.mutation_type.lcrb; 11 12 import dextool.plugin.mutate.backend.type; 13 import dextool.clang_extensions : OpKind; 14 15 auto lcrbMutations(OpKind k) @safe pure nothrow { 16 auto v = k in isLcrb; 17 if (v is null) 18 return null; 19 20 if (*v == Mutation.Kind.lcrbAnd) 21 return [Mutation.Kind.lcrbOr]; 22 else if (*v == Mutation.Kind.lcrbOr) 23 return [Mutation.Kind.lcrbAnd]; 24 return null; 25 } 26 27 auto lcrbLhsMutations(OpKind k) @safe pure nothrow { 28 return k in isLcrb ? [Mutation.Kind.lcrbLhs] : null; 29 } 30 31 auto lcrbRhsMutations(OpKind k) @safe pure nothrow { 32 return k in isLcrb ? [Mutation.Kind.lcrbRhs] : null; 33 } 34 35 auto lcrbAssignMutations(OpKind k) @safe pure nothrow { 36 auto v = k in isLcrbAssign; 37 if (v is null) 38 return null; 39 40 if (*v == Mutation.Kind.lcrbAndAssign) 41 return [Mutation.Kind.lcrbOrAssign]; 42 else if (*v == Mutation.Kind.lcrbOrAssign) 43 return [Mutation.Kind.lcrbAndAssign]; 44 return null; 45 } 46 47 immutable Mutation.Kind[OpKind] isLcrb; 48 immutable Mutation.Kind[OpKind] isLcrbAssign; 49 50 immutable Mutation.Kind[] lcrbMutationsAll; 51 immutable Mutation.Kind[] lcrbAssignMutationsAll; 52 53 shared static this() { 54 // dfmt off 55 with (OpKind) { 56 isLcrb = [ 57 And : Mutation.Kind.lcrbAnd, // "&" 58 Or : Mutation.Kind.lcrbOr, // "|" 59 OO_Amp : Mutation.Kind.lcrbAnd, // "&" 60 OO_Pipe : Mutation.Kind.lcrbOr, // "|" 61 ]; 62 63 isLcrbAssign = [ 64 AndAssign : Mutation.Kind.lcrbAndAssign, 65 OrAssign : Mutation.Kind.lcrbOrAssign, 66 OO_AmpEqual : Mutation.Kind.lcrbAndAssign, 67 OO_PipeEqual : Mutation.Kind.lcrbOrAssign, 68 ]; 69 } 70 // dfmt on 71 72 with (Mutation.Kind) { 73 lcrbMutationsAll = [lcrbAnd, lcrbOr, lcrbLhs, lcrbRhs]; 74 lcrbAssignMutationsAll = [lcrbOrAssign, lcrbAndAssign]; 75 } 76 }