output[0] = jv_bool(jv_equal(input[2], input[1]));
}
+static void f_notequal(jv input[], jv output[]) {
+ jv_free(input[0]);
+ output[0] = jv_bool(jv_equal(input[2], input[1]) == 0);
+}
+
static void order_cmp(jv input[], jv output[], int op) {
jv_free(input[0]);
jv a = input[2];
{f_tostring, "tostring", CALL_BUILTIN_1_1},
{f_keys, "keys", CALL_BUILTIN_1_1},
{f_equal, "_equal", CALL_BUILTIN_3_1},
+ {f_notequal, "_notequal", CALL_BUILTIN_3_1},
{f_less, "_less", CALL_BUILTIN_3_1},
{f_greater, "_greater", CALL_BUILTIN_3_1},
{f_lesseq, "_lesseq", CALL_BUILTIN_3_1},
%token <literal> IDENT
%token <literal> LITERAL
%token EQ "=="
+%token NEQ "!="
%token DEFINEDOR "//"
%token AS "as"
%token DEF "def"
%nonassoc '=' SETPIPE SETPLUS SETMINUS SETMULT SETDIV SETDEFINEDOR
%left OR
%left AND
-%nonassoc EQ '<' '>' LESSEQ GREATEREQ
+%nonassoc NEQ EQ '<' '>' LESSEQ GREATEREQ
%left '+' '-'
%left '*' '/'
case '*': funcname = "_multiply"; break;
case '/': funcname = "_divide"; break;
case EQ: funcname = "_equal"; break;
+ case NEQ: funcname = "_notequal"; break;
case '<': funcname = "_less"; break;
case '>': funcname = "_greater"; break;
case LESSEQ: funcname = "_lesseq"; break;
$$ = gen_binop($1, $3, EQ);
} |
+Exp "!=" Exp {
+ $$ = gen_binop($1, $3, NEQ);
+} |
+
Exp '<' Exp {
$$ = gen_binop($1, $3, '<');
} |