using System; using Newtonsoft.Json.Linq; namespace tlang { public class TInternalMethod : TObject, ICallable { public override JToken AsToken() { return new JValue((object)null); } public override bool AsBoolean => true; public TInternalMethod(ClosureNode node,IScopeEnvironment env) { Body = node; Environment = env; } public ClosureNode Body {get;set;} public IScopeEnvironment Environment {get;set;} public TObject Call(params TObject[] args) { var env=Environment.SubEnv; int argCountClosure = Body.Arguments.Count; int argCountCaller = args.Length; if(argCountCaller < requiredArguments()) { throw new Exception("not enough arguments"); } int i = 0; for(;i cb; public TExternalMethod(Func func) { cb = func; } public TExternalMethod(Action func) { cb = (args)=>{ func(args); return Uninit; }; } public TExternalMethod(Func func) { cb = (args)=>{ return func(); }; } public TExternalMethod(Action func) { cb = (args)=>{ func(); return Uninit; }; } public override bool AsBoolean => true; public TObject Call(params TObject[] args) { return cb(args); } } public interface ICallable { TObject Call(params TObject[] args); } }