public static HassiumObject readbytes(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { var file = (self as HassiumFile); if (!File.Exists(file.AbsolutePath.String)) { vm.RaiseException(HassiumFileNotFoundException.FileNotFoundExceptionTypeDef._new(vm, null, location, file.AbsolutePath)); return(Null); } if (file.closed) { vm.RaiseException(HassiumFileClosedException.FileClosedExceptionTypeDef._new(vm, null, location, self, get_abspath(vm, self, location))); return(Null); } HassiumList list = new HassiumList(new HassiumObject[0]); int count = (int)args[0].ToInt(vm, args[0], location).Int; for (int i = 0; i < count; i++) { HassiumList.add(vm, list, location, new HassiumChar((char)file.Reader.ReadBytes(1)[0])); } return(list); }
public static HassiumList getsourcereps(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList list = new HassiumList(new HassiumObject[0]); if (args[0] is HassiumFunction) { var a = (args[0] as HassiumFunction).Target.Method.GetCustomAttributes(typeof(FunctionAttribute), false); if (a.Length > 0) { var reps = (a[0] as FunctionAttribute).SourceRepresentations; foreach (var rep in reps) { HassiumList.add(vm, list, location, new HassiumString(rep)); } } } else if (args[0] is HassiumMethod) { HassiumList.add(vm, list, location, new HassiumString((args[0] as HassiumMethod).SourceRepresentation)); } else if (args[0] is HassiumMultiFunc) { HassiumList.add(vm, list, location, new HassiumString((args[0] as HassiumMultiFunc).Methods[0].SourceRepresentation)); } else if (args[0] is HassiumProperty) { var property = (args[0] as HassiumProperty); HassiumList.add(vm, list, location, new HassiumString((property.Get as HassiumFunction).GetTopSourceRep())); if (property.Set != null) { HassiumList.add(vm, list, location, new HassiumString((property.Set as HassiumFunction).GetTopSourceRep())); } } return(list); }
public static HassiumObject readalllines(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { var file = (self as HassiumFile); if (!File.Exists(file.AbsolutePath.String)) { vm.RaiseException(HassiumFileNotFoundException.FileNotFoundExceptionTypeDef._new(vm, null, location, file.AbsolutePath)); return(Null); } if (file.closed) { vm.RaiseException(HassiumFileClosedException.FileClosedExceptionTypeDef._new(vm, null, location, self, get_abspath(vm, self, location))); return(Null); } HassiumList list = new HassiumList(new HassiumObject[0]); file.Reader.BaseStream.Position = 0; while (file.Reader.BaseStream.Position < file.Reader.BaseStream.Length) { HassiumList.add(vm, list, location, readline(vm, self, location)); } return(list); }
public static HassiumList getdocreqparams(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { var list = new HassiumList(new HassiumObject[0]); if (args[0] is HassiumFunction) { var a = (args[0] as HassiumFunction).Target.Method.GetCustomAttributes(typeof(DocStrAttribute), false); if (a.Length > 0) { foreach (var param in (a[0] as DocStrAttribute).RequiredParams) { HassiumList.add(vm, list, location, new HassiumString(param)); } } } else if (args[0] is HassiumMethod) { var meth = (args[0] as HassiumMethod); if (meth.DocStr != null) { foreach (var param in meth.DocStr.RequiredParams) { HassiumList.add(vm, list, location, new HassiumString(param)); } } } return(list); }
public static HassiumList getparamlengths(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList list = new HassiumList(new HassiumObject[0]); if (args[0] is HassiumFunction) { foreach (int len in (args[0] as HassiumFunction).ParameterLengths) { HassiumList.add(vm, list, location, new HassiumInt(len)); } } else if (args[0] is HassiumMethod) { HassiumList.add(vm, list, location, new HassiumInt((args[0] as HassiumMethod).Parameters.Count)); } else if (args[0] is HassiumMultiFunc) { foreach (var method in (args[0] as HassiumMultiFunc).Methods) { HassiumList.add(vm, list, location, new HassiumInt(method.Parameters.Count)); } } return(list); }
public HassiumList listfiles(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList result = new HassiumList(new HassiumObject[0]); foreach (string dir in Directory.GetFiles(args[0].ToString(vm, args[0], location).String)) { HassiumList.add(vm, result, location, new HassiumString(dir)); } return(result); }
public HassiumList getvars(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList variables = new HassiumList(new HassiumObject[0]); foreach (var var_ in Environment.GetEnvironmentVariables()) { HassiumList.add(vm, variables, location, new HassiumString(var_.ToString())); } return(variables); }
public static HassiumList map(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { var list = args[0].ToList(vm, args[0], location).Values; HassiumList result = new HassiumList(new HassiumObject[0]); for (int i = 0; i < list.Count; i++) { HassiumList.add(vm, result, location, args[1].Invoke(vm, location, list[i])); } return(result); }
public HassiumList getips(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList list = new HassiumList(new HassiumObject[0]); var ips = Dns.GetHostAddresses(args[0].ToString(vm, args[0], location).String); foreach (var ip in ips) { HassiumList.add(vm, list, location, HassiumIPAddr.IPAddrTypeDef._new(vm, null, location, new HassiumString(ip.ToString()))); } return(list); }
public HassiumList gethosts(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList list = new HassiumList(new HassiumObject[0]); var hosts = Dns.GetHostAddresses(args[0].ToString(vm, args[0], location).String); foreach (var host in hosts) { HassiumList.add(vm, list, location, new HassiumString(host.ToString())); } return(list); }
public static HassiumList range(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { int lower = args.Length == 1 ? 0 : (int)args[0].ToInt(vm, args[0], location).Int; int upper = args.Length == 1 ? (int)args[0].ToInt(vm, args[0], location).Int : (int)args[1].ToInt(vm, args[1], location).Int; HassiumList list = new HassiumList(new HassiumObject[0]); while (lower < upper) { HassiumList.add(vm, list, location, new HassiumInt(lower++)); } return(list); }
public static HassiumList randbytes(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { var Random = (self as HassiumRandom).Random; HassiumList bytes = new HassiumList(new HassiumObject[0]); int count = (int)args[0].ToInt(vm, args[0], location).Int; for (int i = 0; i < count; i++) { byte[] buf = new byte[1]; Random.NextBytes(buf); HassiumList.add(vm, bytes, location, new HassiumChar((char)buf[0])); } return(bytes); }
public HassiumObject readbytes(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { var socket = (self as HassiumSocket); if (socket.Closed) { vm.RaiseException(HassiumSocketClosedException.SocketClosedExceptionTypeDef._new(vm, null, location, this)); return(Null); } HassiumByteArray list = new HassiumByteArray(new byte[0], new HassiumObject[0]); int count = (int)args[0].ToInt(vm, args[0], location).Int; for (int i = 0; i < count; i++) { HassiumList.add(vm, list, location, new HassiumChar((char)socket.Reader.ReadBytes(1)[0])); } return(list); }
public HassiumList readlines(VirtualMachine vm, HassiumObject self, SourceLocation location, params HassiumObject[] args) { HassiumList list = new HassiumList(new HassiumObject[0]); var stream = new FileStream(args[0].ToString(vm, args[0], location).String, FileMode.Open, FileAccess.Read, FileShare.Read); var reader = new StreamReader(stream); try { while (reader.BaseStream.Position < reader.BaseStream.Length) { HassiumList.add(vm, list, location, new HassiumString(reader.ReadLine())); } return(list); } finally { reader.Close(); } }
public override HassiumObject Invoke(VirtualMachine vm, SourceLocation location, params HassiumObject[] args) { if (SourceRepresentation != string.Empty) { vm.PushCallStack(string.Format("{0}\t[{1}]", SourceRepresentation, location)); } if (SourceRepresentation != string.Empty || Name == "__init__") { vm.StackFrame.PushFrame(); } int i = 0; foreach (var param in Parameters) { // If there's more arguments provided than called for if (i >= args.Length) { vm.RaiseException(HassiumArgLengthException.ArgLengthExceptionTypeDef._new(vm, null, location, this, new HassiumInt(Parameters.Count), new HassiumInt(args.Length))); return(Null); } var arg = args[i++]; if (param.Key.FunctionParameterType == FunctionParameterType.Variadic) { if (arg is HassiumList || arg is HassiumTuple) { vm.StackFrame.Add(param.Value, arg); } else { HassiumList list = new HassiumList(new HassiumObject[0]); for (--i; i < args.Length; i++) { HassiumList.add(vm, list, location, args[i]); } vm.StackFrame.Add(param.Value, list); } break; } else if (param.Key.FunctionParameterType == FunctionParameterType.Enforced) { var enforcedType = vm.ExecuteMethod(param.Key.EnforcedType); if (enforcedType is HassiumTrait) { if (!(enforcedType as HassiumTrait).Is(vm, location, arg).Bool) { vm.RaiseException(HassiumConversionFailedException.ConversionFailedExceptionTypeDef._new(vm, null, location, arg, enforcedType)); return(Null); } } else if (!arg.Types.Contains(enforcedType)) { vm.RaiseException(HassiumConversionFailedException.ConversionFailedExceptionTypeDef._new(vm, null, location, arg, enforcedType)); return(Null); } } vm.StackFrame.Add(param.Value, arg); } // If there's less arguments than called for if (i < args.Length) { vm.RaiseException(HassiumArgLengthException.ArgLengthExceptionTypeDef._new(vm, null, location, this, new HassiumInt(Parameters.Count), new HassiumInt(args.Length))); return(Null); } if (IsConstructor) { HassiumClass clazz = new HassiumClass((Parent as HassiumClass).Name); clazz.BoundAttributes = CloneDictionary(Parent.BoundAttributes); var parent = (Parent as HassiumClass); clazz.DocStr = parent.DocStr; clazz.AddType(parent.TypeDefinition); foreach (var inherit in parent.Inherits) { foreach (var attrib in CloneDictionary(vm.ExecuteMethod(inherit).GetAttributes())) { if (!clazz.ContainsAttribute(attrib.Key)) { attrib.Value.Parent = clazz; clazz.BoundAttributes.Add(attrib.Key, attrib.Value); } } } foreach (var type in Parent.Types) { clazz.AddType(type as HassiumTypeDefinition); } foreach (var attrib in clazz.BoundAttributes.Values) { attrib.Parent = clazz; } vm.ExecuteMethod(clazz.BoundAttributes["new"] as HassiumMethod); vm.PopCallStack(); vm.StackFrame.PopFrame(); return(clazz); } var ret = vm.ExecuteMethod(this); if (ReturnType != null) { var enforcedType = vm.ExecuteMethod(ReturnType); enforcedType = enforcedType is HassiumTypeDefinition ? enforcedType : enforcedType.Type(); if (!ret.Types.Contains(enforcedType)) { vm.RaiseException(HassiumConversionFailedException.ConversionFailedExceptionTypeDef._new(vm, null, location, ret, enforcedType)); return(this); } } if (Name != "__init__" && Name != string.Empty) { vm.StackFrame.PopFrame(); } if (SourceRepresentation != string.Empty && Name != "__init__") { vm.PopCallStack(); } return(ret); }