or

or (leftOperand rightOperand -- combinedValue)

Inputs

Outputs

or 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 or runs, both operands are already on the data stack.

Behavior

Example

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

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

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

  "-- int32 bitwise --" printCompilerMessage
  -1 6 or printStack _:;
  6 3 or printStack _:;
] "main" exportFunction

Expected Output During Compilation

-- no short-circuit cond --
-- left operand --
-- right operand --
TRUE
-- cond --
TRUE
FALSE
TRUE
Cond
-- nat32 masks --
252n32
4294967295n32
12n32
4294967295n32
Nat32
-- int32 bitwise --
-1
7

See also