Beispiel #1
0
        private void GetLlvmType()
        {
            LLVM.Type retTy = _module.GetLlvmType(_method.ReturnType);
            if (_method.ReturnType.MetadataType == MetadataType.Class)
            {
                retTy = retTy.GetPointerTo();
            }

            List <LLVM.Type> paramsTy = new List <LLVM.Type>();

            if (_method.HasThis)
            {
                paramsTy.Add(_module.GetLlvmType(_method.DeclaringType).GetPointerTo());
            }

            if (_method.HasParameters)
            {
                foreach (ParameterDefinition p in _method.Parameters)
                {
                    LLVM.Type ty = _module.GetLlvmType(p.ParameterType);
                    if (p.ParameterType.MetadataType == MetadataType.Class)
                    {
                        ty = ty.GetPointerTo();
                    }
                    paramsTy.Add(ty);
                }
            }

            // TODO false -> varArg
            _type = LLVM.FunctionType.Get(retTy, paramsTy.ToArray(), false);
        }
Beispiel #2
0
        private void GetLlvmType()
        {
            LLVM.Type retTy = _module.GetLlvmType(_method.ReturnType);
            if (_method.ReturnType.MetadataType == MetadataType.Class) {
            retTy = retTy.GetPointerTo();
            }

            List<LLVM.Type> paramsTy = new List<LLVM.Type>();

            if (_method.HasThis) {
            paramsTy.Add(_module.GetLlvmType(_method.DeclaringType).GetPointerTo());
            }

            if (_method.HasParameters) {
            foreach (ParameterDefinition p in _method.Parameters) {
                LLVM.Type ty = _module.GetLlvmType(p.ParameterType);
                if (p.ParameterType.MetadataType == MetadataType.Class) {
                    ty = ty.GetPointerTo();
                }
                paramsTy.Add(ty);
            }
            }

            // TODO false -> varArg
            _type = LLVM.FunctionType.Get(retTy, paramsTy.ToArray(), false);
        }