Home | History | Annotate | Line # | Download | only in lint1
      1  1.16  rillig /*	$NetBSD: oper.c,v 1.16 2024/03/31 20:28:45 rillig Exp $	*/
      2   1.1  rillig 
      3   1.1  rillig /*-
      4   1.1  rillig  * Copyright (c) 2021 The NetBSD Foundation, Inc.
      5   1.1  rillig  * All rights reserved.
      6   1.1  rillig  *
      7   1.1  rillig  * This code is derived from software contributed to The NetBSD Foundation
      8   1.1  rillig  * by Roland Illig.
      9   1.1  rillig  *
     10   1.1  rillig  * Redistribution and use in source and binary forms, with or without
     11   1.1  rillig  * modification, are permitted provided that the following conditions
     12   1.1  rillig  * are met:
     13   1.1  rillig  * 1. Redistributions of source code must retain the above copyright
     14   1.1  rillig  *    notice, this list of conditions and the following disclaimer.
     15   1.1  rillig  * 2. Redistributions in binary form must reproduce the above copyright
     16   1.1  rillig  *    notice, this list of conditions and the following disclaimer in the
     17   1.1  rillig  *    documentation and/or other materials provided with the distribution.
     18   1.1  rillig  *
     19   1.1  rillig  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20   1.1  rillig  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21   1.1  rillig  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22   1.1  rillig  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23   1.1  rillig  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24   1.1  rillig  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25   1.1  rillig  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26   1.1  rillig  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27   1.1  rillig  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28   1.1  rillig  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29   1.1  rillig  * POSSIBILITY OF SUCH DAMAGE.
     30   1.1  rillig  */
     31   1.1  rillig 
     32   1.1  rillig #include "op.h"
     33   1.1  rillig #include "param.h"
     34   1.1  rillig 
     35  1.13  rillig #define X true
     36  1.13  rillig #define _ false
     37  1.13  rillig 
     38  1.13  rillig const mod_t modtab[NOPS] = {
     39  1.13  rillig 
     40  1.13  rillig /*-
     41  1.13  rillig  * Operator properties:
     42  1.13  rillig  *
     43  1.13  rillig  *	 b   binary
     44  1.13  rillig  *	   l   logical
     45  1.13  rillig  *	     b   takes _Bool
     46  1.13  rillig  *	       z   compares with zero
     47  1.13  rillig  *		 i   requires integer
     48  1.13  rillig  *		   c   requires integer or complex
     49  1.13  rillig  *		     a   requires arithmetic
     50  1.13  rillig  *		       s   requires scalar
     51  1.13  rillig  *			 f   fold constant operands
     52  1.13  rillig  *			   v   value context
     53  1.13  rillig  *			     b   balance operands
     54  1.13  rillig  *			       s   has side effects
     55  1.13  rillig  *				 l   warn if left operand unsigned
     56  1.13  rillig  *				   r   warn if right operand unsigned
     57  1.13  rillig  *				     p   possible precedence confusion
     58  1.13  rillig  *				       c   comparison
     59  1.13  rillig  *					 e   valid on enum
     60  1.13  rillig  *					   e   bad on enum
     61  1.13  rillig  *					     =   warn if operand '='
     62  1.13  rillig  *					       o   has operands
     63  1.13  rillig  */
     64  1.13  rillig 
     65  1.13  rillig /*	 b l b z i c a s f v b s l r p c e e = o */
     66  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "no-op" },
     67  1.13  rillig 	{X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "->" },
     68  1.13  rillig 	{X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "." },
     69  1.13  rillig 	{_,X,X,X,_,_,_,X,X,_,_,_,_,_,_,_,_,X,_,X, "!" },
     70  1.13  rillig 	{_,_,_,_,_,X,_,_,X,X,_,_,_,_,_,_,_,X,X,X, "~" },
     71  1.13  rillig 	/*
     72  1.13  rillig 	 * The '++' and '--' operators are conceptually unary operators, but
     73  1.13  rillig 	 * lint implements them as binary operators due to the pre-multiplied
     74  1.13  rillig 	 * pointer arithmetics, see build_prepost_incdec and build_plus_minus.
     75  1.13  rillig 	 */
     76  1.13  rillig 	{_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "++x" },
     77  1.13  rillig 	{_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "--x" },
     78  1.13  rillig 	{_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "x++" },
     79  1.13  rillig 	{_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "x--" },
     80  1.13  rillig 	{_,_,_,_,_,_,X,_,X,X,_,_,_,_,_,_,_,X,X,X, "+" },
     81  1.13  rillig 	{_,_,_,_,_,_,X,_,X,X,_,_,X,_,_,_,_,X,X,X, "-" },
     82  1.13  rillig 	{_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "*" },
     83  1.13  rillig 	{_,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "&" },
     84  1.13  rillig /*	 b l b z i c a s f v b s l r p c e e = o */
     85  1.13  rillig 	{X,_,_,_,_,_,X,_,X,X,X,_,_,X,_,_,_,X,X,X, "*" },
     86  1.13  rillig 	{X,_,_,_,_,_,X,_,X,X,X,_,X,X,_,_,_,X,X,X, "/" },
     87  1.13  rillig 	{X,_,_,_,X,_,_,_,X,X,X,_,X,X,_,_,_,X,X,X, "%" },
     88  1.13  rillig 	{X,_,_,_,_,_,_,X,X,X,X,_,_,_,_,_,_,X,_,X, "+" },
     89  1.13  rillig 	{X,_,_,_,_,_,_,X,X,X,X,_,_,_,_,_,_,X,_,X, "-" },
     90  1.13  rillig 	{X,_,_,_,X,_,_,_,X,X,_,_,_,_,X,_,_,X,X,X, "<<" },
     91  1.13  rillig 	{X,_,_,_,X,_,_,_,X,X,_,_,X,_,X,_,_,X,X,X, ">>" },
     92  1.13  rillig /*	 b l b z i c a s f v b s l r p c e e = o */
     93  1.13  rillig 	{X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, "<" },
     94  1.13  rillig 	{X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, "<=" },
     95  1.13  rillig 	{X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, ">" },
     96  1.13  rillig 	{X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, ">=" },
     97  1.13  rillig 	{X,X,X,_,_,_,_,X,X,X,X,_,_,_,_,X,X,_,X,X, "==" },
     98  1.13  rillig 	{X,X,X,_,_,_,_,X,X,X,X,_,_,_,_,X,X,_,X,X, "!=" },
     99  1.13  rillig /*	 b l b z i c a s f v b s l r p c e e = o */
    100  1.13  rillig 	{X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "&" },
    101  1.13  rillig 	{X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "^" },
    102  1.13  rillig 	{X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "|" },
    103  1.13  rillig 	{X,X,X,X,_,_,_,X,X,_,_,_,_,_,_,_,_,X,_,X, "&&" },
    104  1.13  rillig 	{X,X,X,X,_,_,_,X,X,_,_,_,_,_,X,_,_,X,_,X, "||" },
    105  1.13  rillig 	{X,_,_,X,_,_,_,_,X,_,_,_,_,_,_,_,_,_,_,X, "?" },
    106  1.13  rillig 	{X,_,X,_,_,_,_,_,_,X,X,_,_,_,_,_,X,_,_,X, ":" },
    107  1.13  rillig /*	 b l b z i c a s f v b s l r p c e e = o */
    108  1.13  rillig 	{X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "=" },
    109  1.13  rillig 	{X,_,_,_,_,_,X,_,_,_,_,X,_,_,_,_,_,X,_,X, "*=" },
    110  1.13  rillig 	{X,_,_,_,_,_,X,_,_,_,_,X,_,X,_,_,_,X,_,X, "/=" },
    111  1.13  rillig 	{X,_,_,_,X,_,_,_,_,_,_,X,_,X,_,_,_,X,_,X, "%=" },
    112  1.13  rillig 	{X,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "+=" },
    113  1.13  rillig 	{X,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "-=" },
    114  1.13  rillig 	{X,_,_,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "<<=" },
    115  1.13  rillig 	{X,_,_,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, ">>=" },
    116  1.13  rillig 	{X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "&=" },
    117  1.13  rillig 	{X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "^=" },
    118  1.13  rillig 	{X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "|=" },
    119  1.13  rillig /*	 b l b z i c a s f v b s l r p c e e = o */
    120  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "name" },
    121  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "constant" },
    122  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "string" },
    123  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "fsel" },
    124  1.15  rillig 	{_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "call" },
    125  1.13  rillig 	{X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X,X, "," },
    126  1.13  rillig 	{_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "convert" },
    127  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "load" },
    128  1.13  rillig 	{X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "return" },
    129  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "real" },
    130  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "imag" },
    131  1.13  rillig 	{X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "init" },
    132  1.13  rillig 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "case" },
    133  1.13  rillig 	{X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,_,_,X, "farg" },
    134  1.13  rillig };
    135