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); } }
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); }