示例#1
0
        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);
        }
示例#2
0
        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());
        }
示例#3
0
 internal ValueClosure(ValueFunc func)
     : base(func.Name)
 {
     _func = func;
 }
示例#4
0
 internal void AddMethod(int nameKey, ValueFunc proc)
 {
     _member.Add(nameKey, proc);
 }