示例#1
0
 private void ConvertPasProcedureDecl(PasProcedureDecl pasProcedure, List<CsStat> csCodes)
 {
     var csDelegate = new CsDelegateDomain();
     csDelegate.Name = pasProcedure.Name + "Delegate";
     ConvertPasParams(pasProcedure.Params, csDelegate.Params);
     AddDecls(csDelegate.Codes, pasProcedure.Decls);
     AddCodes(csDelegate.Codes, pasProcedure.Codes);
     csDelegate.ReturnType = ConvertPasTypeRef(pasProcedure.ReturnType);
     var csVar = new CsLocalVarDecl();
     csVar.Name = pasProcedure.Name;
     csVar.TypeRef = new CsRef { Decl = csDelegate };
     csCodes.Add(csVar);
     ///_mappings[pasProcedure]= csVar;
 }
示例#2
0
        void ConvertPasProcedureDecl(PasProcedureDecl pasProcedure, CsClassTypeDecl csClass, bool isStatic)
        {
            /// TODO procurar com mesma lista de parametros
            var csMethod = csClass.Decls.Find(e => e.Name == pasProcedure.Name) as CsMethodDecl;
            if (csMethod != null)
            {
                var saved = convertingMethod;
                convertingMethod = csMethod;
                try
                {
                    AddDecls(csMethod.Codes, pasProcedure.Decls);
                    AddCodes(csMethod.Codes, pasProcedure.Codes);
                }
                finally
                {
                    convertingMethod = saved;
                }
            }
            else
            {
                csMethod = new CsMethodDecl();
                var saved = convertingMethod;
                convertingMethod = csMethod;
                try
                {
                    csMethod.Name = pasProcedure.Name;
                    csMethod.ReturnType = ConvertPasTypeRef(pasProcedure.ReturnType);
                    csMethod.IsConstructor = pasProcedure.Approach == PasProcedureApproach.Constructor;
                    csMethod.IsDestructor = pasProcedure.Approach == PasProcedureApproach.Destructor;
                    csMethod.IsOverride = pasProcedure.IsOverride;
                    csMethod.IsVirtual = pasProcedure.IsVirtual;
                    csMethod.IsStatic = pasProcedure.IsStatic || isStatic;
                    csMethod.IsAbstract = pasProcedure.IsAbstract;
                    csMethod.Visibility = CsVisibilityOf(pasProcedure.Visibility);
                    ConvertPasParams(pasProcedure.Params, csMethod.Params);

                    if (pasProcedure.ReturnType != null)
                        csMethod.Codes.Add(new CsLocalVarDecl { Name = "Result", TypeRef = csMethod.ReturnType });

                    AddDecls(csMethod.Codes, pasProcedure.Decls);
                    AddCodes(csMethod.Codes, pasProcedure.Codes);
                    csClass.Decls.Add(csMethod);
                    _associations.Assign(pasProcedure, csMethod);
                }
                finally
                {
                    convertingMethod = saved;
                }
            }
        }
示例#3
0
 void ConvertPasProcedureDecl(PasProcedureDecl pasProcedure, CsNamespace csNamespace)
 {
     if (!string.IsNullOrEmpty(pasProcedure.InClassName))
     {
         var csClass = csNamespace.Decls.Find(e => e.Name == pasProcedure.InClassName) as CsClassTypeDecl;
         if (csClass == null)
             throw new Exception(string.Format("Classe não encontrada: {0}", pasProcedure.InClassName));
         ConvertPasProcedureDecl(pasProcedure, csClass, false);
     }
     else
         ConvertPasProcedureDecl(pasProcedure, NamespaceClass(csNamespace), true);
 }