diff options
| -rwxr-xr-x | ell.c | 38 | 
1 files changed, 37 insertions, 1 deletions
@@ -1189,6 +1189,36 @@ defn (fn_lt) {  	return check (ctx, (*result = new_boolean (res)));  } +defn (fn_equals) { +	struct item *etalon = args; +	if (!etalon || etalon->type != ITEM_STRING) +		return set_error (ctx, "first argument must be string"); +	bool res = true; +	for (args = etalon->next; args; args = args->next) { +		if (args->type != ITEM_STRING) +			return set_error (ctx, "arguments must be strings"); +		if (!(res &= strtod (etalon->value, NULL) +			== strtod (args->value, NULL))) +			break; +	} +	return check (ctx, (*result = new_boolean (res))); +} + +defn (fn_less) { +	struct item *etalon = args; +	if (!etalon || etalon->type != ITEM_STRING) +		return set_error (ctx, "first argument must be string"); +	bool res = true; +	for (args = etalon->next; args; args = args->next) { +		if (args->type != ITEM_STRING) +			return set_error (ctx, "arguments must be strings"); +		if (!(res &= strtod (etalon->value, NULL) < strtod (args->value, NULL))) +			break; +		etalon = args; +	} +	return check (ctx, (*result = new_boolean (res))); +} +  // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  static bool @@ -1204,6 +1234,10 @@ init_runtime_library (struct context *ctx) {  		{ "ge?",    "arg _ge1 _ge2; not (lt? @_ge1 @_ge2))"          },  		{ "le?",    "arg _le1 _le2; ge? @_le2 @_le1"                 },  		{ "gt?",    "arg _gt1 _gt2; lt? @_gt2 @_gt1"                 }, +		{ "<>",     "arg _<>1 _<>2; not (= @_<>1 @_<>2))"            }, +		{ ">=",     "arg _>=1 _>=2; not (< @_>=1 @_>=2))"            }, +		{ "<=",     "arg _<=1 _<=2; >= @_<=2 @_<=1"                  }, +		{ ">",      "arg _>1  _>2;  <  @_>2  @_>1"                   },  	};  	bool ok = true; @@ -1245,7 +1279,9 @@ init_runtime_library (struct context *ctx) {  		&& native_register (ctx, "and",    fn_and)  		&& native_register (ctx, "or",     fn_or)  		&& native_register (ctx, "eq?",    fn_eq) -		&& native_register (ctx, "lt?",    fn_lt); +		&& native_register (ctx, "lt?",    fn_lt) +		&& native_register (ctx, "=",      fn_equals) +		&& native_register (ctx, "<",      fn_less);  }  // --- Main --------------------------------------------------------------------  | 
