示例#1
0
        public CodegenMethod AddMethodWithSymbols(
            Type returnType,
            string methodName,
            IList<CodegenNamedParam> @params,
            Type generator,
            CodegenClassScope classScope,
            Consumer<CodegenMethod> code,
            CodegenSymbolProvider symbolProvider)
        {
            if (_methods == null) {
                _methods = new Dictionary<string, CodegenMethod>();
            }

            var existing = _methods.Get(methodName);
            if (existing != null) {
                if (ListExtensions.AreEqual(@params, existing.LocalParams)) {
                    return existing;
                }

                throw new IllegalStateException("Method by name '" + methodName + "' already registered");
            }

            var method = CodegenMethod
                .MakeMethod(returnType, generator, symbolProvider, classScope)
                .AddParam(@params);
            method.Block.DebugStack();
            _methods.Put(methodName, method);
            code.Invoke(method);
            return method;
        }