public static string ConvertToString(ASBinCode.RunTimeValueBase src, StackFrame frame, ASBinCode.SourceToken token) { switch (src.rtType) { case rt.rt_boolean: return(((ASBinCode.rtData.rtBoolean)src).ToString()); // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtBoolean)src).ToString()); case rt.rt_int: return(((ASBinCode.rtData.rtInt)src).ToString()); // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtInt)src).value.ToString()); case rt.rt_uint: return(((ASBinCode.rtData.rtUInt)src).value.ToString()); // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtUInt)src).value.ToString()); case rt.rt_number: return(((ASBinCode.rtData.rtNumber)src).ToString()); // new ASBinCode.rtData.rtString(((ASBinCode.rtData.rtNumber)src).value.ToString()); case rt.rt_string: return(((ASBinCode.rtData.rtString)src).value); //(ASBinCode.rtData.rtString)src; case rt.rt_void: return(null); case rt.fun_void: return(ASBinCode.rtData.rtUndefined.undefined.ToString()); case rt.rt_null: return(null); //new ASBinCode.rtData.rtString(null); case rt.rt_function: return("function Function() {}"); case rt.rt_array: return(((ASBinCode.rtData.rtArray)src).ToString()); case rt.unknown: return(null); default: { //ASBinCode.rtData.rtObject obj = (ASBinCode.rtData.rtObject)src; //var toStr = (ASBinCode.ClassMemberFinder.find(obj.value._class, "toString", obj.value._class)); //if (toStr.type == rt.rt_function && !toStr.isStatic && toStr.isPublic // && !toStr.isConstructor // ) //{ // operators.FunctionCaller fc = new operators.FunctionCaller(frame.player, frame, token); // fc.function = (ASBinCode.rtData.rtFunction)obj.value.memberData[toStr.index].getValue(); // fc.loadDefineFromFunction(); // fc.createParaScope(); // fc.returnSlot = frame._tempSlot; // fc.call(); // if (frame.player.step_toblockend()) // { // return ConvertToString(fc.returnSlot.getValue(), frame, token, isthrow); // } // else // { // return null; // } //} //else { return(((ASBinCode.rtData.rtObjectBase)src).value.ToString()); } } //return "object " + ((ASBinCode.rtData.rtObject)src).value._class.name; } }
public static ASBinCode.rtData.rtBoolean ConvertToBoolean(ASBinCode.RunTimeValueBase src, StackFrame frame, ASBinCode.SourceToken token) { switch (src.rtType) { case rt.rt_boolean: return((ASBinCode.rtData.rtBoolean)src); case rt.rt_int: if (((ASBinCode.rtData.rtInt)src).value == 0) { return(ASBinCode.rtData.rtBoolean.False); } else { return(ASBinCode.rtData.rtBoolean.True); } case rt.rt_uint: if (((ASBinCode.rtData.rtUInt)src).value == 0) { return(ASBinCode.rtData.rtBoolean.False); } else { return(ASBinCode.rtData.rtBoolean.True); } case rt.rt_number: { double r = ((ASBinCode.rtData.rtNumber)src).value; if (double.IsNaN(r) || r == 0) { return(ASBinCode.rtData.rtBoolean.False); } else { return(ASBinCode.rtData.rtBoolean.True); } } case rt.rt_string: { if (string.IsNullOrEmpty(((ASBinCode.rtData.rtString)src).value)) { return(ASBinCode.rtData.rtBoolean.False); } else { return(ASBinCode.rtData.rtBoolean.True); } } case rt.rt_void: case rt.fun_void: return(ASBinCode.rtData.rtBoolean.False); case rt.rt_null: return(ASBinCode.rtData.rtBoolean.False); case rt.rt_function: case rt.rt_array: return(ASBinCode.rtData.rtBoolean.True); case rt.unknown: return(ASBinCode.rtData.rtBoolean.False); default: //凡是大于unknown的都是对象 return(ASBinCode.rtData.rtBoolean.True); } }
public static uint ConvertToUInt(ASBinCode.RunTimeValueBase src, StackFrame frame, ASBinCode.SourceToken token) { switch (src.rtType) { case rt.rt_boolean: if (((ASBinCode.rtData.rtBoolean)src).value == true) { return(1); // new ASBinCode.rtData.rtUInt(1); } else { return(0); // ASBinCode.rtData.rtUInt.zero; } case rt.rt_int: return((uint)((ASBinCode.rtData.rtInt)src).value); // new ASBinCode.rtData.rtUInt((uint)((ASBinCode.rtData.rtInt)src).value); case rt.rt_uint: return(((ASBinCode.rtData.rtUInt)src).value); //(ASBinCode.rtData.rtUInt)src; case rt.rt_number: { double r = ((ASBinCode.rtData.rtNumber)src).value; if (double.IsNaN(r) || double.IsInfinity(r)) { return(0); // new ASBinCode.rtData.rtUInt(0); } else { return((uint)((long)r)); // new ASBinCode.rtData.rtUInt((uint)r); } } case rt.rt_string: { double r = 0; if (((ASBinCode.rtData.rtString)src).value == null) { return(0); // new ASBinCode.rtData.rtUInt(0); } else if (double.TryParse(((ASBinCode.rtData.rtString)src).value, out r)) { if (double.IsNaN(r) || double.IsInfinity(r)) { return(0); // new ASBinCode.rtData.rtUInt(0); } else { return((uint)((long)r)); // new ASBinCode.rtData.rtUInt((uint)r); } } else { return(0); // new ASBinCode.rtData.rtUInt(0); } } case rt.rt_void: case rt.fun_void: return(0); // new ASBinCode.rtData.rtUInt(0); case rt.rt_null: return(0); // new ASBinCode.rtData.rtUInt(0); case rt.unknown: case rt.rt_function: case rt.rt_array: default: return(0); } }