private IodineObject eval(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length <= 0) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineString str = args [0] as IodineString; IodineHashMap map = null; if (str == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } if (args.Length >= 2) { map = args [1] as IodineHashMap; if (map == null) { vm.RaiseException(new IodineTypeException("HashMap")); return(null); } } return(eval(vm, str.ToString(), map)); }
/** * Iodine Function: _warn (type, msg) * Description: Internal low level function for issuing warnings * See modules/warnings.id */ private IodineObject Warn(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length <= 1) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineInteger warnType = args [0] as IodineInteger; IodineString warnMsg = args [1] as IodineString; if (warnType == null) { vm.RaiseException(new IodineTypeException("Int")); return(null); } if (warnMsg == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } vm.Context.Warn((WarningType)warnType.Value, warnMsg.ToString()); return(null); }
private IodineObject Eval(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length <= 0) { vm.RaiseException(new IodineArgumentException(1)); return(IodineNull.Instance); } IodineString str = args [0] as IodineString; IodineDictionary map = null; if (str == null) { vm.RaiseException(new IodineTypeException("Str")); return(IodineNull.Instance); } if (args.Length >= 2) { map = args [1] as IodineDictionary; if (map == null) { vm.RaiseException(new IodineTypeException("Dict")); return(IodineNull.Instance); } } return(Eval(vm, str.ToString(), map)); }
private IodineObject RightFind(VirtualMachine vm, IodineObject self, IodineObject[] args) { IodineString thisObj = self as IodineString; if (args.Length < 1) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineString ch = args [0] as IodineString; if (ch == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } string val = ch.ToString(); if (!thisObj.Value.Contains(val)) { return(new IodineInteger(-1)); } return(new IodineInteger(thisObj.Value.LastIndexOf(val))); }
private IodineObject LoadModule(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length < 1) { vm.RaiseException(new IodineArgumentException(1)); return(IodineNull.Instance); } IodineString source = args [0] as IodineString; try { return(vm.LoadModule(source.ToString())); } catch (ModuleNotFoundException ex) { vm.RaiseException(new IodineModuleNotFoundException(ex.Name)); return(null); } }
public IodineMethod( IodineModule module, IodineString name, CodeObject bytecode, IodineTuple parameters, MethodFlags flags, IodineObject[] defaultValues, int defaultStart = 0 ) : base(MethodTypeDef) { Module = module; Bytecode = bytecode; ParameterCount = Parameters.Count; Variadic = (flags & MethodFlags.AcceptsVarArgs) != 0; AcceptsKeywordArgs = (flags & MethodFlags.AcceptsKwargs) != 0; HasDefaultValues = (flags & MethodFlags.HasDefaultParameters) != 0; DefaultValuesStartIndex = defaultStart; DefaultValues = defaultValues; SetParameters(Parameters, parameters); Name = name.ToString(); SetAttribute("__doc__", IodineString.Empty); SetAttribute("__invoke__", new BuiltinMethodCallback(invoke, this)); if (AcceptsKeywordArgs) { var lastParameter = Parameters.Last() as IodineNamedParameter; KwargsParameter = lastParameter.Name; if (Variadic) { var secondToLastParameter = Parameters [Parameters.Count - 2] as IodineNamedParameter; VarargsParameter = secondToLastParameter.Name; } } else if (Variadic) { var lastParameter = Parameters.Last() as IodineNamedParameter; VarargsParameter = lastParameter.Name; } }
private IodineObject isMatch(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length <= 0) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineString expr = args [0] as IodineString; if (expr == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } return(IodineBool.Create(Value.IsMatch(expr.ToString()))); }
private IodineObject compile(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length <= 0) { vm.RaiseException(new IodineArgumentException(1)); return(null); } IodineString expr = args [0] as IodineString; if (expr == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } return(new IodineRegex(new Regex(expr.ToString()))); }
private IodineObject isMatch(VirtualMachine vm, IodineObject self, IodineObject[] args) { if (args.Length <= 1) { vm.RaiseException(new IodineArgumentException(2)); return(null); } IodineString data = args [0] as IodineString; IodineString pattern = args [1] as IodineString; if (pattern == null || data == null) { vm.RaiseException(new IodineTypeException("Str")); return(null); } return(IodineBool.Create(Regex.IsMatch(data.ToString(), pattern.ToString()))); }
private bool packObj(VirtualMachine vm, BinaryWriter bw, char type, int arg, IodineObject obj) { switch (type) { case '?': { IodineBool val = obj as IodineBool; if (val == null) { vm.RaiseException(new IodineTypeException("Bool")); return(false); } else { bw.Write(val.Value); } break; } case 'b': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((SByte)val.Value); } break; } case 'B': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((Byte)val.Value); } break; } case 'h': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((Int16)val.Value); } break; } case 'H': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((UInt16)val.Value); } break; } case 'l': case 'i': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((Int32)val.Value); } break; } case 'I': case 'L': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((UInt32)val.Value); } break; } case 'q': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write(val.Value); } break; } case 'Q': { IodineInteger val = obj as IodineInteger; if (val == null) { vm.RaiseException(new IodineTypeException("Int")); return(false); } else { bw.Write((UInt64)val.Value); } break; } case 'p': case 's': { IodineString val = obj as IodineString; if (val == null) { vm.RaiseException(new IodineTypeException("Str")); return(false); } else { byte[] bytes = Encoding.ASCII.GetBytes(val.ToString()); for (int i = 0; i < arg; i++) { if (i < bytes.Length) { bw.Write(bytes [i]); } else { bw.Write((byte)0); } } } break; } } return(true); }