Left- and Right-shift.
This commit is contained in:
parent
a69b988684
commit
2c9d5cf4bf
|
|
@ -57,6 +57,10 @@ joy_eval symbol stack expression =
|
||||||
"and" -> joy_binary_math_op (Bitwise.and) stack expression
|
"and" -> joy_binary_math_op (Bitwise.and) stack expression
|
||||||
"or" -> joy_binary_math_op (Bitwise.or) stack expression
|
"or" -> joy_binary_math_op (Bitwise.or) stack expression
|
||||||
"xor" -> joy_binary_math_op (Bitwise.xor) stack expression
|
"xor" -> joy_binary_math_op (Bitwise.xor) stack expression
|
||||||
|
"lshift" -> joy_binary_math_op (swap_args Bitwise.shiftLeftBy) stack expression
|
||||||
|
"<<" -> joy_binary_math_op (swap_args Bitwise.shiftLeftBy) stack expression
|
||||||
|
"rshift" -> joy_binary_math_op (swap_args Bitwise.shiftRightBy) stack expression
|
||||||
|
">>" -> joy_binary_math_op (swap_args Bitwise.shiftRightBy) stack expression
|
||||||
|
|
||||||
"clear" -> Ok ([], expression)
|
"clear" -> Ok ([], expression)
|
||||||
"concat" -> joy_concat stack expression
|
"concat" -> joy_concat stack expression
|
||||||
|
|
@ -96,6 +100,7 @@ joy_i stack expression =
|
||||||
Ok (a, s0) -> Ok (s0, a ++ expression)
|
Ok (a, s0) -> Ok (s0, a ++ expression)
|
||||||
Err msg -> Err msg
|
Err msg -> Err msg
|
||||||
|
|
||||||
|
|
||||||
joy_dip : JList -> JList -> Result String (JList, JList)
|
joy_dip : JList -> JList -> Result String (JList, JList)
|
||||||
joy_dip stack expression =
|
joy_dip stack expression =
|
||||||
case pop_list(stack) of
|
case pop_list(stack) of
|
||||||
|
|
@ -131,6 +136,10 @@ joy_binary_math_op op stack expression =
|
||||||
Err msg -> Err msg
|
Err msg -> Err msg
|
||||||
|
|
||||||
|
|
||||||
|
swap_args : (Int -> Int -> Int) -> (Int -> Int -> Int)
|
||||||
|
swap_args op = (\a b -> op b a)
|
||||||
|
|
||||||
|
|
||||||
joy_comparison_op : (Int -> Int -> Bool) -> JList -> JList -> Result String (JList, JList)
|
joy_comparison_op : (Int -> Int -> Bool) -> JList -> JList -> Result String (JList, JList)
|
||||||
joy_comparison_op op stack expression =
|
joy_comparison_op op stack expression =
|
||||||
case pop_int(stack) of
|
case pop_int(stack) of
|
||||||
|
|
@ -292,7 +301,6 @@ isnt_int (item, stack) =
|
||||||
Err "Not an integer."
|
Err "Not an integer."
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
isnt_list : (JoyType, JList) -> Result String (JList, JList)
|
isnt_list : (JoyType, JList) -> Result String (JList, JList)
|
||||||
isnt_list (item, stack) =
|
isnt_list (item, stack) =
|
||||||
case item of
|
case item of
|
||||||
|
|
@ -310,7 +318,6 @@ isnt_bool (item, stack) =
|
||||||
_ -> Err "Not a Boolean value."
|
_ -> Err "Not a Boolean value."
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Printer
|
-- Printer
|
||||||
|
|
||||||
joyTermToString : JoyType -> String
|
joyTermToString : JoyType -> String
|
||||||
|
|
@ -326,9 +333,6 @@ joyTermToString term =
|
||||||
joyExpressionToString expr = String.join " " (List.map joyTermToString expr)
|
joyExpressionToString expr = String.join " " (List.map joyTermToString expr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- Use the old S-expression lexing trick.
|
-- Use the old S-expression lexing trick.
|
||||||
|
|
||||||
tokenize : String -> (List String)
|
tokenize : String -> (List String)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue