public IP5Any CallMethod(Runtime runtime, Opcode.ContextValues context, string method, P5Array args) { if (!IsDefined(runtime)) throw new P5Exception(runtime, string.Format("Can't call method \"{0:S}\" on an undefined value", method)); P5Exception error; var pmethod = FindMethod(runtime, method, out error); var wrapper = NetWrapper(runtime); if (pmethod == null && wrapper != null) return wrapper.CallMethod(runtime, context, method, args); if (pmethod == null) throw error; return pmethod.Call(runtime, context, args); }
private static IP5Any WrapSpecializeType(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var type = Glue.UnwrapValue<System.Type>(runtime, args.GetItem(runtime, 0)); var tyargs = new System.Type[args.GetCount(runtime) - 1]; for (int i = args.GetCount(runtime) - 1; i > 0; --i) tyargs[i - 1] = Glue.UnwrapValue<System.Type>(runtime, args.GetItem(runtime, i)); return new P5Scalar(new P5NetWrapper(type.MakeGenericType(tyargs))); }
public IP5Any CallMethod(Runtime runtime, Opcode.ContextValues context, string method, P5Array args) { int count = args.GetCount(runtime); var arg = new P5Scalar[count - 1]; for (int i = 1; i < count; ++i) arg[i - 1] = args.GetItem(runtime, i) as P5Scalar; var type = obj as System.Type; if (type != null) return NetGlue.CallStaticMethod(runtime, type, method, arg); else return NetGlue.CallMethod(runtime, obj, method, arg); }
private static IP5Any WrapIsa(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var value = args.GetItem(runtime, 0) as P5Scalar; var parent = args.GetItem(runtime, 1); bool is_derived = Builtins.IsDerivedFrom(runtime, value, parent); return new P5Scalar(runtime, is_derived); }
private static IP5Any WrapSetProperty(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var obj = args.GetItem(runtime, 0) as P5Scalar; var name = args.GetItem(runtime, 1); var value = args.GetItem(runtime, 2); Glue.SetProperty(runtime, obj, name.AsString(runtime), value); return new P5Scalar(runtime); }
private static IP5Any WrapExtend(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var pack = args.GetItem(runtime, 0); var cls = args.GetItem(runtime, 1); return Glue.Extend(runtime, pack.AsString(runtime), cls.AsString(runtime), "new", true); }
private static IP5Any WrapGetClass(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var name = args.GetItem(runtime, 0); return Glue.GetClass(runtime, name.AsString(runtime)); }
private static IP5Any WrapCreate(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var cls = args.GetItem(runtime, 0) as P5Scalar; int count = args.GetCount(runtime); var arg = new P5Scalar[count - 1]; for (int i = 1; i < count; ++i) arg[i - 1] = args.GetItem(runtime, i) as P5Scalar; return Glue.CallConstructor(runtime, cls, arg); }
private static IP5Any WrapCompileAssembly(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var asm_path = args.GetItem(runtime, 0).AsString(runtime); var generator = new Generator(runtime, asm_path); for (int i = 1; i < args.GetCount(runtime); ++i) { var arg = args.GetItem(runtime, i).AsString(runtime); string path, file; path = Builtins.SearchFile(runtime, arg); if (path != null) file = arg; else { file = arg.Replace("::", "/") + ".pm"; path = Builtins.SearchFile(runtime, file); } if (path == null) throw new System.Exception(string.Format("File not found for '{0:S}'", arg)); var cu = Serializer.ReadCompilationUnit(runtime, path); cu.FileName = file; generator.Generate(cu); } generator.Assembly.Save(new System.IO.FileInfo(asm_path + ".dll").Name); return new P5Scalar(runtime); }
private static IP5Any WrapCallStatic(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var type = Glue.UnwrapValue<System.Type>(runtime, args.GetItem(runtime, 0)); var name = args.GetItem(runtime, 1).AsString(runtime); int count = args.GetCount(runtime); var arg = new P5Scalar[count - 2]; for (int i = 2; i < count; ++i) arg[i - 2] = args.GetItem(runtime, i) as P5Scalar; return Glue.CallStaticMethod(runtime, type, name, arg); }
private static IP5Any WrapCallMethod(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var obj = args.GetItem(runtime, 0) as P5Scalar; var name = args.GetItem(runtime, 1).AsString(runtime); int count = args.GetCount(runtime); var arg = new P5Scalar[count - 2]; for (int i = 2; i < count; ++i) arg[i - 2] = args.GetItem(runtime, i) as P5Scalar; return Glue.CallMethod(runtime, obj, name, arg); }
private static IP5Any WrapAddOverload(Runtime runtime, Opcode.ContextValues context, P5ScratchPad pad, P5Array args) { var pack = args.GetItem(runtime, 0) as P5Scalar; var opref = args.GetItem(runtime, 1) as P5Scalar; var ops = opref.DereferenceArray(runtime) as P5Array; Builtins.AddOverload(runtime, pack.AsString(runtime), ops); return null; }