Sigrid Solveig Haflínudóttiradd argcount_{least,most} for better errors messagesf739ebf2 months agoHistory
68 lines · 1.3 KB · C
RawDownload
#include "inc/priv.h"#include "inc/cvalues.h" BUILTIN("atan", atan){	argcount_least(1);	argcount_most(2);	if(nargs == 1)		return mk_f64(atan(todouble(args[0])));	return mk_f64(atan2(todouble(args[0]), todouble(args[1])));} BUILTIN("log", log){	argcount_least(1);	argcount_most(2);	if(nargs == 1)		return mk_f64(log(todouble(args[0])));	double x = todouble(args[0]);	if(isfixnum(args[1])){		sl_fx b = numval(args[1]);		if(b == 10)			return mk_f64(log10(x));#if !defined(__plan9__)		if(b == 2)			return mk_f64(log2(x));#endif	}	return mk_f64(log(x) / log(todouble(args[1])));} #define BUILTIN_(lname, cname) \	BUILTIN(lname, cname) \	{ \		argcount(1); \		return mk_f64(cname(todouble(args[0]))); \	} BUILTIN_("sqrt", sqrt)BUILTIN_("exp", exp)BUILTIN_("sin", sin)BUILTIN_("cos", cos)BUILTIN_("tan", tan)BUILTIN_("asin", asin)BUILTIN_("acos", acos)BUILTIN_("floor", floor)BUILTIN_("ceiling", ceil)BUILTIN_("sinh", sinh)BUILTIN_("cosh", cosh)BUILTIN_("tanh", tanh) #undef BUILTIN_#define BUILTIN_(lname, cname) \	BUILTIN(lname, cname) \	{ \		argcount(2); \		return mk_f64(cname(todouble(args[0]), todouble(args[1]))); \	} BUILTIN_("expt", pow) voidmath_init(void){	setc(mk_csym("+f32-epsilon+"), mk_f32(FLT_EPSILON));	setc(mk_csym("+f64-epsilon+"), mk_f64(DBL_EPSILON));	setc(mk_csym("+pi+"), mk_f64(3.14159265358979323846));}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t