xor

xor (leftOperand rightOperand -- combinedValue)

Inputs

Outputs

xor accepts same-schema Cond, Nat, and Int values. Both inputs are dereferenced and must be non-NIL. The result keeps that schema.

This is not short-circuit control flow. By the time xor runs, both operands are already on the data stack.

Behavior

Example

{} () {} [
  "-- no short-circuit cond --" printCompilerMessage
  "-- left operand --" printCompilerMessage TRUE
  "-- right operand --" printCompilerMessage FALSE
  xor printStack _:;

  "-- cond --" printCompilerMessage
  FALSE TRUE xor printStack _:;
  TRUE TRUE xor printStack _:;
  unknownCond: FALSE dynamic;
  FALSE unknownCond xor printStack _:;
  TRUE unknownCond xor printStack _:;

  "-- nat32 masks --" printCompilerMessage
  0xF0n32 0x0Cn32 xor printStack _:;
  0n32 0xCCn32 xor printStack _:;
  0xFFFFFFFFn32 0x0Cn32 xor printStack _:;
  unknownNat: 0n32 dynamic;
  0n32 unknownNat xor printStack _:;
  0xFFFFFFFFn32 unknownNat xor printStack _:;

  "-- int32 bitwise --" printCompilerMessage
  -1 6 xor printStack _:;
  6 3 xor printStack _:;
  unknownInt: 0 dynamic;
  0 unknownInt xor printStack _:;
  -1 unknownInt xor printStack _:;
] "main" exportFunction

Expected Output During Compilation

-- no short-circuit cond --
-- left operand --
-- right operand --
TRUE
-- cond --
TRUE
FALSE
Cond
Cond
-- nat32 masks --
252n32
204n32
4294967283n32
Nat32
Nat32
-- int32 bitwise --
-7
5
Int32
Int32

See also