MCPcopy Create free account
hub / github.com/dop251/goja / parseLogicalOrExpression

Method parseLogicalOrExpression

parser/expression.go:1118–1170  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1116}
1117
1118func (self *_parser) parseLogicalOrExpression() ast.Expression {
1119 var idx file.Idx
1120 parenthesis := self.token == token.LEFT_PARENTHESIS
1121 left := self.parseLogicalAndExpression()
1122
1123 if self.token == token.LOGICAL_OR || !parenthesis && isLogicalAndExpr(left) {
1124 for {
1125 switch self.token {
1126 case token.LOGICAL_OR:
1127 self.next()
1128 left = &ast.BinaryExpression{
1129 Operator: token.LOGICAL_OR,
1130 Left: left,
1131 Right: self.parseLogicalAndExpression(),
1132 }
1133 case token.COALESCE:
1134 idx = self.idx
1135 goto mixed
1136 default:
1137 return left
1138 }
1139 }
1140 } else {
1141 for {
1142 switch self.token {
1143 case token.COALESCE:
1144 idx = self.idx
1145 self.next()
1146
1147 parenthesis := self.token == token.LEFT_PARENTHESIS
1148 right := self.parseLogicalAndExpression()
1149 if !parenthesis && isLogicalAndExpr(right) {
1150 goto mixed
1151 }
1152
1153 left = &ast.BinaryExpression{
1154 Operator: token.COALESCE,
1155 Left: left,
1156 Right: right,
1157 }
1158 case token.LOGICAL_OR:
1159 idx = self.idx
1160 goto mixed
1161 default:
1162 return left
1163 }
1164 }
1165 }
1166
1167mixed:
1168 self.error(idx, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses")
1169 return left
1170}
1171
1172func (self *_parser) parseConditionalExpression() ast.Expression {
1173 left := self.parseLogicalOrExpression()

Callers 1

Calls 4

nextMethod · 0.95
errorMethod · 0.95
isLogicalAndExprFunction · 0.85

Tested by

no test coverage detected