Lines Matching refs:argv

18 subr_number_pred(VM* vm, int argc, scm_obj_t argv[])  in subr_number_pred()  argument
21 return number_pred(argv[0]) ? scm_true : scm_false; in subr_number_pred()
23 wrong_number_of_arguments_violation(vm, "number?", 1, 1, argc, argv); in subr_number_pred()
29 subr_complex_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_complex_pred() argument
32 return number_pred(argv[0]) ? scm_true : scm_false; in subr_complex_pred()
34 wrong_number_of_arguments_violation(vm, "complex?", 1, 1, argc, argv); in subr_complex_pred()
40 subr_real_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_real_pred() argument
43 return real_pred(argv[0]) ? scm_true : scm_false; in subr_real_pred()
45 wrong_number_of_arguments_violation(vm, "real?", 1, 1, argc, argv); in subr_real_pred()
51 subr_rational_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_rational_pred() argument
54 return rational_pred(argv[0]) ? scm_true : scm_false; in subr_rational_pred()
56 wrong_number_of_arguments_violation(vm, "rational?", 1, 1, argc, argv); in subr_rational_pred()
62 subr_integer_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_integer_pred() argument
65 return integer_pred(argv[0]) ? scm_true : scm_false; in subr_integer_pred()
67 wrong_number_of_arguments_violation(vm, "integer?", 1, 1, argc, argv); in subr_integer_pred()
73 subr_real_valued_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_real_valued_pred() argument
76 return real_valued_pred(argv[0]) ? scm_true : scm_false; in subr_real_valued_pred()
78 wrong_number_of_arguments_violation(vm, "real-valued?", 1, 1, argc, argv); in subr_real_valued_pred()
84 subr_rational_valued_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_rational_valued_pred() argument
87 return rational_valued_pred(argv[0]) ? scm_true : scm_false; in subr_rational_valued_pred()
89 wrong_number_of_arguments_violation(vm, "rational-valued?", 1, 1, argc, argv); in subr_rational_valued_pred()
95 subr_integer_valued_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_integer_valued_pred() argument
98 return integer_valued_pred(argv[0]) ? scm_true : scm_false; in subr_integer_valued_pred()
100 wrong_number_of_arguments_violation(vm, "integer-valued?", 1, 1, argc, argv); in subr_integer_valued_pred()
106 subr_exact_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_exact_pred() argument
109 if (number_pred(argv[0])) return n_exact_pred(argv[0]) ? scm_true : scm_false; in subr_exact_pred()
110 wrong_type_argument_violation(vm, "exact?", 0, "number", argv[0], argc, argv); in subr_exact_pred()
113 wrong_number_of_arguments_violation(vm, "exact?", 1, 1, argc, argv); in subr_exact_pred()
119 subr_inexact_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_inexact_pred() argument
122 if (number_pred(argv[0])) return n_exact_pred(argv[0]) ? scm_false : scm_true; in subr_inexact_pred()
123 wrong_type_argument_violation(vm, "inexact?", 0, "number", argv[0], argc, argv); in subr_inexact_pred()
126 wrong_number_of_arguments_violation(vm, "inexact?", 1, 1, argc, argv); in subr_inexact_pred()
134 subr_inexact(VM* vm, int argc, scm_obj_t argv[]) in subr_inexact() argument
137 if (number_pred(argv[0])) return cnvt_to_inexact(vm->m_heap, argv[0]); in subr_inexact()
138 wrong_type_argument_violation(vm, "inexact", 0, "number", argv[0], argc, argv); in subr_inexact()
141 wrong_number_of_arguments_violation(vm, "inexact", 1, 1, argc, argv); in subr_inexact()
147 subr_exact(VM* vm, int argc, scm_obj_t argv[]) in subr_exact() argument
150 if (number_pred(argv[0])) return cnvt_to_exact(vm->m_heap, argv[0]); in subr_exact()
151 wrong_type_argument_violation(vm, "exact", 0, "number", argv[0], argc, argv); in subr_exact()
154 wrong_number_of_arguments_violation(vm, "exact", 1, 1, argc, argv); in subr_exact()
162 subr_num_eq(VM* vm, int argc, scm_obj_t argv[]) in subr_num_eq() argument
165 if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return (argv[0] == argv[1]) ? scm_true : scm_false; in subr_num_eq()
166 …if (BOTHFLONUMP(argv[0], argv[1])) return (FLONUM(argv[0]) == FLONUM(argv[1])) ? scm_true : scm_fa… in subr_num_eq()
167 if (number_pred(argv[0])) { in subr_num_eq()
168 …if (number_pred(argv[1])) return n_equal_pred(vm->m_heap, argv[0], argv[1]) ? scm_true : scm_false; in subr_num_eq()
169 wrong_type_argument_violation(vm, "=", 1, "number", argv[1], argc, argv); in subr_num_eq()
172 wrong_type_argument_violation(vm, "=", 0, "number", argv[0], argc, argv); in subr_num_eq()
176 if (number_pred(argv[0])) return scm_true; in subr_num_eq()
177 wrong_type_argument_violation(vm, "=", 0, "number", argv[0], argc, argv); in subr_num_eq()
182 if (number_pred(argv[i])) continue; in subr_num_eq()
183 wrong_type_argument_violation(vm, "=", i, "number", argv[i], argc, argv); in subr_num_eq()
187 if (n_equal_pred(vm->m_heap, argv[i], argv[i + 1])) continue; in subr_num_eq()
192 wrong_number_of_arguments_violation(vm, "=", 1, -1, argc, argv); in subr_num_eq()
198 subr_num_lt(VM* vm, int argc, scm_obj_t argv[]) in subr_num_lt() argument
201 …if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return (FIXNUM(argv[0]) < FIXNUM(argv[1])) ? scm_true : s… in subr_num_lt()
202 …if (BOTHFLONUMP(argv[0], argv[1])) return (FLONUM(argv[0]) < FLONUM(argv[1])) ? scm_true : scm_fal… in subr_num_lt()
203 if (real_valued_pred(argv[0])) { in subr_num_lt()
204 if (real_valued_pred(argv[1])) { in subr_num_lt()
205 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_lt()
206 if (argv[1] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_lt()
207 return (n_compare(vm->m_heap, argv[0], argv[1]) < 0) ? scm_true : scm_false; in subr_num_lt()
209 wrong_type_argument_violation(vm, "<", 1, "real", argv[1], argc, argv); in subr_num_lt()
212 wrong_type_argument_violation(vm, "<", 0, "real", argv[0], argc, argv); in subr_num_lt()
216 if (real_valued_pred(argv[0])) { in subr_num_lt()
217 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_lt()
220 wrong_type_argument_violation(vm, "<", 0, "real", argv[0], argc, argv); in subr_num_lt()
226 if (argv[i] == vm->m_heap->m_inherents[FL_NAN]) { in subr_num_lt()
230 if (real_valued_pred(argv[i])) continue; in subr_num_lt()
231 wrong_type_argument_violation(vm, "<", i, "real", argv[i], argc, argv); in subr_num_lt()
236 if (n_compare(vm->m_heap, argv[i], argv[i + 1]) < 0) continue; in subr_num_lt()
241 wrong_number_of_arguments_violation(vm, "<", 1, -1, argc, argv); in subr_num_lt()
247 subr_num_gt(VM* vm, int argc, scm_obj_t argv[]) in subr_num_gt() argument
250 …if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return (FIXNUM(argv[0]) > FIXNUM(argv[1])) ? scm_true : s… in subr_num_gt()
251 …if (BOTHFLONUMP(argv[0], argv[1])) return (FLONUM(argv[0]) > FLONUM(argv[1])) ? scm_true : scm_fal… in subr_num_gt()
252 if (real_valued_pred(argv[0])) { in subr_num_gt()
253 if (real_valued_pred(argv[1])) { in subr_num_gt()
254 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_gt()
255 if (argv[1] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_gt()
256 return (n_compare(vm->m_heap, argv[0], argv[1]) > 0) ? scm_true : scm_false; in subr_num_gt()
258 wrong_type_argument_violation(vm, ">", 1, "real", argv[1], argc, argv); in subr_num_gt()
261 wrong_type_argument_violation(vm, ">", 0, "real", argv[0], argc, argv); in subr_num_gt()
265 if (real_valued_pred(argv[0])) { in subr_num_gt()
266 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_gt()
269 wrong_type_argument_violation(vm, ">", 0, "real", argv[0], argc, argv); in subr_num_gt()
275 if (argv[i] == vm->m_heap->m_inherents[FL_NAN]) { in subr_num_gt()
279 if (real_valued_pred(argv[i])) continue; in subr_num_gt()
280 wrong_type_argument_violation(vm, ">", i, "real", argv[i], argc, argv); in subr_num_gt()
285 if (n_compare(vm->m_heap, argv[i], argv[i + 1]) > 0) continue; in subr_num_gt()
290 wrong_number_of_arguments_violation(vm, ">", 1, -1, argc, argv); in subr_num_gt()
296 subr_num_le(VM* vm, int argc, scm_obj_t argv[]) in subr_num_le() argument
299 …if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return (FIXNUM(argv[0]) <= FIXNUM(argv[1])) ? scm_true : … in subr_num_le()
300 …if (BOTHFLONUMP(argv[0], argv[1])) return (FLONUM(argv[0]) <= FLONUM(argv[1])) ? scm_true : scm_fa… in subr_num_le()
301 if (real_valued_pred(argv[0])) { in subr_num_le()
302 if (real_valued_pred(argv[1])) { in subr_num_le()
303 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_le()
304 if (argv[1] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_le()
305 return (n_compare(vm->m_heap, argv[0], argv[1]) <= 0) ? scm_true : scm_false; in subr_num_le()
307 wrong_type_argument_violation(vm, "<=", 1, "real", argv[1], argc, argv); in subr_num_le()
310 wrong_type_argument_violation(vm, "<=", 0, "real", argv[0], argc, argv); in subr_num_le()
314 if (real_valued_pred(argv[0])) { in subr_num_le()
315 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_le()
318 wrong_type_argument_violation(vm, "<=", 0, "real", argv[0], argc, argv); in subr_num_le()
324 if (argv[i] == vm->m_heap->m_inherents[FL_NAN]) { in subr_num_le()
328 if (real_valued_pred(argv[i])) continue; in subr_num_le()
329 wrong_type_argument_violation(vm, "<=", i, "real", argv[i], argc, argv); in subr_num_le()
334 if (n_compare(vm->m_heap, argv[i], argv[i + 1]) <= 0) continue; in subr_num_le()
339 wrong_number_of_arguments_violation(vm, "<=", 1, -1, argc, argv); in subr_num_le()
345 subr_num_ge(VM* vm, int argc, scm_obj_t argv[]) in subr_num_ge() argument
348 …if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return (FIXNUM(argv[0]) >= FIXNUM(argv[1])) ? scm_true : … in subr_num_ge()
349 …if (BOTHFLONUMP(argv[0], argv[1])) return (FLONUM(argv[0]) >= FLONUM(argv[1])) ? scm_true : scm_fa… in subr_num_ge()
350 if (real_valued_pred(argv[0])) { in subr_num_ge()
351 if (real_valued_pred(argv[1])) { in subr_num_ge()
352 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_ge()
353 if (argv[1] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_ge()
354 return (n_compare(vm->m_heap, argv[0], argv[1]) >= 0) ? scm_true : scm_false; in subr_num_ge()
356 wrong_type_argument_violation(vm, ">=", 1, "real", argv[1], argc, argv); in subr_num_ge()
359 wrong_type_argument_violation(vm, ">=", 0, "real", argv[0], argc, argv); in subr_num_ge()
363 if (real_valued_pred(argv[0])) { in subr_num_ge()
364 if (argv[0] == vm->m_heap->m_inherents[FL_NAN]) return scm_false; in subr_num_ge()
367 wrong_type_argument_violation(vm, ">=", 0, "real", argv[0], argc, argv); in subr_num_ge()
373 if (argv[i] == vm->m_heap->m_inherents[FL_NAN]) { in subr_num_ge()
377 if (real_valued_pred(argv[i])) continue; in subr_num_ge()
378 wrong_type_argument_violation(vm, ">=", i, "real", argv[i], argc, argv); in subr_num_ge()
383 if (n_compare(vm->m_heap, argv[i], argv[i + 1]) >= 0) continue; in subr_num_ge()
388 wrong_number_of_arguments_violation(vm, ">=", 1, -1, argc, argv); in subr_num_ge()
394 subr_zero_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_zero_pred() argument
397 if (number_pred(argv[0])) return n_zero_pred(argv[0]) ? scm_true : scm_false; in subr_zero_pred()
398 wrong_type_argument_violation(vm, "zero?", 0, "number", argv[0], argc, argv); in subr_zero_pred()
401 wrong_number_of_arguments_violation(vm, "zero?", 1, 1, argc, argv); in subr_zero_pred()
407 subr_positive_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_positive_pred() argument
410 if (real_valued_pred(argv[0])) return n_positive_pred(argv[0]) ? scm_true : scm_false; in subr_positive_pred()
411 wrong_type_argument_violation(vm, "positive?", 0, "real", argv[0], argc, argv); in subr_positive_pred()
414 wrong_number_of_arguments_violation(vm, "positive?", 1, 1, argc, argv); in subr_positive_pred()
420 subr_negative_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_negative_pred() argument
423 if (real_valued_pred(argv[0])) return n_negative_pred(argv[0]) ? scm_true : scm_false; in subr_negative_pred()
424 wrong_type_argument_violation(vm, "negative?", 0, "real", argv[0], argc, argv); in subr_negative_pred()
427 wrong_number_of_arguments_violation(vm, "negative?", 1, 1, argc, argv); in subr_negative_pred()
433 subr_odd_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_odd_pred() argument
436 if (integer_valued_pred(argv[0])) { in subr_odd_pred()
437 return n_even_pred(argv[0]) ? scm_false : scm_true; in subr_odd_pred()
439 wrong_type_argument_violation(vm, "odd?", 0, "integer", argv[0], argc, argv); in subr_odd_pred()
442 wrong_number_of_arguments_violation(vm, "odd?", 1, 1, argc, argv); in subr_odd_pred()
449 subr_even_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_even_pred() argument
452 if (integer_valued_pred(argv[0])) { in subr_even_pred()
453 return n_even_pred(argv[0]) ? scm_true : scm_false; in subr_even_pred()
455 wrong_type_argument_violation(vm, "even?", 0, "integer", argv[0], argc, argv); in subr_even_pred()
458 wrong_number_of_arguments_violation(vm, "even?", 1, 1, argc, argv); in subr_even_pred()
464 subr_finite_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_finite_pred() argument
467 if (real_pred(argv[0])) { in subr_finite_pred()
468 if (FLONUMP(argv[0])) { in subr_finite_pred()
469 scm_flonum_t flonum = (scm_flonum_t)argv[0]; in subr_finite_pred()
475 wrong_type_argument_violation(vm, "finite?", 0, "real", argv[0], argc, argv); in subr_finite_pred()
478 wrong_number_of_arguments_violation(vm, "finite?", 1, 1, argc, argv); in subr_finite_pred()
484 subr_infinite_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_infinite_pred() argument
487 if (real_pred(argv[0])) { in subr_infinite_pred()
488 if (FLONUMP(argv[0])) { in subr_infinite_pred()
489 scm_flonum_t flonum = (scm_flonum_t)argv[0]; in subr_infinite_pred()
494 wrong_type_argument_violation(vm, "infinite?", 0, "real", argv[0], argc, argv); in subr_infinite_pred()
497 wrong_number_of_arguments_violation(vm, "infinite?", 1, 1, argc, argv); in subr_infinite_pred()
503 subr_nan_pred(VM* vm, int argc, scm_obj_t argv[]) in subr_nan_pred() argument
506 if (real_pred(argv[0])) { in subr_nan_pred()
507 if (FLONUMP(argv[0])) { in subr_nan_pred()
508 scm_flonum_t flonum = (scm_flonum_t)argv[0]; in subr_nan_pred()
513 wrong_type_argument_violation(vm, "nan?", 0, "real", argv[0], argc, argv); in subr_nan_pred()
516 wrong_number_of_arguments_violation(vm, "nan?", 1, 1, argc, argv); in subr_nan_pred()
524 subr_num_add(VM* vm, int argc, scm_obj_t argv[]) in subr_num_add() argument
527 …if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return intptr_to_integer(vm->m_heap, FIXNUM(argv[0]) + FI… in subr_num_add()
528 …if (BOTHFLONUMP(argv[0], argv[1])) return make_flonum(vm->m_heap, FLONUM(argv[0]) + FLONUM(argv[1]… in subr_num_add()
529 if (number_pred(argv[0])) { in subr_num_add()
530 if (number_pred(argv[1])) return arith_add(vm->m_heap, argv[0], argv[1]); in subr_num_add()
531 wrong_type_argument_violation(vm, "+", 1, "number", argv[1], argc, argv); in subr_num_add()
534 wrong_type_argument_violation(vm, "+", 0, "number", argv[0], argc, argv); in subr_num_add()
538 if (number_pred(argv[0])) return argv[0]; in subr_num_add()
539 wrong_type_argument_violation(vm, "+", 0, "number", argv[0], argc, argv); in subr_num_add()
544 if (number_pred(argv[i])) continue; in subr_num_add()
545 wrong_type_argument_violation(vm, "+", i, "number", argv[i], argc, argv); in subr_num_add()
548 scm_obj_t acc = argv[0]; in subr_num_add()
550 acc = arith_add(vm->m_heap, acc, argv[i]); in subr_num_add()
557 subr_num_sub(VM* vm, int argc, scm_obj_t argv[]) in subr_num_sub() argument
560 …if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) return intptr_to_integer(vm->m_heap, FIXNUM(argv[0]) - FI… in subr_num_sub()
561 …if (BOTHFLONUMP(argv[0], argv[1])) return make_flonum(vm->m_heap, FLONUM(argv[0]) - FLONUM(argv[1]… in subr_num_sub()
562 if (number_pred(argv[0])) { in subr_num_sub()
563 if (number_pred(argv[1])) return arith_sub(vm->m_heap, argv[0], argv[1]); in subr_num_sub()
564 wrong_type_argument_violation(vm, "-", 1, "number", argv[1], argc, argv); in subr_num_sub()
567 wrong_type_argument_violation(vm, "-", 0, "number", argv[0], argc, argv); in subr_num_sub()
571 if (number_pred(argv[0])) return arith_negate(vm->m_heap, argv[0]); in subr_num_sub()
572 wrong_type_argument_violation(vm, "-", 0, "number", argv[0], argc, argv); in subr_num_sub()
576 wrong_number_of_arguments_violation(vm, "-", 1, -1, argc, argv); in subr_num_sub()
580 if (number_pred(argv[i])) continue; in subr_num_sub()
581 wrong_type_argument_violation(vm, "-", i, "number", argv[i], argc, argv); in subr_num_sub()
584 scm_obj_t acc = argv[0]; in subr_num_sub()
586 acc = arith_sub(vm->m_heap, acc, argv[i]); in subr_num_sub()
593 subr_num_mul(VM* vm, int argc, scm_obj_t argv[]) in subr_num_mul() argument
596 if (FIXNUMP(argv[0]) & FIXNUMP(argv[1])) { in subr_num_mul()
598 int128_t n128 = (int128_t)FIXNUM(argv[0]) * FIXNUM(argv[1]); in subr_num_mul()
602 int64_t n64 = (int64_t)FIXNUM(argv[0]) * FIXNUM(argv[1]); in subr_num_mul()
607 …if (BOTHFLONUMP(argv[0], argv[1])) return make_flonum(vm->m_heap, FLONUM(argv[0]) * FLONUM(argv[1]… in subr_num_mul()
608 if (number_pred(argv[0])) { in subr_num_mul()
609 if (number_pred(argv[1])) return arith_mul(vm->m_heap, argv[0], argv[1]); in subr_num_mul()
610 wrong_type_argument_violation(vm, "*", 1, "number", argv[1], argc, argv); in subr_num_mul()
613 wrong_type_argument_violation(vm, "*", 0, "number", argv[0], argc, argv); in subr_num_mul()
618 if (number_pred(argv[i])) continue; in subr_num_mul()
619 wrong_type_argument_violation(vm, "*", i, "number", argv[i], argc, argv); in subr_num_mul()
622 scm_obj_t acc = argv[0]; in subr_num_mul()
624 acc = arith_mul(vm->m_heap, acc, argv[i]); in subr_num_mul()
629 if (number_pred(argv[0])) return argv[0]; in subr_num_mul()
630 wrong_type_argument_violation(vm, "*", 0, "number", argv[0], argc, argv); in subr_num_mul()
638 subr_num_div(VM* vm, int argc, scm_obj_t argv[]) in subr_num_div() argument
641 …if (BOTHFLONUMP(argv[0], argv[1])) return make_flonum(vm->m_heap, FLONUM(argv[0]) / FLONUM(argv[1]… in subr_num_div()
642 if (argv[1] == MAKEFIXNUM(0)) { in subr_num_div()
643 if (number_pred(argv[0])) { in subr_num_div()
644 if (n_exact_pred(argv[0])) { in subr_num_div()
645 invalid_argument_violation(vm, "/", "undefined for 0", NULL, 0, argc, argv); in subr_num_div()
648 return arith_div(vm->m_heap, argv[0], make_flonum(vm->m_heap, 0.0)); in subr_num_div()
651 if (number_pred(argv[0])) { in subr_num_div()
652 if (number_pred(argv[1])) return arith_div(vm->m_heap, argv[0], argv[1]); in subr_num_div()
653 wrong_type_argument_violation(vm, "/", 1, "number", argv[1], argc, argv); in subr_num_div()
656 wrong_type_argument_violation(vm, "/", 0, "number", argv[0], argc, argv); in subr_num_div()
660 if (number_pred(argv[0])) { in subr_num_div()
661 if (argv[0] != MAKEFIXNUM(0)) return arith_inverse(vm->m_heap, argv[0]); in subr_num_div()
662 invalid_argument_violation(vm, "/", "undefined for 0", NULL, 0, argc, argv); in subr_num_div()
665 wrong_type_argument_violation(vm, "/", 0, "number", argv[0], argc, argv); in subr_num_div()
669 wrong_number_of_arguments_violation(vm, "/", 1, -1, argc, argv); in subr_num_div()
673 if (number_pred(argv[i])) continue; in subr_num_div()
674 wrong_type_argument_violation(vm, "/", i, "number", argv[i], argc, argv); in subr_num_div()
677 scm_obj_t acc = argv[0]; in subr_num_div()
679 if (argv[i] == MAKEFIXNUM(0)) { in subr_num_div()
681 invalid_argument_violation(vm, "/", "undefined for 0", NULL, i, argc, argv); in subr_num_div()
687 acc = arith_div(vm->m_heap, acc, argv[i]); in subr_num_div()
694 subr_abs(VM* vm, int argc, scm_obj_t argv[]) in subr_abs() argument
697 if (real_pred(argv[0])) return arith_magnitude(vm->m_heap, argv[0]); in subr_abs()
698 wrong_type_argument_violation(vm, "abs", 0, "real", argv[0], argc, argv); in subr_abs()
701 wrong_number_of_arguments_violation(vm, "abs", 1, 1, argc, argv); in subr_abs()
709 subr_int_div(VM* vm, int argc, scm_obj_t argv[]) in subr_int_div() argument
712 if (real_pred(argv[0])) { in subr_int_div()
713 if (n_finite_pred(argv[0])) { in subr_int_div()
714 if (real_pred(argv[1])) { in subr_int_div()
715 if (!n_zero_pred(argv[1])) { in subr_int_div()
716 return arith_integer_div(vm->m_heap, argv[0], argv[1]); in subr_int_div()
718 invalid_argument_violation(vm, "div", "undefined for 0", NULL, 0, argc, argv); in subr_int_div()
721 wrong_type_argument_violation(vm, "div", 0, "real", argv[1], argc, argv); in subr_int_div()
724 … wrong_type_argument_violation(vm, "div", 0, "neither infinite nor a NaN", argv[0], argc, argv); in subr_int_div()
727 wrong_type_argument_violation(vm, "div", 0, "real", argv[0], argc, argv); in subr_int_div()
730 wrong_number_of_arguments_violation(vm, "div", 2, 2, argc, argv); in subr_int_div()
738 subr_int_div0(VM* vm, int argc, scm_obj_t argv[]) in subr_int_div0() argument
741 if (real_pred(argv[0])) { in subr_int_div0()
742 if (n_finite_pred(argv[0])) { in subr_int_div0()
743 if (real_pred(argv[1])) { in subr_int_div0()
744 if (!n_zero_pred(argv[1])) { in subr_int_div0()
745 return arith_integer_div0(vm->m_heap, argv[0], argv[1]); in subr_int_div0()
747 invalid_argument_violation(vm, "div0", "undefined for 0", NULL, 0, argc, argv); in subr_int_div0()
750 wrong_type_argument_violation(vm, "div0", 0, "real", argv[1], argc, argv); in subr_int_div0()
753 … wrong_type_argument_violation(vm, "div0", 0, "neither infinite nor a NaN", argv[0], argc, argv); in subr_int_div0()
756 wrong_type_argument_violation(vm, "div0", 0, "real", argv[0], argc, argv); in subr_int_div0()
759 wrong_number_of_arguments_violation(vm, "div0", 2, 2, argc, argv); in subr_int_div0()
767 subr_numerator(VM* vm, int argc, scm_obj_t argv[]) in subr_numerator() argument
770 if (real_valued_pred(argv[0])) { in subr_numerator()
771 if (FLONUMP(argv[0]) && FLONUM(argv[0]) == 0.0) return argv[0]; in subr_numerator()
772 bool inexact = FLONUMP(argv[0]); in subr_numerator()
773 scm_obj_t obj = cnvt_to_exact(vm->m_heap, argv[0]); in subr_numerator()
780 wrong_type_argument_violation(vm, "numerator", 0, "real", argv[0], argc, argv); in subr_numerator()
783 wrong_number_of_arguments_violation(vm, "numerator", 1, 1, argc, argv); in subr_numerator()
789 subr_denominator(VM* vm, int argc, scm_obj_t argv[]) in subr_denominator() argument
792 if (real_valued_pred(argv[0])) { in subr_denominator()
793 bool inexact = FLONUMP(argv[0]); in subr_denominator()
794 scm_obj_t obj = cnvt_to_exact(vm->m_heap, argv[0]); in subr_denominator()
801 wrong_type_argument_violation(vm, "denominator", 0, "real", argv[0], argc, argv); in subr_denominator()
804 wrong_number_of_arguments_violation(vm, "denominator", 1, 1, argc, argv); in subr_denominator()
810 subr_floor(VM* vm, int argc, scm_obj_t argv[]) in subr_floor() argument
813 if (COMPLEXP(argv[0])) { in subr_floor()
814 scm_complex_t cn = (scm_complex_t)argv[0]; in subr_floor()
816 argv[0] = cn->real; in subr_floor()
819 wrong_type_argument_violation(vm, "floor", 0, "real", argv[0], argc, argv); in subr_floor()
823 if (FLONUMP(argv[0])) { in subr_floor()
824 double value = ((scm_flonum_t)argv[0])->value; in subr_floor()
827 if (FIXNUMP(argv[0]) || BIGNUMP(argv[0])) return argv[0]; in subr_floor()
828 if (RATIONALP(argv[0])) return arith_floor(vm->m_heap, argv[0]); in subr_floor()
829 wrong_type_argument_violation(vm, "floor", 0, "number", argv[0], argc, argv); in subr_floor()
832 wrong_number_of_arguments_violation(vm, "floor", 1, 1, argc, argv); in subr_floor()
838 subr_ceiling(VM* vm, int argc, scm_obj_t argv[]) in subr_ceiling() argument
841 if (COMPLEXP(argv[0])) { in subr_ceiling()
842 scm_complex_t cn = (scm_complex_t)argv[0]; in subr_ceiling()
844 argv[0] = cn->real; in subr_ceiling()
847 wrong_type_argument_violation(vm, "ceiling", 0, "real", argv[0], argc, argv); in subr_ceiling()
851 if (FLONUMP(argv[0])) { in subr_ceiling()
852 double value = ((scm_flonum_t)argv[0])->value; in subr_ceiling()
855 if (FIXNUMP(argv[0])) return argv[0]; in subr_ceiling()
856 if (BIGNUMP(argv[0])) return argv[0]; in subr_ceiling()
857 if (RATIONALP(argv[0])) { in subr_ceiling()
858 scm_rational_t rn = (scm_rational_t)argv[0]; in subr_ceiling()
864 wrong_type_argument_violation(vm, "ceiling", 0, "number", argv[0], argc, argv); in subr_ceiling()
867 wrong_number_of_arguments_violation(vm, "ceiling", 1, 1, argc, argv); in subr_ceiling()
873 subr_truncate(VM* vm, int argc, scm_obj_t argv[]) in subr_truncate() argument
876 if (COMPLEXP(argv[0])) { in subr_truncate()
877 scm_complex_t cn = (scm_complex_t)argv[0]; in subr_truncate()
879 argv[0] = cn->real; in subr_truncate()
882 wrong_type_argument_violation(vm, "truncate", 0, "real", argv[0], argc, argv); in subr_truncate()
886 if (FLONUMP(argv[0])) { in subr_truncate()
887 double value = ((scm_flonum_t)argv[0])->value; in subr_truncate()
890 if (FIXNUMP(argv[0])) return argv[0]; in subr_truncate()
891 if (BIGNUMP(argv[0])) return argv[0]; in subr_truncate()
892 if (RATIONALP(argv[0])) { in subr_truncate()
893 scm_rational_t rn = (scm_rational_t)argv[0]; in subr_truncate()
896 wrong_type_argument_violation(vm, "truncate", 0, "number", argv[0], argc, argv); in subr_truncate()
899 wrong_number_of_arguments_violation(vm, "truncate", 1, 1, argc, argv); in subr_truncate()
905 subr_round(VM* vm, int argc, scm_obj_t argv[]) in subr_round() argument
908 if (COMPLEXP(argv[0])) { in subr_round()
909 scm_complex_t cn = (scm_complex_t)argv[0]; in subr_round()
911 argv[0] = cn->real; in subr_round()
914 wrong_type_argument_violation(vm, "round", 0, "real", argv[0], argc, argv); in subr_round()
918 if (FLONUMP(argv[0])) { in subr_round()
919 double value = ((scm_flonum_t)argv[0])->value; in subr_round()
925 if (FIXNUMP(argv[0])) return argv[0]; in subr_round()
926 if (BIGNUMP(argv[0])) return argv[0]; in subr_round()
927 if (RATIONALP(argv[0])) { in subr_round()
928 scm_rational_t rn = (scm_rational_t)argv[0]; in subr_round()
944 wrong_type_argument_violation(vm, "round", 0, "number", argv[0], argc, argv); in subr_round()
947 wrong_number_of_arguments_violation(vm, "round", 1, 1, argc, argv); in subr_round()
955 subr_exp(VM* vm, int argc, scm_obj_t argv[]) in subr_exp() argument
958 if (number_pred(argv[0])) return arith_exp(vm->m_heap, argv[0]); in subr_exp()
959 wrong_type_argument_violation(vm, "exp", 0, "number", argv[0], argc, argv); in subr_exp()
962 wrong_number_of_arguments_violation(vm, "exp", 1, 1, argc, argv); in subr_exp()
968 subr_log(VM* vm, int argc, scm_obj_t argv[]) in subr_log() argument
971 if (number_pred(argv[0])) { in subr_log()
972 if (argv[0] == MAKEFIXNUM(0)) { in subr_log()
973 invalid_argument_violation(vm, "log", "undefined for 0", NULL, 0, argc, argv); in subr_log()
976 return arith_log(vm->m_heap, argv[0]); in subr_log()
978 wrong_type_argument_violation(vm, "log", 0, "number", argv[0], argc, argv); in subr_log()
982 if (number_pred(argv[0])) { in subr_log()
983 if (argv[0] == MAKEFIXNUM(0)) { in subr_log()
984 invalid_argument_violation(vm, "log", "undefined for 0", NULL, 0, argc, argv); in subr_log()
987 if (number_pred(argv[1])) { in subr_log()
988 if (argv[1] == MAKEFIXNUM(0)) { in subr_log()
989 … invalid_argument_violation(vm, "log", "undefined for base 0", NULL, 0, argc, argv); in subr_log()
992 … return arith_div(vm->m_heap, arith_log(vm->m_heap, argv[0]), arith_log(vm->m_heap, argv[1])); in subr_log()
994 wrong_type_argument_violation(vm, "log", 1, "number", argv[1], argc, argv); in subr_log()
997 wrong_type_argument_violation(vm, "log", 0, "number", argv[0], argc, argv); in subr_log()
1000 wrong_number_of_arguments_violation(vm, "log", 1, 1, argc, argv); in subr_log()
1006 subr_sin(VM* vm, int argc, scm_obj_t argv[]) in subr_sin() argument
1009 if (number_pred(argv[0])) return arith_sin(vm->m_heap, argv[0]); in subr_sin()
1010 wrong_type_argument_violation(vm, "sin", 0, "number", argv[0], argc, argv); in subr_sin()
1013 wrong_number_of_arguments_violation(vm, "sin", 1, 1, argc, argv); in subr_sin()
1019 subr_cos(VM* vm, int argc, scm_obj_t argv[]) in subr_cos() argument
1022 if (number_pred(argv[0])) return arith_cos(vm->m_heap, argv[0]); in subr_cos()
1023 wrong_type_argument_violation(vm, "cos", 0, "number", argv[0], argc, argv); in subr_cos()
1026 wrong_number_of_arguments_violation(vm, "cos", 1, 1, argc, argv); in subr_cos()
1032 subr_tan(VM* vm, int argc, scm_obj_t argv[]) in subr_tan() argument
1035 if (number_pred(argv[0])) return arith_tan(vm->m_heap, argv[0]); in subr_tan()
1036 wrong_type_argument_violation(vm, "tan", 0, "number", argv[0], argc, argv); in subr_tan()
1039 wrong_number_of_arguments_violation(vm, "tan", 1, 1, argc, argv); in subr_tan()
1045 subr_asin(VM* vm, int argc, scm_obj_t argv[]) in subr_asin() argument
1048 if (number_pred(argv[0])) return arith_asin(vm->m_heap, argv[0]); in subr_asin()
1049 wrong_type_argument_violation(vm, "asin", 0, "number", argv[0], argc, argv); in subr_asin()
1052 wrong_number_of_arguments_violation(vm, "asin", 1, 1, argc, argv); in subr_asin()
1058 subr_acos(VM* vm, int argc, scm_obj_t argv[]) in subr_acos() argument
1061 if (number_pred(argv[0])) return arith_acos(vm->m_heap, argv[0]); in subr_acos()
1062 wrong_type_argument_violation(vm, "acos", 0, "number", argv[0], argc, argv); in subr_acos()
1065 wrong_number_of_arguments_violation(vm, "acos", 1, 1, argc, argv); in subr_acos()
1071 subr_atan(VM* vm, int argc, scm_obj_t argv[]) in subr_atan() argument
1074 if (number_pred(argv[0])) return arith_atan(vm->m_heap, argv[0]); in subr_atan()
1075 wrong_type_argument_violation(vm, "atan", 0, "number", argv[0], argc, argv); in subr_atan()
1079 if (real_valued_pred(argv[0])) { in subr_atan()
1080 if (real_valued_pred(argv[1])) { in subr_atan()
1081 return arith_atan2(vm->m_heap, argv[0], argv[1]); in subr_atan()
1083 wrong_type_argument_violation(vm, "atan", 1, "real", argv[1], argc, argv); in subr_atan()
1086 wrong_type_argument_violation(vm, "atan", 0, "real", argv[0], argc, argv); in subr_atan()
1089 wrong_number_of_arguments_violation(vm, "atan", 1, 2, argc, argv); in subr_atan()
1095 subr_sqrt(VM* vm, int argc, scm_obj_t argv[]) in subr_sqrt() argument
1098 if (number_pred(argv[0])) return arith_sqrt(vm->m_heap, argv[0]); in subr_sqrt()
1099 wrong_type_argument_violation(vm, "sqrt", 0, "number", argv[0], argc, argv); in subr_sqrt()
1102 wrong_number_of_arguments_violation(vm, "sqrt", 1, 1, argc, argv); in subr_sqrt()
1108 subr_exact_integer_sqrt(VM* vm, int argc, scm_obj_t argv[]) in subr_exact_integer_sqrt() argument
1111 if (exact_non_negative_integer_pred(argv[0])) { in subr_exact_integer_sqrt()
1112 exact_integer_sqrt_ans_t ans = arith_exact_integer_sqrt(vm->m_heap, argv[0]); in subr_exact_integer_sqrt()
1118 …argument_violation(vm, "exact-integer-sqrt", 0, "non-negative exact integer", argv[0], argc, argv); in subr_exact_integer_sqrt()
1121 wrong_number_of_arguments_violation(vm, "exact-integer-sqrt", 1, 1, argc, argv); in subr_exact_integer_sqrt()
1127 subr_expt(VM* vm, int argc, scm_obj_t argv[]) in subr_expt() argument
1130 if (number_pred(argv[0])) { in subr_expt()
1131 if (number_pred(argv[1])) { in subr_expt()
1132 if (argv[0] == MAKEFIXNUM(1)) { in subr_expt()
1133 if (n_exact_pred(argv[1])) return MAKEFIXNUM(1); in subr_expt()
1136 if (argv[0] == MAKEFIXNUM(-1) && n_exact_pred(argv[1])) { in subr_expt()
1137 if (n_even_pred(argv[1])) return MAKEFIXNUM(1); in subr_expt()
1140 if (argv[0] == MAKEFIXNUM(0)) { in subr_expt()
1141 if (n_zero_pred(argv[1])) { in subr_expt()
1142 if (n_exact_pred(argv[1])) return MAKEFIXNUM(1); in subr_expt()
1145 if (real_valued_pred(argv[1])) { in subr_expt()
1146 … if (n_negative_pred(argv[1])) return make_complex(vm->m_heap, VALUE_NAN, VALUE_NAN); in subr_expt()
1147 if (n_exact_pred(argv[1])) return MAKEFIXNUM(0); in subr_expt()
1150 assert(COMPLEXP(argv[1])); in subr_expt()
1151 if (n_positive_pred(((scm_complex_t)argv[1])->real)) { in subr_expt()
1152 if (n_exact_pred(argv[1])) return MAKEFIXNUM(0); in subr_expt()
1158 if (n_exact_pred(argv[0]) && BIGNUMP(argv[1])) { in subr_expt()
1159 …ment_violation(vm, "expt", "calculated number is too big to fit into memory", NULL, 0, argc, argv); in subr_expt()
1162 return arith_expt(vm->m_heap, argv[0], argv[1]); in subr_expt()
1164 wrong_type_argument_violation(vm, "expt", 1, "number", argv[1], argc, argv); in subr_expt()
1167 wrong_type_argument_violation(vm, "expt", 0, "number", argv[0], argc, argv); in subr_expt()
1170 wrong_number_of_arguments_violation(vm, "expt", 2, 2, argc, argv); in subr_expt()
1176 subr_make_rectangular(VM* vm, int argc, scm_obj_t argv[]) in subr_make_rectangular() argument
1179 if (real_valued_pred(argv[0])) { in subr_make_rectangular()
1180 if (real_valued_pred(argv[1])) { in subr_make_rectangular()
1181 scm_obj_t real = COMPLEXP(argv[0]) ? ((scm_complex_t)argv[0])->real : argv[0]; in subr_make_rectangular()
1182 scm_obj_t imag = COMPLEXP(argv[1]) ? ((scm_complex_t)argv[1])->real : argv[1]; in subr_make_rectangular()
1185 wrong_type_argument_violation(vm, "make-rectangular", 1, "real", argv[1], argc, argv); in subr_make_rectangular()
1188 wrong_type_argument_violation(vm, "make-rectangular", 0, "real", argv[0], argc, argv); in subr_make_rectangular()
1191 wrong_number_of_arguments_violation(vm, "make-rectangular", 2, 2, argc, argv); in subr_make_rectangular()
1197 subr_make_polar(VM* vm, int argc, scm_obj_t argv[]) in subr_make_polar() argument
1200 if (real_valued_pred(argv[0])) { in subr_make_polar()
1201 if (real_valued_pred(argv[1])) { in subr_make_polar()
1202 scm_obj_t real = COMPLEXP(argv[0]) ? ((scm_complex_t)argv[0])->real : argv[0]; in subr_make_polar()
1203 scm_obj_t imag = COMPLEXP(argv[1]) ? ((scm_complex_t)argv[1])->real : argv[1]; in subr_make_polar()
1206 wrong_type_argument_violation(vm, "make-polar", 1, "real", argv[1], argc, argv); in subr_make_polar()
1209 wrong_type_argument_violation(vm, "make-polar", 0, "real", argv[0], argc, argv); in subr_make_polar()
1212 wrong_number_of_arguments_violation(vm, "make-polar", 2, 2, argc, argv); in subr_make_polar()
1218 subr_real_part(VM* vm, int argc, scm_obj_t argv[]) in subr_real_part() argument
1221 if (COMPLEXP(argv[0])) return ((scm_complex_t)argv[0])->real; in subr_real_part()
1222 if (real_valued_pred(argv[0])) return argv[0]; in subr_real_part()
1223 wrong_type_argument_violation(vm, "real-part", 0, "number", argv[0], argc, argv); in subr_real_part()
1226 wrong_number_of_arguments_violation(vm, "real-part", 1, 1, argc, argv); in subr_real_part()
1232 subr_imag_part(VM* vm, int argc, scm_obj_t argv[]) in subr_imag_part() argument
1235 if (COMPLEXP(argv[0])) return ((scm_complex_t)argv[0])->imag; in subr_imag_part()
1236 …if (FIXNUMP(argv[0]) || FLONUMP(argv[0]) || BIGNUMP(argv[0]) || RATIONALP(argv[0])) return MAKEFIX… in subr_imag_part()
1237 wrong_type_argument_violation(vm, "imag-part", 0, "number", argv[0], argc, argv); in subr_imag_part()
1240 wrong_number_of_arguments_violation(vm, "imag-part", 1, 1, argc, argv); in subr_imag_part()
1246 subr_magnitude(VM* vm, int argc, scm_obj_t argv[]) in subr_magnitude() argument
1249 if (number_pred(argv[0])) return arith_magnitude(vm->m_heap, argv[0]); in subr_magnitude()
1250 wrong_type_argument_violation(vm, "magnitude", 0, "number", argv[0], argc, argv); in subr_magnitude()
1253 wrong_number_of_arguments_violation(vm, "magnitude", 1, 1, argc, argv); in subr_magnitude()
1260 subr_angle(VM* vm, int argc, scm_obj_t argv[]) in subr_angle() argument
1263 if (number_pred(argv[0])) return arith_angle(vm->m_heap, argv[0]); in subr_angle()
1264 wrong_type_argument_violation(vm, "angle", 0, "number", argv[0], argc, argv); in subr_angle()
1267 wrong_number_of_arguments_violation(vm, "angle", 1, 1, argc, argv); in subr_angle()
1275 subr_number_to_string(VM* vm, int argc, scm_obj_t argv[]) in subr_number_to_string() argument
1280 if (FIXNUMP(argv[1])) { in subr_number_to_string()
1281 radix = FIXNUM(argv[1]); in subr_number_to_string()
1285 …tion(vm, "number->string", "radix must be either 2, 8, 10 or 16, but got", argv[1], 1, argc, argv); in subr_number_to_string()
1289 if (exact_non_negative_integer_pred(argv[1])) { in subr_number_to_string()
1290 …tion(vm, "number->string", "radix must be either 2, 8, 10 or 16, but got", argv[1], 1, argc, argv); in subr_number_to_string()
1293 …ype_argument_violation(vm, "number->string", 1, "exact non-negative integer", argv[1], argc, argv); in subr_number_to_string()
1297 if (exact_non_negative_integer_pred(argv[2])) { in subr_number_to_string()
1300 …ype_argument_violation(vm, "number->string", 2, "exact non-negative integer", argv[2], argc, argv); in subr_number_to_string()
1305 if (number_pred(argv[0])) { in subr_number_to_string()
1306 …if (radix == 10 || n_exact_pred(argv[0])) return cnvt_number_to_string(vm->m_heap, argv[0], radix); in subr_number_to_string()
1307 …t_violation(vm, "number->string", "radix must be 10 for inexact, but got", argv[1], 1, argc, argv); in subr_number_to_string()
1310 wrong_type_argument_violation(vm, "number->string", 0, "number", argv[0], argc, argv); in subr_number_to_string()
1313 wrong_number_of_arguments_violation(vm, "number->string", 1, 3, argc, argv); in subr_number_to_string()
1319 subr_string_to_number(VM* vm, int argc, scm_obj_t argv[]) in subr_string_to_number() argument
1324 if (FIXNUMP(argv[1])) { in subr_string_to_number()
1325 radix = FIXNUM(argv[1]); in subr_string_to_number()
1329 …tion(vm, "string->number", "radix must be either 2, 8, 10 or 16, but got", argv[1], 1, argc, argv); in subr_string_to_number()
1333 if (exact_non_negative_integer_pred(argv[1])) { in subr_string_to_number()
1334 …tion(vm, "string->number", "radix must be either 2, 8, 10 or 16, but got", argv[1], 1, argc, argv); in subr_string_to_number()
1337 …ype_argument_violation(vm, "string->number", 1, "exact non-negative integer", argv[1], argc, argv); in subr_string_to_number()
1341 if (STRINGP(argv[0])) { in subr_string_to_number()
1342 scm_string_t string = (scm_string_t)argv[0]; in subr_string_to_number()
1345 wrong_type_argument_violation(vm, "string->number", 0, "string", argv[0], argc, argv); in subr_string_to_number()
1348 wrong_number_of_arguments_violation(vm, "string->number", 1, 2, argc, argv); in subr_string_to_number()