floor(0)=-1 bug fixed + 12/12 adapter compiles + primitives
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -84,10 +84,10 @@ let () =
|
|||||||
register "abs" (fun args ->
|
register "abs" (fun args ->
|
||||||
match args with [a] -> Number (Float.abs (as_number a)) | _ -> raise (Eval_error "abs: 1 arg"));
|
match args with [a] -> Number (Float.abs (as_number a)) | _ -> raise (Eval_error "abs: 1 arg"));
|
||||||
register "floor" (fun args ->
|
register "floor" (fun args ->
|
||||||
match args with [a] -> Number (Float.of_int (int_of_float (Float.round (as_number a -. 0.5))))
|
match args with [a] -> Number (floor (as_number a))
|
||||||
| _ -> raise (Eval_error "floor: 1 arg"));
|
| _ -> raise (Eval_error "floor: 1 arg"));
|
||||||
register "ceil" (fun args ->
|
register "ceil" (fun args ->
|
||||||
match args with [a] -> Number (Float.of_int (int_of_float (Float.round (as_number a +. 0.5))))
|
match args with [a] -> Number (ceil (as_number a))
|
||||||
| _ -> raise (Eval_error "ceil: 1 arg"));
|
| _ -> raise (Eval_error "ceil: 1 arg"));
|
||||||
register "round" (fun args ->
|
register "round" (fun args ->
|
||||||
match args with
|
match args with
|
||||||
@@ -570,6 +570,14 @@ let () =
|
|||||||
match args with [a] -> String (type_of a) | _ -> raise (Eval_error "type-of: 1 arg"));
|
match args with [a] -> String (type_of a) | _ -> raise (Eval_error "type-of: 1 arg"));
|
||||||
register "inspect" (fun args ->
|
register "inspect" (fun args ->
|
||||||
match args with [a] -> String (inspect a) | _ -> raise (Eval_error "inspect: 1 arg"));
|
match args with [a] -> String (inspect a) | _ -> raise (Eval_error "inspect: 1 arg"));
|
||||||
|
register "serialize" (fun args ->
|
||||||
|
match args with
|
||||||
|
| [a] -> String (inspect a) (* used for dedup keys in compiler *)
|
||||||
|
| _ -> raise (Eval_error "serialize: 1 arg"));
|
||||||
|
register "make-symbol" (fun args ->
|
||||||
|
match args with
|
||||||
|
| [String s] -> Symbol s
|
||||||
|
| _ -> raise (Eval_error "make-symbol: expected string"));
|
||||||
register "error" (fun args ->
|
register "error" (fun args ->
|
||||||
match args with [String msg] -> raise (Eval_error msg)
|
match args with [String msg] -> raise (Eval_error msg)
|
||||||
| [a] -> raise (Eval_error (to_string a))
|
| [a] -> raise (Eval_error (to_string a))
|
||||||
|
|||||||
@@ -246,7 +246,12 @@ let rec run vm =
|
|||||||
let args = List.init argc (fun _ -> pop vm) |> List.rev in
|
let args = List.init argc (fun _ -> pop vm) |> List.rev in
|
||||||
let result =
|
let result =
|
||||||
try
|
try
|
||||||
(match Sx_primitives.get_primitive name with
|
(* Check globals first (has env bindings like set-render-active!),
|
||||||
|
then fall back to registered primitives *)
|
||||||
|
let fn_val = try Hashtbl.find vm.globals name with Not_found ->
|
||||||
|
Sx_primitives.get_primitive name
|
||||||
|
in
|
||||||
|
(match fn_val with
|
||||||
| NativeFn (_, fn) -> fn args
|
| NativeFn (_, fn) -> fn args
|
||||||
| _ -> Nil)
|
| _ -> Nil)
|
||||||
with Eval_error msg ->
|
with Eval_error msg ->
|
||||||
|
|||||||
Reference in New Issue
Block a user