// TODO: convert to static method; caller parameter doesn't belong here /// <exception cref="InterpreterError"><paramref name="argspec"/> is invalid.</exception> public ZilFunction([NotNull] string caller, [CanBeNull] ZilAtom name, [CanBeNull] ZilAtom activationAtom, [NotNull][ItemNotNull] IEnumerable <ZilObject> argspec, ZilDecl decl, [ItemNotNull][NotNull] IEnumerable <ZilObject> body) { this.argspec = ArgSpec.Parse(caller, name, activationAtom, argspec, decl); this.body = body.ToArray(); }
public ZilRoutine([CanBeNull] ZilAtom name, [CanBeNull] ZilAtom activationAtom, [NotNull] IEnumerable <ZilObject> argspec, [ItemNotNull][NotNull] IEnumerable <ZilObject> body, RoutineFlags flags) { Name = name; ArgSpec = ArgSpec.Parse("ROUTINE", name, activationAtom, argspec); this.body = body.ToArray(); Flags = flags; }
public void BIND_Is_Included_In_ZilListBody() { var ctx = new Context(); var args = Program.Parse(ctx, @"""BIND"" B X ""NAME"" N").ToArray(); var spec = ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), null, args); TestHelpers.AssertStructurallyEqual(args, spec.AsZilListBody().ToArray()); }
public void TUPLE_Is_Included_In_ZilListBody() { var ctx = new Context(); var spec = ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), null, new ZilObject[] { ZilString.FromString("TUPLE"), ZilAtom.Parse("A", ctx) }); TestHelpers.AssertStructurallyEqual( new ZilObject[] { ZilString.FromString("TUPLE"), ZilAtom.Parse("A", ctx) }, spec.AsZilListBody().ToArray()); }
public void ActivationAtom_Becomes_NAME_Argument_In_ZilListBody() { var ctx = new Context(); var spec = ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), ZilAtom.Parse("ACT", ctx), new ZilObject[0]); TestHelpers.AssertStructurallyEqual( new ZilObject[] { ZilString.FromString("NAME"), ZilAtom.Parse("ACT", ctx) }, spec.AsZilListBody().ToArray()); }
public void ARGS_And_TUPLE_Can_Be_ADECLs() { var ctx = new Context(); ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), null, new ZilObject[] { ZilString.FromString("ARGS"), new ZilAdecl( ZilAtom.Parse("A", ctx), ctx.GetStdAtom(StdAtom.LIST)) }); ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), null, new ZilObject[] { ZilString.FromString("TUPLE"), new ZilAdecl( ZilAtom.Parse("A", ctx), ctx.GetStdAtom(StdAtom.LIST)) }); }
public void AsZilListBody_Returns_ADECLs_For_Arguments_With_DECLs() { var ctx = new Context(); var spec = ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), null, new ZilObject[] { new ZilAdecl( ZilAtom.Parse("A1", ctx), ctx.GetStdAtom(StdAtom.FIX)), new ZilAdecl( new ZilForm(new ZilObject[] { ctx.GetStdAtom(StdAtom.QUOTE), ZilAtom.Parse("A2", ctx) }), ctx.GetStdAtom(StdAtom.FORM)), ZilString.FromString("TUPLE"), new ZilAdecl( ZilAtom.Parse("A3", ctx), ctx.GetStdAtom(StdAtom.LIST)) }); TestHelpers.AssertStructurallyEqual( new ZilObject[] { new ZilAdecl( ZilAtom.Parse("A1", ctx), ctx.GetStdAtom(StdAtom.FIX)), new ZilAdecl( new ZilForm(new ZilObject[] { ctx.GetStdAtom(StdAtom.QUOTE), ZilAtom.Parse("A2", ctx) }), ctx.GetStdAtom(StdAtom.FORM)), ZilString.FromString("TUPLE"), new ZilAdecl( ZilAtom.Parse("A3", ctx), ctx.GetStdAtom(StdAtom.LIST)) }, spec.AsZilListBody().ToArray()); }
public void VALUE_Is_Included_In_ZilListBody() { var ctx = new Context(); var spec = ArgSpec.Parse("test", ZilAtom.Parse("FOO", ctx), null, new ZilObject[] { ZilString.FromString("AUX"), ZilAtom.Parse("X", ctx), ZilString.FromString("NAME"), ZilAtom.Parse("N", ctx), ZilString.FromString("VALUE"), new ZilForm(new ZilObject[] { ctx.GetStdAtom(StdAtom.OR), ctx.GetStdAtom(StdAtom.FIX), ctx.GetStdAtom(StdAtom.FALSE) }) }); TestHelpers.AssertStructurallyEqual( new ZilObject[] { ZilString.FromString("AUX"), ZilAtom.Parse("X", ctx), ZilString.FromString("NAME"), ZilAtom.Parse("N", ctx), ZilString.FromString("VALUE"), new ZilForm(new ZilObject[] { ctx.GetStdAtom(StdAtom.OR), ctx.GetStdAtom(StdAtom.FIX), ctx.GetStdAtom(StdAtom.FALSE) }) }, spec.AsZilListBody().ToArray()); }