public static ZilResult REPLACE_DEFINITION([NotNull] Context ctx, [NotNull] ZilAtom name, [NotNull][Required] ZilObject[] body) { name = ctx.ZEnvironment.InternGlobalName(name); var replaceAtom = ctx.GetStdAtom(StdAtom.REPLACE_DEFINITION); var state = ctx.GetProp(name, replaceAtom); if (state == null) { // store the replacement now, insert it at the DEFAULT-DEFINITION ctx.PutProp(name, replaceAtom, new ZilVector(body)); return(name); } if (state == ctx.GetStdAtom(StdAtom.DELAY_DEFINITION)) { // insert the replacement now ctx.PutProp(name, replaceAtom, replaceAtom); return(ZilObject.EvalProgram(ctx, body)); } if (state == replaceAtom || state == ctx.GetStdAtom(StdAtom.DEFAULT_DEFINITION)) { throw new InterpreterError(InterpreterMessages._0_Section_Has_Already_Been_Inserted_1, "REPLACE-DEFINITION", name); } if (state is ZilVector) { throw new InterpreterError(InterpreterMessages._0_Duplicate_Replacement_For_Section_1, "REPLACE-DEFINITION", name); } throw new InterpreterError(InterpreterMessages._0_Bad_State_1, "REPLACE-DEFINITION", state); }
public static ZilResult DEFAULT_DEFINITION([NotNull] Context ctx, ZilAtom name, [Required] ZilObject[] body) { name = ctx.ZEnvironment.InternGlobalName(name); var replaceAtom = ctx.GetStdAtom(StdAtom.REPLACE_DEFINITION); var state = ctx.GetProp(name, replaceAtom); if (state == null) { // no replacement, insert the default now ctx.PutProp(name, replaceAtom, ctx.GetStdAtom(StdAtom.DEFAULT_DEFINITION)); return(ZilObject.EvalProgram(ctx, body)); } if (state == replaceAtom || state == ctx.GetStdAtom(StdAtom.DELAY_DEFINITION)) { // ignore the default return(name); } if (state is ZilVector vec) { // insert the replacement now ctx.PutProp(name, replaceAtom, replaceAtom); return(ZilObject.EvalProgram(ctx, vec.ToArray())); } if (state == ctx.GetStdAtom(StdAtom.DEFAULT_DEFINITION)) { ctx.HandleError(new InterpreterError(InterpreterMessages._0_Duplicate_Default_For_Section_1, "DEFAULT-DEFINITION", name)); return(ctx.FALSE); } throw new InterpreterError(InterpreterMessages._0_Bad_State_1, "DEFAULT-DEFINITION", state); }