+static naRef f_cmp(naContext c, naRef me, int argc, naRef* args)
+{
+ char *a, *b;
+ int i, len;
+ if(argc < 2 || !naIsString(args[0]) || !naIsString(args[1]))
+ naRuntimeError(c, "bad argument to cmp");
+ a = naStr_data(args[0]);
+ b = naStr_data(args[1]);
+ len = naStr_len(args[0]);
+ if(naStr_len(args[1]) < len)
+ len = naStr_len(args[1]);
+ for(i=0; i<len; i++) {
+ int diff = a - b;
+ if(diff < 0) return naNum(-1);
+ else if(diff > 0) return naNum(1);
+ }
+ return naNum(0);
+}
+