internal static LuaObject toNumber(LuaObject obj) { if (obj.IsNumber) return LuaObject.FromNumber(obj.AsNumber()); if (obj.IsString) { double d; if (double.TryParse(obj.AsString(), out d)) return LuaObject.FromNumber(d); return LuaObject.Nil; } return LuaObject.Nil; }
public virtual void Constant(LuaObject value) { switch (value.Type) { case LuaType.@string: stack.Push(Expression.Call(LuaObject_FromString, Expression.Constant(value.AsString()))); break; case LuaType.number: stack.Push(Expression.Call(LuaObject_FromNumber, Expression.Constant(value.AsNumber()))); break; case LuaType.function: // FIXME: we're actually creating a variable here.. var fn = value.AsFunction(); var name = fn.Method.Name; CurrentScope.SetLocal(name, fn); Variable(name); break; default: throw new NotSupportedException(value.Type.ToString()); } }
internal static LuaObject le_event(LuaObject op1, LuaObject op2) { if (op1.IsNumber && op2.IsNumber) return op1.AsNumber() <= op2.AsNumber(); else if (op1.IsString && op2.IsString) { int n = StringComparer.CurrentCulture.Compare(op1.AsString(), op2.AsString()); return (n <= 0); } else { var handler = getBinhandler(op1, op2, "__le"); if (!handler.IsNil) return !(!(handler.Call(op1, op2)[0].AsBool())); else throw new ArgumentException("attempt to compare " + op1.type.ToString() + " with " + op2.type.ToString()); } }
public virtual void Constant (LuaObject value) { switch (value.Type) { case LuaType.@string: stack.Push (Expression.Call (LuaObject_FromString, Expression.Constant (value.AsString ()))); break; case LuaType.number: stack.Push (Expression.Call (LuaObject_FromNumber, Expression.Constant (value.AsNumber ()))); break; case LuaType.function: // FIXME: we're actually creating a variable here.. var fn = value.AsFunction (); var name = fn.Method.Name; CurrentScope.SetLocal (name, fn); Variable (name); break; default: throw new NotSupportedException (value.Type.ToString ()); } }
public static bool TryAsDouble(this LuaObject obj, out double dbl) { dbl = obj.AsNumber(); return(!double.IsNaN(dbl)); }