Пример #1
0
 public void Process(TranslationUnit translationUnit)
 {
     foreach (var macro in translationUnit.PreprocessedEntities.OfType <MacroDefinition>().Where(x => !string.IsNullOrWhiteSpace(x.Expression)))
     {
         var macroDefinition = new Definitions.MacroDefinition
         {
             Name       = macro.Name,
             Expression = macro.Expression
         };
         _context.AddUnit(macroDefinition);
     }
 }
Пример #2
0
        public void Process(TranslationUnit translationUnit)
        {
            var macros = translationUnit.PreprocessedEntities
                         .OfType <MacroDefinition>()
                         .Where(x => !string.IsNullOrWhiteSpace(x.Expression));

            if (Filter != null)
            {
                var filters = Array.ConvertAll(Filter.GetInvocationList(), f => (FilterHandler)f);
                macros = macros.Where(m => !filters.Any(f => f(m)));
            }

            foreach (var macro in macros)
            {
                string expression      = clearMacroNewLineRegex.Replace(macro.Expression, " ");
                var    macroDefinition = new Definitions.MacroDefinition {
                    Name       = macro.Name,
                    ExprString = expression,
                    Content    = $"{macro.Name} = {expression}",
                };
                try {
                    macroDefinition.Expr     = MacroParse.MacroParser.Parse(expression);
                    macroDefinition.TypeName = GetMacroType(macroDefinition.Expr);
                } catch {
                }
                context.AddUnit(macroDefinition);
            }

            foreach (var m in context.Units.OfType <Definitions.MacroDefinition>())
            {
                if (m.Expr != null && m.TypeName != null)
                {
                    m.IsConst    = IsConstMacro(m.Expr);
                    m.CSharpExpr = RewriteMacro(m.Expr);
                }
            }
        }