Example #1
0
        public bool IsTrue(string compilerDirective, Location location)
        {
            if (_dictionary.ContainsKey(compilerDirective))
            {
                return(_dictionary[compilerDirective]);
            }
            if (compilerDirective.StartsWith("IFDEF ", StringComparison.InvariantCultureIgnoreCase))
            {
                return(false);
            }
            if (compilerDirective.StartsWith("IFNDEF ", StringComparison.InvariantCultureIgnoreCase))
            {
                return(true);
            }

            Parser parser = Parser.FromText(compilerDirective, "input", CompilerDefines.CreateStandard(),
                                            new MemoryFileLoader());
            AstNode definedRule = parser.ParseRule(RuleType.IfDefinedStatement);

            try
            {
                var result = Evaluate(definedRule, _symbols);
                _dictionary.Add(compilerDirective, result);
                return(result);
            }
            catch
            {
                throw new PreprocessorException("Compiler directive '" + compilerDirective +
                                                "' has not been defined as either true or false", location);
            }
        }
Example #2
0
        public CompilerDefines CreateCompilerDefines()
        {
            CompilerDefines result = CompilerDefines.CreateStandard();

            for (char option = 'A'; option <= 'Z'; ++option)
            {
                result.DefineDirective("IFOPT " + option + "-", _compilerOptions.IsOptionOff(option));
                result.DefineDirective("IFOPT " + option + "+", _compilerOptions.IsOptionOn(option));
            }
            foreach (string define in CustomDefines.Split(';'))
            {
                result.DefineSymbol(define);
            }
            result.DefineSymbol(DelphiVersionDefine);
            foreach (string condition in FalseIfConditions.Split(';'))
            {
                result.DefineDirectiveAsFalse(condition);
            }
            foreach (string condition in TrueIfConditions.Split(';'))
            {
                result.DefineDirectiveAsTrue(condition);
            }
            return(result);
        }