123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include "sans.h"
- #include "garbagecollector.h"
- #include "runtime.h"
- sdata bltn__plus(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDNUMB(x.data.ivalue + y.data.ivalue);
- }
- log_err("runtime_eq/bltn_eq: non-number argument\n");
- exit(-1);
- }
- // subtraction
- sdata bltn__(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDNUMB(x.data.ivalue - y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // multiply
- sdata bltn__star(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDNUMB(x.data.ivalue * y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // divide
- sdata bltn__slash(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDNUMB(x.data.ivalue / y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // modulo
- sdata bltn_modulo(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDNUMB(x.data.ivalue % y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // =
- sdata bltn__eql(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDBOOL(x.data.ivalue == y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // >
- sdata bltn__to(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDBOOL(x.data.ivalue > y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // <
- sdata bltn__lt(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDBOOL(x.data.ivalue < y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // >=
- sdata bltn__to_eql(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDBOOL(x.data.ivalue >= y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
- // <=
- sdata bltn__lt_eql(sdata x, sdata y) {
- if (x.tag == tnumb && y.tag == tnumb) {
- return SDBOOL(x.data.ivalue <= y.data.ivalue);
- }
- log_err("runtime_eq/bltn_minus: non-number argument\n");
- exit(-1);
- }
|