static LanguageFeatures GetLanguageFeatures(PhpParseOptions options) { var version = options.LanguageVersion; var features = ParseLanguageVersion(ref version); // if (options.AllowShortOpenTags) { features |= LanguageFeatures.ShortOpenTags; } // return(features); }
///// <summary> ///// Flags applied to the top-level binder created for each syntax tree in the compilation ///// as well as for the binder of global imports. ///// </summary> //internal BinderFlags TopLevelBinderFlags { get; private set; } // Defaults correspond to the compiler's defaults or indicate that the user did not specify when that is significant. // That's significant when one option depends on another's setting. SubsystemVersion depends on Platform and Target. public PhpCompilationOptions( OutputKind outputKind, string baseDirectory, string sdkDirectory, bool reportSuppressedDiagnostics = false, string moduleName = null, string mainTypeName = null, string scriptClassName = null, OptimizationLevel optimizationLevel = OptimizationLevel.Debug, bool checkOverflow = false, string cryptoKeyContainer = null, string cryptoKeyFile = null, ImmutableArray <byte> cryptoPublicKey = default(ImmutableArray <byte>), bool?delaySign = null, Platform platform = Platform.AnyCpu, ReportDiagnostic generalDiagnosticOption = ReportDiagnostic.Default, int warningLevel = 4, IEnumerable <KeyValuePair <string, ReportDiagnostic> > specificDiagnosticOptions = null, bool concurrentBuild = true, bool deterministic = false, XmlReferenceResolver xmlReferenceResolver = null, SourceReferenceResolver sourceReferenceResolver = null, MetadataReferenceResolver metadataReferenceResolver = null, AssemblyIdentityComparer assemblyIdentityComparer = null, StrongNameProvider strongNameProvider = null, bool publicSign = false, PhpDocTypes phpdocTypes = PhpDocTypes.None, ImmutableArray <Diagnostic> diagnostics = default(ImmutableArray <Diagnostic>), PhpParseOptions parseOptions = null) : this(outputKind, baseDirectory, sdkDirectory, reportSuppressedDiagnostics, moduleName, mainTypeName, scriptClassName, optimizationLevel, checkOverflow, cryptoKeyContainer, cryptoKeyFile, cryptoPublicKey, delaySign, platform, generalDiagnosticOption, warningLevel, specificDiagnosticOptions, concurrentBuild, deterministic, extendedCustomDebugInformation : true, debugPlusMode : false, xmlReferenceResolver : xmlReferenceResolver, sourceReferenceResolver : sourceReferenceResolver, metadataReferenceResolver : metadataReferenceResolver, assemblyIdentityComparer : assemblyIdentityComparer, strongNameProvider : strongNameProvider, metadataImportOptions : MetadataImportOptions.Public, publicSign : publicSign, phpdocTypes : phpdocTypes, diagnostics : diagnostics, parseOptions : parseOptions) { }
// Expects correct arguments. internal PhpCompilationOptions( OutputKind outputKind, string baseDirectory, string sdkDirectory, bool reportSuppressedDiagnostics, string moduleName, string mainTypeName, string scriptClassName, string versionString, OptimizationLevel optimizationLevel, bool checkOverflow, string cryptoKeyContainer, string cryptoKeyFile, ImmutableArray<byte> cryptoPublicKey, bool? delaySign, Platform platform, ReportDiagnostic generalDiagnosticOption, int warningLevel, IEnumerable<KeyValuePair<string, ReportDiagnostic>> specificDiagnosticOptions, bool concurrentBuild, bool deterministic, DateTime currentLocalTime, bool debugPlusMode, XmlReferenceResolver xmlReferenceResolver, SourceReferenceResolver sourceReferenceResolver, MetadataReferenceResolver metadataReferenceResolver, AssemblyIdentityComparer assemblyIdentityComparer, StrongNameProvider strongNameProvider, MetadataImportOptions metadataImportOptions, bool publicSign, PhpDocTypes phpdocTypes, ImmutableArray<Diagnostic> diagnostics, PhpParseOptions parseOptions, bool referencesSupersedeLowerVersions) : base(outputKind, reportSuppressedDiagnostics, moduleName, mainTypeName, scriptClassName, cryptoKeyContainer, cryptoKeyFile, cryptoPublicKey, delaySign, publicSign, optimizationLevel, checkOverflow, platform, generalDiagnosticOption, warningLevel, specificDiagnosticOptions.ToImmutableDictionaryOrEmpty(), concurrentBuild, deterministic, currentLocalTime, debugPlusMode, xmlReferenceResolver, sourceReferenceResolver, metadataReferenceResolver, assemblyIdentityComparer, strongNameProvider, metadataImportOptions, referencesSupersedeLowerVersions) { this.BaseDirectory = baseDirectory; this.SdkDirectory = sdkDirectory; this.PhpDocTypes = phpdocTypes; this.ParseOptions = parseOptions; this.Diagnostics = diagnostics; this.VersionString = versionString; }
public static PhpSyntaxTree ParseCode( string content, PhpParseOptions parseOptions, PhpParseOptions scriptParseOptions, string fname) { if (fname == null) { throw new ArgumentNullException(nameof(fname)); } // TODO: new parser implementation based on Roslyn // TODO: file.IsScript ? scriptParseOptions : parseOptions var unit = new CodeSourceUnit( content, fname, Encoding.UTF8, (parseOptions.Kind == SourceCodeKind.Regular) ? Lexer.LexicalStates.INITIAL : Lexer.LexicalStates.ST_IN_SCRIPTING, GetLanguageFeatures(parseOptions)); var result = new PhpSyntaxTree(unit); var errorSink = new ErrorSink(result); var factory = new NodesFactory(unit, parseOptions.Defines); // unit.Parse(factory, errorSink); // result.Diagnostics = errorSink.Diagnostics; result.Lambdas = factory.Lambdas.AsImmutableSafe(); result.Types = factory.Types.AsImmutableSafe(); result.Functions = factory.Functions.AsImmutableSafe(); result.YieldNodes = factory.YieldNodes.AsImmutableSafe(); if (factory.Root != null) { result.Root = factory.Root; } else { // Parser leaves factory.Root to null in the case of syntax errors -> create a proxy syntax node var fullSpan = new Devsense.PHP.Text.Span(0, unit.Code.Length); result.Root = new GlobalCode(fullSpan, ImmutableArray <Statement> .Empty, unit); } // return(result); }
public static PhpSyntaxTree ParseCode( string content, PhpParseOptions parseOptions, PhpParseOptions scriptParseOptions, string fname) { // TODO: new parser implementation based on Roslyn // TODO: file.IsScript ? scriptParseOptions : parseOptions var unit = new CodeSourceUnit(content.ToString(), fname, Encoding.UTF8); var result = new PhpSyntaxTree(unit); var errorSink = new ErrorSink(result); unit.Parse(new BasicNodesFactory(unit), errorSink); result.Diagnostics = errorSink.Diagnostics; return(result); }