s.length());
}
+static bool convertToNum(naRef v, double& result)
+{
+ naRef n = naNumValue(v);
+ if (naIsNil(n)) {
+ return false; // couldn't convert
+ }
+
+ result = n.num;
+ return true;
+}
+
static WayptFlag wayptFlagFromString(const char* s)
{
if (!strcmp(s, "sid")) return WPT_DEPARTURE;
if (!leg) {
naRuntimeError(c, "leg.setSpeed called on non-flightplan-leg object");
}
-
- if (argc < 2) {
- naRuntimeError(c, "bad arguments to leg.setSpeed");
- }
-
- RouteRestriction rr = routeRestrictionFromString(naStr_data(args[1]));
- if (naIsNum(args[0])) {
- leg->setSpeed(rr, args[0].num);
- } else if (naIsString(args[0])) {
- leg->setSpeed(rr, simgear::strutils::to_int(naStr_data(args[0])));
- } else {
- naRuntimeError(c, "bad speed value for leg.setSpeed");
- }
+
+ double speed = 0.0;
+ if ((argc < 2) || !convertToNum(args[0], speed))
+ naRuntimeError(c, "bad arguments to setSpeed");
+ RouteRestriction rr = routeRestrictionFromString(naStr_data(args[1]));
+ leg->setSpeed(rr, speed);
return naNil();
}
naRuntimeError(c, "leg.setAltitude called on non-flightplan-leg object");
}
- if (argc < 2) {
- naRuntimeError(c, "bad arguments to leg.setAltitude");
- }
-
+ double alt = 0.0;
+ if ((argc < 2) || !convertToNum(args[0], alt))
+ naRuntimeError(c, "bad arguments to leg.setAltitude");
+
RouteRestriction rr = routeRestrictionFromString(naStr_data(args[1]));
- if (naIsNum(args[0])) {
- leg->setAltitude(rr, args[0].num);
- } else if (naIsString(args[0])) {
- leg->setAltitude(rr, simgear::strutils::to_int(naStr_data(args[0])));
- } else {
- naRuntimeError(c, "bad value for setAltitude");
- }
+ leg->setAltitude(rr, alt);
return naNil();
}