From 4dfba277487a7023ab9f5783302da4a9b5e9bef8 Mon Sep 17 00:00:00 2001 From: "Jiao, Joey" Date: Wed, 6 Nov 2024 13:41:21 +0800 Subject: all: support || operator in syzlang if condition ex. f3 field has logic or operator in if condition: conditional_struct { mask int32 f1 field1 (if[value[mask] & FIELD_FLAG1]) f2 int64 (if[value[mask] & FIELD_FLAG2]) f3 int64 (if[value[mask] == FIELD_FLAG1 || value[mask] == FIELD_FLAG2]) } [packed] --- pkg/ast/parser.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'pkg/ast/parser.go') diff --git a/pkg/ast/parser.go b/pkg/ast/parser.go index 839d8e6d6..273a4889f 100644 --- a/pkg/ast/parser.go +++ b/pkg/ast/parser.go @@ -438,17 +438,18 @@ type operatorInfo struct { prio int } -const maxOperatorPrio = 1 +const maxOperatorPrio = 2 // The highest priority is 0. var binaryOperators = map[token]operatorInfo{ - tokCmpEq: {op: OperatorCompareEq, prio: 0}, - tokCmpNeq: {op: OperatorCompareNeq, prio: 0}, - tokBinAnd: {op: OperatorBinaryAnd, prio: 1}, + tokOr: {op: OperatorOr, prio: 0}, + tokCmpEq: {op: OperatorCompareEq, prio: 1}, + tokCmpNeq: {op: OperatorCompareNeq, prio: 1}, + tokBinAnd: {op: OperatorBinaryAnd, prio: 2}, } // Parse out a single Type object, which can either be a plain object or an expression. -// For now, only expressions constructed via '(', ')', "==", "!=", '&' are supported. +// For now, only expressions constructed via '(', ')', "==", "!=", '&', '||' are supported. func (p *parser) parseType() *Type { return p.parseBinaryExpr(0) } -- cgit mrf-deployment