internal ValueFunc AddFunc(ValueFunc f) { if (f is ValuePhoFunc) { _phoFuncByName.Add(f.Name, f); } else if (f is ValueNativeFunc) { _nativeFuncByName.Add(f.Name, f); } else { throw new Exception("unknown func type " + f.TypeName); } return(f); }
internal override void Compile(CompileParameter param) { ObjectName on = new ObjectName(param.Pkg.Name, Name.Name); if (ClassName != null) { // 成员函数必须有至少1个参数(self) if (TypeInfo.Params.Count < 1) { throw new CompileException("Expect 'self' in method", TypeInfo.FuncPos); } on.ClassName = ClassName.Name; } var newset = new ValuePhoFunc(on, TypeInfo.FuncPos, TypeInfo.ScopeInfo.CalcUsedReg(), TypeInfo.ScopeInfo); bodyCS = newset; _proc = param.Exe.AddFunc(newset); if (ClassName != null) { param.NextPassToResolve(this); } var funcParam = param.SetLHS(false).SetCmdSet(newset); Body.Compile(funcParam); TypeInfo.GenDefaultRet(Body.Child(), funcParam); newset.InputValueCount = TypeInfo.Params.Count; newset.OutputValueCount = FuncType.CalcReturnValueCount(Body.Child()); }
internal ValueClosure(ValueFunc func) : base(func.Name) { _func = func; }
internal void AddMethod(int nameKey, ValueFunc proc) { _member.Add(nameKey, proc); }