OCamlRuby / rbBool.ml

open Util
open Ast

let to_bool obj =
  match get_fun obj.ctx "__body" with
  | (_, Literal (LBool x)) -> x
  | _ -> failwith @@ "RbBool.to_bool: " ^ obj.class_name

let of_bool b parent =
  let fmake args f = (args, External (fun self ->
    let xs = List.map (to_bool $ get_var self.ctx) args in
    f b xs))
  in
  let ctx = create_ctx () in
  set_fun ctx "to_s" ([], Literal (LString (string_of_bool b)));
  set_fun ctx "__body" ([], Literal (LBool b));
  set_fun ctx "==" @@ fmake ["__x"] (fun x xs -> Literal (LBool (x = List.hd xs)));
  set_fun ctx "!=" @@ fmake ["__x"] (fun x xs -> Literal (LBool (x != List.hd xs)));
  set_fun ctx "&&" @@ fmake ["__x"] (fun x xs -> Literal (LBool (x && List.hd xs)));
  set_fun ctx "||" @@ fmake ["__x"] (fun x xs -> Literal (LBool (x || List.hd xs)));
  { parent=parent; class_name="Bool"; ctx=ctx }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.