Current section
Files
Jump to
Current section
Files
lib/instructions/boolean.ex
defmodule Elixush.Instructions.Boolean do
import Elixush.PushState
def boolean_and(state) do
if not(state[:boolean] |> Enum.drop(1) |> Enum.empty?) do
to_push = stack_ref(:boolean, 0, state) and stack_ref(:boolean, 1, state)
push_item(to_push, :boolean, pop_item(:boolean, pop_item(:boolean, state)))
else
state
end
end
def boolean_or(state) do
if not(state[:boolean] |> Enum.drop(1) |> Enum.empty?) do
to_push = stack_ref(:boolean, 0, state) or stack_ref(:boolean, 1, state)
push_item(to_push, :boolean, pop_item(:boolean, pop_item(:boolean, state)))
else
state
end
end
def boolean_not(state) do
if not(state[:boolean] |> Enum.empty?) do
to_push = not(stack_ref(:boolean, 0, state))
push_item(to_push, :boolean, pop_item(:boolean, state))
else
state
end
end
def boolean_xor(state) do
if not(state[:boolean] |> Enum.drop(1) |> Enum.empty?) do
to_push = not(stack_ref(:boolean, 0, state) == stack_ref(:boolean, 1, state))
push_item(to_push, :boolean, pop_item(:boolean, pop_item(:boolean, state)))
else
state
end
end
def boolean_invert_first_then_and(state) do
if not(state[:boolean] |> Enum.drop(1) |> Enum.empty?) do
to_push = not(stack_ref(:boolean, 0, state)) and stack_ref(:boolean, 1, state)
push_item(to_push, :boolean, pop_item(:boolean, pop_item(:boolean, state)))
else
state
end
end
def boolean_invert_second_then_and(state) do
if not(state[:boolean] |> Enum.drop(1) |> Enum.empty?) do
to_push = stack_ref(:boolean, 0, state) and not(stack_ref(:boolean, 1, state))
push_item(to_push, :boolean, pop_item(:boolean, pop_item(:boolean, state)))
else
state
end
end
def boolean_frominteger(state) do
if not(state[:integer] |> Enum.empty?) do
to_push = not(stack_ref(:integer, 0, state) == 0)
push_item(to_push, :boolean, pop_item(:integer, state))
else
state
end
end
def boolean_fromfloat(state) do
if not(state[:float] |> Enum.empty?) do
to_push = not(stack_ref(:float, 0, state) == 0)
push_item(to_push, :boolean, pop_item(:float, state))
else
state
end
end
end