From 97bc549d4b8bf638946ac4ff3b066941bca9a03b Mon Sep 17 00:00:00 2001 From: rodri Date: Thu, 5 Sep 2024 15:45:27 +0000 Subject: initial compiler work. --- builtin.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 builtin.c (limited to 'builtin.c') diff --git a/builtin.c b/builtin.c new file mode 100644 index 0000000..ae7821e --- /dev/null +++ b/builtin.c @@ -0,0 +1,90 @@ +#include +#include +#include +#include "dat.h" +#include "fns.h" +#include "y.tab.h" + +static char *types[] = { + "double", + "point", + "vector", + "normal", + "quat", +}; + +static char *ctypes[] = { + "double", + "Point3", + "Point3", + "Point3", + "Quaternion", +}; + +static Const consts[] = { + "π", 3.14159265358979323846, + "e", 2.71828182845904523536, + "γ", 0.57721566490153286060, + "DEG", 57.29577951308232087680, + "Φ", 1.61803398874989484820, +}; + +static Builtin builtins[] = { + "sin", sin, + "cos", cos, + "atan", atan, + "atan2", atan2, + "log", log, + "log10", log10, + "exp", exp, + "sqrt", sqrt, + "int", round, + "abs", fabs, +}; + +double +round(double n) +{ + return floor(n + 0.5); +} + +int +lookuptype(char *s) +{ + int i; + + for(i = 0; i < nelem(types); i++) + if(strcmp(s, types[i]) == 0) + return i; + return -1; +} + +char * +typename(int t) +{ + if(t >= 0 && t < nelem(types)) + return types[t]; + return nil; +} + +char * +ctypename(int t) +{ + if(t >= 0 && t < nelem(ctypes)) + return ctypes[t]; + return nil; +} + +void +init(void) +{ + Symbol *s; + int i; + + for(i = 0; i < nelem(consts); i++) + install(consts[i].name, CONST, consts[i].val); + for(i = 0; i < nelem(builtins); i++){ + s = install(builtins[i].name, BLTIN, 0); + s->u.fn = builtins[i].fn; + } +} -- cgit v1.2.3