public void DefineMethod_AsRecordFunction() { var t = new DWSTypeDefinition("TCustomType"); t.Fields.Add(new DWSFieldDefinition("x", "Integer")); t.Fields.Add(new DWSFieldDefinition("y", "Integer")); t.IsStruct = true; context.DefineType(t); var f = new DWSMethodDefinition("Test", (x, a) => { var v = x.CreateTypedValue("TCustomType"); v["x"] = 123; return(v); }); f.ReturnTypeName = "TCustomType"; context.DefineMethod(f); string rv = context.EvaluateScript(@"var a : TCustomType = Test(); Print(IntToStr(a.x));"); Assert.IsNull(this.LastErrorMessage); Assert.AreEqual("123", rv); GC.KeepAlive(f); }
private static void Test1(DWSContext context) { var t = new DWSTypeDefinition("TPoint"); t.Fields.Add(new DWSFieldDefinition("x", "Integer")); t.Fields.Add(new DWSFieldDefinition("y", "Integer")); var m = new DWSMethodDefinition("ReturnFirstArg", (c, a) => { var v = c.CreateTypedValue("TPoint"); object o = v.Value; v["x"] = 10; return(v); }); m.Args.Add(new DWSParameterDefinition("a", "Integer")); m.ReturnTypeName = "TPoint"; context.DefineType(t); context.DefineMethod(m); string s = context.EvaluateScript("var t : TPoint = ReturnFirstArg(2); ReturnFirstArg(t.x);"); GC.KeepAlive(m); }
public void DefineType_AsType() { var t = new DWSTypeDefinition("TCustomType"); t.Fields.Add(new DWSFieldDefinition("x", "Integer")); t.Fields.Add(new DWSFieldDefinition("y", "Integer")); context.DefineType(t); context.EvaluateScript(@"var a : TCustomType; a := TCustomType.Create(); a.x := 1; a.y := 2; a.Free();"); Assert.IsNull(this.LastErrorMessage); }