├── .editorconfig ├── .gitattributes ├── .github ├── FUNDING.yml └── workflows │ └── dotnet.yml ├── .gitignore ├── .nugs └── readme.md ├── .travis.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Directory.Build.props ├── Directory.Build.targets ├── LICENSE.txt ├── MyGet.ps1 ├── NuGet.Config ├── Peachpie.sln ├── README.md ├── build ├── StrongKeys │ └── core.snk ├── build.ps1 ├── devps.cmd ├── dummy │ └── dummy.msbuildproj ├── install_dependencies_ubuntu.sh ├── readme.md ├── runtests.sh └── update-cache.ps1 ├── docs ├── Building-Peachpie.md ├── Testing-Guidelines.md ├── logos │ ├── dotnet-foundation-logo.png │ ├── peachpie-round-pieonly.png │ └── round-orange-196x196.png └── readme.md ├── src ├── Compiler │ └── peach │ │ ├── App.config │ │ ├── Program.cs │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ ├── SimpleAnalyzerAssemblyLoader.cs │ │ ├── peach.cs │ │ └── peach.csproj ├── PDO │ ├── Peachpie.Library.PDO.Firebird │ │ ├── PDOFirebirdDriver.cs │ │ ├── Peachpie.Library.PDO.Firebird.csproj │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ ├── Peachpie.Library.PDO.IBM │ │ ├── PDODB2Driver.cs │ │ ├── Peachpie.Library.PDO.IBM.csproj │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ ├── Peachpie.Library.PDO.MySQL │ │ ├── PDOMySQLDriver.cs │ │ ├── Peachpie.Library.PDO.MySQL.csproj │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ ├── Peachpie.Library.PDO.PgSQL │ │ ├── PDOPgSQLDriver.cs │ │ ├── Peachpie.Library.PDO.PgSQL.csproj │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ ├── Peachpie.Library.PDO.SqlSrv │ │ ├── PDOSqlServerDriver.cs │ │ ├── Peachpie.Library.PDO.SqlSrv.csproj │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ ├── Peachpie.Library.PDO.Sqlite │ │ ├── PDOSqliteDriver.cs │ │ ├── Peachpie.Library.PDO.Sqlite.csproj │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ └── Peachpie.Library.PDO │ │ ├── ErrorCodes.Designer.cs │ │ ├── ErrorCodes.resx │ │ ├── ExtensionMethodDelegate.cs │ │ ├── PDO.ATTR.cs │ │ ├── PDO.Attributes.cs │ │ ├── PDO.CASE.cs │ │ ├── PDO.CURSOR.cs │ │ ├── PDO.ERRMODE.cs │ │ ├── PDO.Errors.cs │ │ ├── PDO.FETCH.cs │ │ ├── PDO.FETCH_ORI.cs │ │ ├── PDO.NULL.cs │ │ ├── PDO.PARAM.cs │ │ ├── PDO.PdoConnectionResource.cs │ │ ├── PDO.cs │ │ ├── PDOConfiguration.cs │ │ ├── PDODriver.cs │ │ ├── PDOEngine.cs │ │ ├── PDOException.cs │ │ ├── PDORegistrator.cs │ │ ├── PDOStatement.cs │ │ ├── PDOStatic.cs │ │ ├── Peachpie.Library.PDO.csproj │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ └── Utilities │ │ ├── DataSourceString.cs │ │ ├── DbValueHelper.cs │ │ ├── PdoExtension.cs │ │ └── StatementStringParser.cs ├── Peachpie.App │ └── Peachpie.App.csproj ├── Peachpie.AspNetCore.Mvc │ ├── HtmlHelperExtension.cs │ ├── HttpContextExtension.cs │ ├── Peachpie.AspNetCore.Mvc.csproj │ └── Properties │ │ └── AssemblyInfo.cs ├── Peachpie.AspNetCore.Web │ ├── HttpContextExtension.cs │ ├── HttpContextHelpers.cs │ ├── HttpServiceCollectionExtensions.cs │ ├── IPhpOptions.cs │ ├── Peachpie.AspNetCore.Web.csproj │ ├── PhpHandlerMiddleware.cs │ ├── PhpRequestDelegateExtension.cs │ ├── PhpRequestOptions.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── RequestCompletionReason.cs │ ├── RequestContextCore.cs │ ├── ResponseOutput │ │ ├── DefaultTextWriter.cs │ │ └── PipeTextWriter.cs │ └── Session │ │ ├── AspNetCoreSessionHandler.cs │ │ └── SharedSession.cs ├── Peachpie.CodeAnalysis │ ├── CodeGen │ │ ├── CodeGenerator.Convert.cs │ │ ├── CodeGenerator.Emit.cs │ │ ├── CodeGenerator.Locals.cs │ │ ├── CodeGenerator.TypeRef.cs │ │ ├── CodeGenerator.cs │ │ ├── ConversionsExtensions.cs │ │ ├── DynamicOperationFactory.cs │ │ ├── GhostMethodBuilder.cs │ │ ├── Graph │ │ │ ├── BoundBlock.cs │ │ │ ├── BoundEdge.cs │ │ │ ├── BoundExpression.cs │ │ │ └── BoundStatement.cs │ │ ├── MethodGenerator.cs │ │ ├── Places.cs │ │ ├── Symbols │ │ │ ├── MethodSymbol.cs │ │ │ ├── NamedTypeSymbol.cs │ │ │ ├── SourceFieldSymbol.cs │ │ │ ├── SourceFileSymbol.cs │ │ │ ├── SourceRoutineSymbol.cs │ │ │ ├── SourceTypeSymbol.cs │ │ │ └── SynthesizedStaticFieldsHolder.cs │ │ └── VariableReference.cs │ ├── CommandLine │ │ ├── CommandLineDiagnosticFormatter.cs │ │ ├── PhpCommandLineArguments.cs │ │ ├── PhpCommandLineParser.cs │ │ ├── PhpCompiler.cs │ │ ├── PhpCompilerDriver.cs │ │ ├── PhpOptimizationLevel.cs │ │ ├── PhpParseOptions.cs │ │ └── SimpleAnalyzerAssemblyLoader.cs │ ├── Compilation │ │ ├── PEModuleBuilder.cs │ │ ├── PhpCompilation.Types.cs │ │ ├── PhpCompilation.cs │ │ ├── PhpCompilationOptions.cs │ │ ├── SourceCompiler.cs │ │ └── SynthesizedManager.cs │ ├── Constants.cs │ ├── DocumentationComments │ │ ├── CommentIdResolver.cs │ │ ├── DocumentationCommentCompiler.cs │ │ └── PEDocumentationCommentUtils.cs │ ├── Emitter │ │ └── Model │ │ │ ├── ArrayTypeSymbolAdapter.cs │ │ │ ├── AssemblyReference.cs │ │ │ ├── AttributeDataAdapter.cs │ │ │ ├── CustomModifierAdapter.cs │ │ │ ├── FieldSymbolAdapter.cs │ │ │ ├── GenericMethodInstanceReference.cs │ │ │ ├── GenericNamespaceTypeInstanceReference.cs │ │ │ ├── GenericNestedTypeInstanceReference.cs │ │ │ ├── GenericTypeInstanceReference.cs │ │ │ ├── MethodReference.cs │ │ │ ├── MethodSymbolAdapter.cs │ │ │ ├── NamedTypeReference.cs │ │ │ ├── NamedTypeSymbolAdapter.cs │ │ │ ├── NamespaceSymbolAdapter.cs │ │ │ ├── PEAssemblyBuilder.cs │ │ │ ├── PEModuleBuilder.cs │ │ │ ├── PENetModuleBuilder.cs │ │ │ ├── ParameterSymbolAdapter.cs │ │ │ ├── PhpRootModuleType.cs │ │ │ ├── PointerTypeSymbolAdapter.cs │ │ │ ├── PropertySymbolAdapter.cs │ │ │ ├── SpecializedFieldReference.cs │ │ │ ├── SpecializedGenericMethodInstanceReference.cs │ │ │ ├── SpecializedGenericNestedTypeInstanceReference.cs │ │ │ ├── SpecializedMethodReference.cs │ │ │ ├── SpecializedNestedTypeReference.cs │ │ │ ├── SymbolAdapter.cs │ │ │ ├── TypeMemberReference.cs │ │ │ └── TypeParameterSymbolAdapter.cs │ ├── Errors │ │ ├── ErrorCode.cs │ │ ├── ErrorFacts.cs │ │ ├── ErrorSink.cs │ │ ├── ErrorStrings.Designer.cs │ │ ├── ErrorStrings.resx │ │ ├── MessageProvider.cs │ │ └── ParserMessageProvider.cs │ ├── FlowAnalysis │ │ ├── AnalysisFacts.cs │ │ ├── AnalysisWalker.cs │ │ ├── ConditionBranch.cs │ │ ├── ExpressionAnalysis.cs │ │ ├── FlowContext.cs │ │ ├── FlowState.cs │ │ ├── Graph │ │ │ ├── BoundBlock.cs │ │ │ ├── BoundExpression.cs │ │ │ ├── CallGraph.cs │ │ │ └── ControlFlowGraph.cs │ │ ├── IFlowState.cs │ │ ├── PHPDoc.cs │ │ ├── Passes │ │ │ ├── DelayedTransformations.cs │ │ │ ├── DiagnosticWalker.Functions.cs │ │ │ ├── DiagnosticWalker.Reachability.cs │ │ │ ├── DiagnosticWalker.cs │ │ │ ├── ResultTypeBinder.cs │ │ │ ├── TransformationRewriter.CopyAnalysis.cs │ │ │ ├── TransformationRewriter.ParameterAnalysis.cs │ │ │ └── TransformationRewriter.cs │ │ ├── RoutineFlags.cs │ │ ├── StateBinder.cs │ │ ├── Symbols │ │ │ ├── SourceCustomAttribute.cs │ │ │ ├── SourceFieldSymbol.cs │ │ │ └── SourceRoutineSymbol.cs │ │ ├── TypeRef │ │ │ ├── CallInfo.cs │ │ │ ├── PhpTypeCode.cs │ │ │ ├── TypeHelpers.cs │ │ │ ├── TypeRefContext.cs │ │ │ ├── TypeRefFactory.cs │ │ │ └── TypeRefMask.cs │ │ └── Worklist.cs │ ├── Peachpie.CodeAnalysis.csproj │ ├── PhpResources.Designer.cs │ ├── PhpResources.resx │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Semantics │ │ ├── AccessMask.cs │ │ ├── BoundExpression.cs │ │ ├── BoundOperation.cs │ │ ├── BoundStatement.cs │ │ ├── BoundVariable.cs │ │ ├── Conversions.cs │ │ ├── ExpressionsExtension.cs │ │ ├── Graph │ │ │ ├── BoundBlock.cs │ │ │ ├── BuilderVisitor.cs │ │ │ ├── ControlFlowGraph.cs │ │ │ ├── Edge.cs │ │ │ ├── GraphExplorer.cs │ │ │ ├── GraphRewriter.cs │ │ │ ├── GraphUpdater.cs │ │ │ ├── GraphVisitor.cs │ │ │ └── GraphWalker.cs │ │ ├── IPhpOperation.cs │ │ ├── LocalsTable.cs │ │ ├── Model │ │ │ ├── CompilationSymbolsExtension.cs │ │ │ ├── GlobalSymbolProvider.cs │ │ │ ├── ISymbolProvider.cs │ │ │ └── SourceSymbolProvider.cs │ │ ├── PhpOperationVisitor.cs │ │ ├── SemanticsBinder.cs │ │ ├── TypeRef │ │ │ ├── BoundTypeRef.cs │ │ │ ├── BoundTypeRefExtensions.cs │ │ │ ├── BoundTypeRefFactory.cs │ │ │ └── IBoundTypeRef.cs │ │ └── TypeRefExtension.cs │ ├── Symbols │ │ ├── AbstractTypeMap.cs │ │ ├── AbstractTypeParameterMap.cs │ │ ├── AmbiguousMethodSymbol.cs │ │ ├── Anonymous │ │ │ ├── AnonymousTypeManager.cs │ │ │ └── AnonymousTypeParameterSymbol.cs │ │ ├── ArrayTypeSymbol.cs │ │ ├── AssemblySymbol.cs │ │ ├── Attributes │ │ │ ├── AttributeHelpers.cs │ │ │ ├── BaseAttributeData.cs │ │ │ ├── PEAttributeData.cs │ │ │ ├── RetargetingAttributeData.cs │ │ │ ├── SourceAttributeData.cs │ │ │ └── SynthesizedAttributeData.cs │ │ ├── ConstructedMethodSymbol.cs │ │ ├── ConstructedNamedTypeSymbol.cs │ │ ├── CoreMembers.cs │ │ ├── CoreType.cs │ │ ├── CustomModifier.cs │ │ ├── ErrorTypeSymbol.cs │ │ ├── FieldSymbol.cs │ │ ├── FlowAnalysisAnnotations.cs │ │ ├── MemberSymbolExtensions.cs │ │ ├── MethodSymbol.cs │ │ ├── MethodSymbolExtensions.cs │ │ ├── MissingAssemblySymbol.cs │ │ ├── MissingNamespaceSymbol.cs │ │ ├── ModuleSymbol.cs │ │ ├── MutableTypeMap.cs │ │ ├── NamedTypeSymbol.cs │ │ ├── NamespaceOrTypeSymbol.cs │ │ ├── NamespaceSymbol.cs │ │ ├── NonMissingAssemblySymbol.cs │ │ ├── NullableContextKind.cs │ │ ├── ObsoleteAttributeHelpers.cs │ │ ├── OverloadsList.cs │ │ ├── OverrideHelper.cs │ │ ├── OverrideOrHiddenMembersResult.cs │ │ ├── PE │ │ │ ├── MemberRefMetadataDecoder.cs │ │ │ ├── MetadataDecoder.cs │ │ │ ├── PEAssemblySymbol.cs │ │ │ ├── PEFieldSymbol.cs │ │ │ ├── PEGlobalNamespaceSymbol.cs │ │ │ ├── PEMethodSymbol.cs │ │ │ ├── PEModuleSymbol.cs │ │ │ ├── PENamedTypeSymbol.cs │ │ │ ├── PENamespaceSymbol.cs │ │ │ ├── PEParameterSymbol.cs │ │ │ ├── PEPropertySymbol.cs │ │ │ ├── PETypeParameterSymbol.cs │ │ │ └── SymbolFactory.cs │ │ ├── ParameterSignature.cs │ │ ├── ParameterSymbol.cs │ │ ├── Php │ │ │ ├── IPhpPropertySymbol.cs │ │ │ ├── IPhpRoutineSymbol.cs │ │ │ ├── IPhpScriptTypeSymbol.cs │ │ │ ├── IPhpTypeSymbol.cs │ │ │ ├── IPhpValue.cs │ │ │ ├── PhpFieldSymbolExtension.cs │ │ │ ├── PhpParam.cs │ │ │ ├── PhpRoutineSymbolExtensions.cs │ │ │ ├── PhpSignatureMask.cs │ │ │ └── PhpTypeSymbolExtensions.cs │ │ ├── PointerTypeSymbol.cs │ │ ├── PropertySymbol.cs │ │ ├── ReferenceManager.cs │ │ ├── SignatureEqualityComparer.cs │ │ ├── Source │ │ │ ├── ExplicitInterfaceHelpers.cs │ │ │ ├── ILambdaContainerSymbol.cs │ │ │ ├── IndexedTypeParameterSymbol.cs │ │ │ ├── MemberAttributesAdapter.cs │ │ │ ├── SourceAssemblySymbol.cs │ │ │ ├── SourceCustomAttribute.cs │ │ │ ├── SourceFieldSymbol.cs │ │ │ ├── SourceFileSymbol.cs │ │ │ ├── SourceFunctionSymbol.cs │ │ │ ├── SourceGeneratorSymbol.cs │ │ │ ├── SourceGlobalMethodSymbol.cs │ │ │ ├── SourceLambdaSymbol.cs │ │ │ ├── SourceLocalSymbol.cs │ │ │ ├── SourceMethodSymbol.cs │ │ │ ├── SourceModuleSymbol.cs │ │ │ ├── SourceNamespaceSymbol.cs │ │ │ ├── SourceParameterSymbol.cs │ │ │ ├── SourceRoutineSymbol.cs │ │ │ ├── SourceSymbolCollection.cs │ │ │ ├── SourceTraitSymbol.cs │ │ │ └── SourceTypeSymbol.cs │ │ ├── SpecialAssembly.cs │ │ ├── SpecialParameterSymbol.cs │ │ ├── SpecialTypeExtensions.cs │ │ ├── SubstitutedFieldSymbol.cs │ │ ├── SubstitutedMethodSymbol.cs │ │ ├── SubstitutedNamedTypeSymbol.cs │ │ ├── SubstitutedParameterSymbol.cs │ │ ├── SubstitutedPropertySymbol.cs │ │ ├── SubstitutedTypeParameterSymbol.cs │ │ ├── Symbol.cs │ │ ├── SymbolExtensions.cs │ │ ├── Synthesized │ │ │ ├── SynthesizedCctorSymbol.cs │ │ │ ├── SynthesizedContainer.cs │ │ │ ├── SynthesizedCtorSymbol.cs │ │ │ ├── SynthesizedDelegateSymbol.cs │ │ │ ├── SynthesizedFieldSymbol.cs │ │ │ ├── SynthesizedFinalizeSymbol.cs │ │ │ ├── SynthesizedInstanceConstructor.cs │ │ │ ├── SynthesizedInstanceMethodSymbol.cs │ │ │ ├── SynthesizedMethodSymbol.cs │ │ │ ├── SynthesizedParameterSymbol.cs │ │ │ ├── SynthesizedPropertySymbol.cs │ │ │ ├── SynthesizedScriptTypeSymbol.cs │ │ │ ├── SynthesizedStaticFieldsHolder.cs │ │ │ ├── SynthesizedStaticLocHolder.cs │ │ │ ├── SynthesizedSubstitutedTypeParameterSymbol.cs │ │ │ ├── SynthesizedTraitFieldSymbol.cs │ │ │ ├── SynthesizedTraitMethodSymbol.cs │ │ │ └── SynthesizedTypeSymbol.cs │ │ ├── TypeMap.cs │ │ ├── TypeParameterBounds.cs │ │ ├── TypeParameterSymbol.cs │ │ ├── TypeSymbol.cs │ │ ├── TypeSymbolExtensions.cs │ │ ├── TypeWithModifiers.cs │ │ ├── TypedConstantExtensions.cs │ │ ├── UnboundGenericType.cs │ │ ├── WellKnownMembersHelper.cs │ │ ├── WellKnownPchpNames.cs │ │ └── WrappedParameterSymbol.cs │ ├── Syntax │ │ ├── AdditionalSyntaxProvider.cs │ │ ├── NodesFactory.cs │ │ ├── PhpSourceUnit.cs │ │ ├── PhpSyntaxReference.cs │ │ ├── PhpSyntaxTree.cs │ │ ├── PhpTokenProvider.cs │ │ └── SourceLineBreaks.cs │ └── Utilities │ │ ├── AstUtils.cs │ │ ├── BitMask64.cs │ │ ├── CompilationTrackerExtension.cs │ │ ├── ConstantValueExtensions.cs │ │ ├── Contract.cs │ │ ├── DiagnosticBagExtensions.cs │ │ ├── DistinctQueue.cs │ │ ├── EmptyStruct.cs │ │ ├── EnumeratorExtension.cs │ │ ├── ExceptionUtilities.cs │ │ ├── GraphExtensions.cs │ │ ├── MemberQualifiedName.cs │ │ ├── NameUtils.cs │ │ ├── PhpFileUtilities.cs │ │ ├── PhpOperationExtensions.cs │ │ └── PriorityQueue.cs ├── Peachpie.Library.Graphics │ ├── Exif.cs │ ├── FloodFillProcessor.cs │ ├── FloodFillProcessor{TPixel}.cs │ ├── Peachpie.Library.Graphics.csproj │ ├── PhpGd2.cs │ ├── PhpGdImageResource.cs │ ├── PhpImage.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ └── Utils.cs ├── Peachpie.Library.MsSql │ ├── MsSql.cs │ ├── MsSqlConfiguration.cs │ ├── Peachpie.Library.MsSql.csproj │ ├── PhpSqlDbConnection.cs │ ├── PhpSqlDbProcedure.cs │ ├── PhpSqlDbResult.cs │ └── Properties │ │ └── AssemblyInfo.cs ├── Peachpie.Library.MySql │ ├── MySql.Constants.cs │ ├── MySql.Functions.cs │ ├── MySqlConfiguration.cs │ ├── MySqlConnectionManager.cs │ ├── MySqlConnectionResource.cs │ ├── MySqlExtensions.cs │ ├── MySqlResultResource.cs │ ├── MySqli │ │ ├── Constants.cs │ │ ├── Functions.cs │ │ ├── MySqliConnectionManager.cs │ │ ├── mysqli.cs │ │ ├── mysqli_result.cs │ │ ├── mysqli_sql_exception.cs │ │ ├── mysqli_stmt.cs │ │ └── mysqli_warning.cs │ ├── Peachpie.Library.MySql.csproj │ └── Properties │ │ └── AssemblyInfo.cs ├── Peachpie.Library.Network │ ├── CURLConstants.cs │ ├── CURLFile.cs │ ├── CURLFunctions.cs │ ├── CURLMultiResource.cs │ ├── CURLResource.cs │ ├── Peachpie.Library.Network.csproj │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ └── Sockets.cs ├── Peachpie.Library.Scripting │ ├── AssemblyInfo.cs │ ├── Context.Script.cs │ ├── Context.ScriptingProvider.cs │ ├── Highlight.cs │ ├── Peachpie.Library.Scripting.csproj │ ├── PhpCompilationFactory.cs │ ├── PhpFunctions.cs │ ├── ScriptingContext.cs │ ├── Standard.cs │ └── Tokenizer.cs ├── Peachpie.Library.XmlDom │ ├── DOMAttr.cs │ ├── DOMCharacterData.cs │ ├── DOMConfiguration.cs │ ├── DOMDocument.cs │ ├── DOMDocumentFragment.cs │ ├── DOMDocumentType.cs │ ├── DOMElement.cs │ ├── DOMEntity.cs │ ├── DOMEntityReference.cs │ ├── DOMException.cs │ ├── DOMImplementation.cs │ ├── DOMNamedNodeMap.cs │ ├── DOMNode.cs │ ├── DOMNodeList.cs │ ├── DOMNotation.cs │ ├── DOMProcessingInstruction.cs │ ├── DOMXPath.cs │ ├── Peachpie.Library.XmlDom.csproj │ ├── PhpXmlDocument.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── SimpleXml.cs │ ├── Utils.cs │ ├── XIncludeHelper.cs │ ├── XmlDom.cs │ ├── XmlReader.cs │ ├── XmlWriter.cs │ └── XsltProcessor.cs ├── Peachpie.Library │ ├── Arrays.cs │ ├── BCMath.cs │ ├── BitConverter.cs │ ├── CharMap.cs │ ├── Cli.cs │ ├── Constants.cs │ ├── Database │ │ ├── ConnectionManager.cs │ │ ├── ConnectionResource.cs │ │ ├── ResultResource.cs │ │ └── StatementResource.cs │ ├── DateTime │ │ ├── DateConfiguration.cs │ │ ├── DateInterval.cs │ │ ├── DatePeriod.cs │ │ ├── DateTime.cs │ │ ├── DateTimeFunctions.cs │ │ ├── DateTimeInterface.cs │ │ ├── DateTimeParsing.cs │ │ ├── DateTimeZone.cs │ │ └── TimeZones.cs │ ├── Environment.cs │ ├── Errors.cs │ ├── ErrorsHelper.cs │ ├── Exceptions │ │ ├── Error.cs │ │ ├── Exception.cs │ │ ├── LogicException.cs │ │ ├── RuntimeException.cs │ │ └── Throwable.cs │ ├── FileInfo.cs │ ├── FileSystem.Directory.cs │ ├── FileSystem.Files.cs │ ├── FileSystem.Glob.cs │ ├── FileSystem.Ini.cs │ ├── FileSystem.Path.cs │ ├── FileSystem.cs │ ├── Filter.cs │ ├── Ftp.cs │ ├── Functions.cs │ ├── Generators │ │ ├── Generate.cmd │ │ └── StrToTime.lex │ ├── Gettext.cs │ ├── Hash.DESHelper.cs │ ├── Hash.cs │ ├── LibXml.cs │ ├── Locale.cs │ ├── Mail.cs │ ├── Math.cs │ ├── MersenneTwister.cs │ ├── Miscellaneous.cs │ ├── MultiByteString.cs │ ├── Network.cs │ ├── Objects.cs │ ├── OpenSSL.cs │ ├── Options.cs │ ├── Output.cs │ ├── Parsers │ │ ├── GPPG.cs │ │ └── StrToTimeScanner.cs │ ├── Peachpie.Library.csproj │ ├── Phar │ │ ├── Phar.cs │ │ ├── PharData.cs │ │ ├── PharExtensionLoader.cs │ │ ├── PharExtensions.cs │ │ └── PharFileInfo.cs │ ├── PhpInfo.cs │ ├── Processes.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Reflection │ │ ├── Reflection.cs │ │ ├── ReflectionAttribute.cs │ │ ├── ReflectionClass.cs │ │ ├── ReflectionClassConstant.cs │ │ ├── ReflectionException.cs │ │ ├── ReflectionExtension.cs │ │ ├── ReflectionFunction.cs │ │ ├── ReflectionFunctionAbstract.cs │ │ ├── ReflectionGenerator.cs │ │ ├── ReflectionMethod.cs │ │ ├── ReflectionObject.cs │ │ ├── ReflectionParameter.cs │ │ ├── ReflectionProperty.cs │ │ ├── ReflectionReference.cs │ │ ├── ReflectionType.cs │ │ ├── ReflectionUtils.cs │ │ └── Reflector.cs │ ├── Resources │ │ ├── DateResources.Designer.cs │ │ ├── DateResources.resx │ │ ├── InfoResources.Designer.cs │ │ ├── InfoResources.resx │ │ ├── LibResources.cs │ │ ├── Resources.Designer.cs │ │ ├── Resources.resx │ │ ├── WindowsTZ.xml │ │ ├── abbreviations.txt │ │ └── translit.def │ ├── SPL │ │ ├── Autoload.cs │ │ ├── Countable.cs │ │ ├── Iterators.cs │ │ └── WeakMap.cs │ ├── Serialization.Json.cs │ ├── Serialization.cs │ ├── Session.cs │ ├── Shell.cs │ ├── Spl │ │ ├── Datastructures.cs │ │ ├── DirectoryIterator.cs │ │ ├── IteratorFunctions.cs │ │ ├── Miscellaneous.cs │ │ ├── Objects.cs │ │ ├── RecursiveIteratorIterator.cs │ │ ├── SplExtension.cs │ │ ├── SplFileInfo.cs │ │ └── SplObjectStorage.cs │ ├── Streams │ │ ├── BinaryChunkQueue.cs │ │ ├── Filters.cs │ │ ├── NativeStream.cs │ │ ├── Options.cs │ │ ├── PhpStream.cs │ │ ├── PhpUserStream.cs │ │ ├── SocketStream.cs │ │ ├── StatStruct.cs │ │ ├── StreamContext.cs │ │ ├── StreamOpenMode.cs │ │ ├── StreamSocket.cs │ │ ├── StreamWrapper.cs │ │ ├── Streams.cs │ │ ├── ZlibFilter.cs │ │ ├── ZlibFilterFactory.cs │ │ └── ZlibStreamWrapper.cs │ ├── Strings.cs │ ├── Utils.cs │ ├── Variables.cs │ ├── Web.cs │ ├── Xml.cs │ ├── ZipArchive.cs │ ├── Zlib │ │ ├── Adler32.cs │ │ ├── Deflate.cs │ │ ├── InfBlocks.cs │ │ ├── InfCodes.cs │ │ ├── InfTree.cs │ │ ├── Inflate.cs │ │ ├── StaticTree.cs │ │ ├── SupportClass.cs │ │ ├── Tree.cs │ │ ├── ZInputStream.cs │ │ ├── ZOutputStream.cs │ │ ├── ZStream.cs │ │ ├── ZStreamException.cs │ │ ├── Zlib.cs │ │ └── license.txt │ ├── iconv.cs │ ├── pcre.cs │ ├── posix.cs │ ├── zip.cs │ └── zlib.cs ├── Peachpie.NET.Sdk │ ├── AssemblyResolver.cs │ ├── BuildTask.cs │ ├── ComposerTask.cs │ ├── Peachpie.NET.Sdk.csproj │ ├── Peachpie.NET.Sdk.nuspec │ ├── Sdk │ │ ├── Sdk.props │ │ ├── Sdk.targets │ │ └── Version.props │ ├── SimpleAnalyzerAssemblyLoader.cs │ ├── SimpleJSON │ │ ├── LICENSE.txt │ │ └── SimpleJSON.cs │ ├── SpdxHelpers.cs │ ├── Versioning │ │ ├── ComposerVersion.cs │ │ ├── ComposerVersionExpression.cs │ │ └── FloatingVersion.cs │ ├── build │ │ ├── Peachpie.DesignTime.targets │ │ ├── Peachpie.NET.Core.Sdk.targets │ │ ├── Peachpie.NET.Current.Sdk.targets │ │ ├── Peachpie.NET.Sdk.props │ │ └── ProjectItemsSchema.xaml │ └── buildCrossTargeting │ │ └── Peachpie.NET.Sdk.props ├── Peachpie.RequestHandler │ ├── Peachpie.RequestHandler.csproj │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── RequestContextAspNet.cs │ ├── RequestHandler.cs │ ├── Session │ │ ├── AspNetSessionHandler.cs │ │ ├── AspNetSessionHelpers.cs │ │ ├── PhpSessionStateContainer.cs │ │ └── SessionValue.cs │ └── readme.md ├── Peachpie.Runtime │ ├── Attributes.cs │ ├── ClrEvent.cs │ ├── Collections │ │ ├── ValueListExtensions.cs │ │ └── ValueList`1.cs │ ├── Comparers.cs │ ├── Comparison.cs │ ├── Context.Api.cs │ ├── Context.Autoload.cs │ ├── Context.Configuration.cs │ ├── Context.Console.cs │ ├── Context.ConstsMap.cs │ ├── Context.DebugView.cs │ ├── Context.Errors.cs │ ├── Context.Output.cs │ ├── Context.Properties.cs │ ├── Context.Recursion.cs │ ├── Context.Scripting.cs │ ├── Context.ScriptsMap.cs │ ├── Context.Statics.cs │ ├── Context.StreamWrapper.cs │ ├── Context.Superglobals.cs │ ├── Context.cs │ ├── Conversions.cs │ ├── Dynamic │ │ ├── BinderFactory.cs │ │ ├── BinderHelpers.cs │ │ ├── Cache.cs │ │ ├── CallBinder.cs │ │ ├── CallSiteContext.cs │ │ ├── ConversionCost.cs │ │ ├── ConvertExpression.cs │ │ ├── EmitHelpers.cs │ │ ├── GetFieldBinder.cs │ │ ├── OverloadBinder.cs │ │ ├── OverloadResolver.cs │ │ ├── RuntimeChain.cs │ │ ├── SetFieldBinder.cs │ │ ├── SpecialParams.cs │ │ └── StructBox`1.cs │ ├── Errors.cs │ ├── Exceptions.cs │ ├── IEncodingProvider.cs │ ├── IHttpPhpContext.cs │ ├── IndirectLocal.cs │ ├── Location.cs │ ├── Operators.cs │ ├── OrderedDictionary.cs │ ├── Output.cs │ ├── Peachpie.Runtime.csproj │ ├── PhpAlias.cs │ ├── PhpArray.DebugView.cs │ ├── PhpArray.cs │ ├── PhpCallable.ArrayPool.tt │ ├── PhpCallable.ArrayPool.tt.cs │ ├── PhpCallback.cs │ ├── PhpHashtable.cs │ ├── PhpNumber.cs │ ├── PhpResource.cs │ ├── PhpSessionHandler.cs │ ├── PhpString.cs │ ├── PhpTypeCode.cs │ ├── PhpValue.DebugView.cs │ ├── PhpValue.cs │ ├── PhpValueConverter.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Reflection │ │ ├── AutoloadClassMap.cs │ │ ├── ExtensionsTable.cs │ │ ├── MetadataResourceManager.cs │ │ ├── PhpPropertyInfo.cs │ │ ├── PhpRoutineInfo.cs │ │ ├── PhpStackTrace.cs │ │ ├── PhpTypeInfo.cs │ │ ├── ReflectionUtils.Nullability.cs │ │ ├── ReflectionUtils.cs │ │ ├── RoutinesTable.cs │ │ ├── Serialization.cs │ │ ├── TypeFields.cs │ │ ├── TypeMembersUtils.cs │ │ ├── TypeMethods.cs │ │ └── TypesTable.cs │ ├── Resources │ │ ├── ErrResources.Designer.cs │ │ └── ErrResources.resx │ ├── Utilities │ │ ├── ArrayUtils.cs │ │ ├── ContextExtensions.cs │ │ ├── DateTimeUtils.cs │ │ ├── ElasticBitArray.cs │ │ ├── EncodingExtensions.cs │ │ ├── FuncExtensions.cs │ │ ├── Helpers.cs │ │ ├── ListPool.cs │ │ ├── NameValueCollectionUtils.cs │ │ ├── NumberUtils.cs │ │ ├── ObjectPools.cs │ │ ├── PathUtils.cs │ │ ├── PhpArrayUtils.cs │ │ ├── PhpClassName.cs │ │ ├── Platform.cs │ │ ├── RuntimeExtensions.cs │ │ └── StringUtils.cs │ ├── Variables.cs │ └── std │ │ ├── ArrayAccess.cs │ │ ├── Attribute.cs │ │ ├── Closure.cs │ │ ├── Generator.cs │ │ ├── Iterator.cs │ │ ├── Serializable.cs │ │ ├── Stringable.cs │ │ ├── Traversable.cs │ │ ├── __PHP_Incomplete_Class.cs │ │ └── stdClass.cs ├── Tests │ ├── Benchmarks │ │ ├── Benchmarks.csproj │ │ ├── PhpArrayBenchmark.cs │ │ └── Program.cs │ ├── Peachpie.App.Tests │ │ ├── AssembliesSignedTest.cs │ │ ├── CompiledILTest.cs │ │ ├── GlobTest.cs │ │ ├── NullabilityTest.cs │ │ ├── PCRETest.cs │ │ ├── PDOTest.cs │ │ ├── Peachpie.App.Tests.csproj │ │ ├── nullability_base.php │ │ └── nullability_extension.php │ ├── Peachpie.DiagnosticTests │ │ ├── DiagnosticTest.cs │ │ ├── OperationSelector.cs │ │ ├── Peachpie.DiagnosticTests.csproj │ │ ├── ScriptsListDataAttribute.cs │ │ ├── SpanUtils.cs │ │ ├── SymbolsSelector.cs │ │ └── tests │ │ │ ├── 4087_false_null_check.php │ │ │ ├── 5006_undefined_function_01.php │ │ │ ├── 5007_undefined_variable_01.php │ │ │ ├── 5007_undefined_variable_02.php │ │ │ ├── 5007_undefined_variable_03.php │ │ │ ├── 5007_undefined_variable_04.php │ │ │ ├── 5007_undefined_variable_05.php │ │ │ ├── 5007_undefined_variable_06.php │ │ │ ├── 5007_undefined_variable_07.php │ │ │ ├── 5008_undefined_class_01.php │ │ │ ├── 5008_undefined_class_02.php │ │ │ ├── 5008_undefined_class_03.php │ │ │ ├── 5009_callstatic.php │ │ │ ├── 5009_invalid_method.php │ │ │ ├── 5011_unreachable_code_01.php │ │ │ ├── 5011_unreachable_code_02.php │ │ │ ├── 5011_unreachable_code_03.php │ │ │ ├── 5011_unreachable_code_04.php │ │ │ ├── 5011_unreachable_code_05.php │ │ │ ├── 5011_unreachable_code_06.php │ │ │ ├── 5011_unreachable_code_07.php │ │ │ ├── 5011_unreachable_code_08.php │ │ │ ├── 5011_unreachable_code_09.php │ │ │ ├── 5012_ignored_01.php │ │ │ ├── 5021_array_key_type.php │ │ │ ├── 5022_duplicate_array_key.php │ │ │ ├── 5023_clone_nonobject.php │ │ │ ├── 5024_foreach_noniterable.php │ │ │ ├── 5025_printf_argcount.php │ │ │ ├── 5026_parent_ctor.php │ │ │ ├── 5027_phpdoc_param_mismatch.php.ignore │ │ │ ├── 5028_phpdoc_field_mismatch.php.ignore │ │ │ ├── 5031_pcre.php │ │ │ ├── 6002_redundant_cast.php │ │ │ ├── 6003_classname_case.php │ │ │ ├── nullable_01.php │ │ │ ├── readme.md │ │ │ ├── recursion_01.php │ │ │ ├── recursion_02.php │ │ │ ├── transform_skipcopy_01.php │ │ │ ├── transform_skippass_01.php │ │ │ ├── transformation_01.php.ignore │ │ │ ├── transformation_02.php │ │ │ ├── transformation_03.php │ │ │ ├── transformation_04.php │ │ │ ├── transformation_05.php │ │ │ ├── transformation_06.php │ │ │ ├── type_analysis_01.php │ │ │ ├── type_analysis_02.php │ │ │ ├── type_analysis_03.php │ │ │ ├── type_analysis_04.php │ │ │ ├── type_analysis_05.php │ │ │ ├── type_analysis_06.php │ │ │ ├── type_analysis_07.php │ │ │ ├── type_analysis_08.php │ │ │ ├── type_analysis_09.php │ │ │ ├── type_analysis_10.php │ │ │ └── type_analysis_null.php │ ├── Peachpie.NET.SdkTests │ │ ├── ComposerVersionTest.cs │ │ ├── Peachpie.NET.SdkTests.csproj │ │ └── SpdxTest.cs │ ├── Peachpie.Runtime.Tests │ │ ├── ClrFeaturesTests.cs │ │ ├── DynamicCache.Tests.cs │ │ ├── OrderedDictionary.Tests.cs │ │ ├── Peachpie.Runtime.Tests.csproj │ │ ├── PhpString.Tests.cs │ │ ├── PhpValue.Tests.cs │ │ ├── RuntimeChain.Tests.cs │ │ └── UtilitiesTests.cs │ ├── Peachpie.ScriptTests │ │ ├── Peachpie.ScriptTests.csproj │ │ ├── ScriptsListDataAttribute.cs │ │ └── ScriptsTest.cs │ └── Peachpie.Test │ │ ├── Peachpie.Test.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ └── index.php └── readme.md ├── tests ├── Tests.msbuildproj ├── arrays │ ├── alias_001.php │ ├── alias_002.php │ ├── array_combine.php │ ├── array_diff_intersect.php │ ├── array_fill.php │ ├── array_key_last_001.php │ ├── array_map.php │ ├── array_merge.php │ ├── array_merge_recursive_001.php │ ├── array_merge_recursive_002.php │ ├── array_pad.php │ ├── array_pop_001.php │ ├── array_push.php │ ├── array_replace_recursive_001.php │ ├── array_reverse.php │ ├── array_shift_001.php │ ├── array_slice.php │ ├── array_sum.php │ ├── array_unique.php │ ├── arrays_001.php │ ├── arrays_002.php │ ├── arrays_003.php │ ├── arrays_004_keys.php │ ├── ensure_001.php │ ├── ensure_002.php │ ├── foreach_001.php │ ├── foreach_002.php │ ├── foreach_003.php │ ├── foreach_004_list.php │ ├── lazy_copy │ │ ├── 001.php │ │ ├── 002.php │ │ ├── 003.php │ │ ├── 004.php │ │ ├── 005.php │ │ └── 006.php │ ├── list_001.php │ ├── list_002.php │ ├── max_key.php │ ├── pos.php │ └── spread_operator.php ├── bcmath │ ├── bcadd.php │ ├── bcmod.php │ └── bcscale.php ├── classes │ ├── __get_001.php │ ├── __get_002.php │ ├── __invoke.php │ ├── __invoke_002.php │ ├── __tostring.php │ ├── __tostring_002.php │ ├── abstracts_001.php │ ├── anonymous_001.php │ ├── anonymous_002.php │ ├── chaining_test.php │ ├── clone_001.php │ ├── conditional_001.php │ ├── conditional_002.php │ ├── constant_test.php │ ├── ctor_default_param.php │ ├── ctor_overloading.php │ ├── exceptions_001.php │ ├── exceptions_002.php │ ├── field_inheritance_001.php │ ├── field_inheritance_002.php │ ├── interfaces_001.php │ ├── interfaces_002.php │ ├── interfaces_003.php │ ├── iterators_001.php │ ├── iterators_002.php │ ├── iterators_003.php │ ├── iterators_004.php │ ├── iterators_006.php │ ├── iterators_007_and_exception.php │ ├── iterators_008.php │ ├── new_001.php │ ├── new_002.php │ ├── new_003.php │ ├── object_creation.php │ ├── object_iteration.php │ ├── overloading_001.php │ ├── overloading_002.php │ ├── overloading_003.php │ ├── overloading_004.php │ ├── overloading_005.php │ ├── overloading_006.php │ ├── overloading_006_.php │ ├── overloading_007.php │ ├── overloading_008.php │ ├── overloading_009.php │ ├── overloading_010.php │ ├── overloading_011.php │ ├── overloading_012.php │ ├── overriding_001.php │ ├── overriding_002.php │ ├── properties_001.php │ ├── properties_002.php │ ├── static_001.php │ ├── static_002.php │ ├── static_003.php │ ├── static_004.php │ ├── static_005_late_static_forwarding.php │ ├── static_006_late_static_forwarding.php │ ├── static_007_late_static_trait_forwarding.php │ ├── stdClass.php │ ├── streams_001.php │ ├── this_call.php │ ├── visibility_001.php │ └── visibility_002.php ├── constants │ ├── builtin.php │ ├── builtin_002.php │ ├── class_const_001.php │ ├── constants_001.php │ ├── constants_002.php │ ├── get_defined_constants.php │ ├── pseudoclassconsts_001.php │ └── pseudoconsts.php ├── constructs │ ├── class_consts.php │ ├── class_consts_002.php │ ├── exit_001.php │ ├── for_001.php │ ├── if_statement.php │ ├── switch_001.php │ ├── switch_002.php │ ├── switch_003.php │ └── switch_004.php ├── datetime │ ├── clone_001.php │ ├── clone_002.php │ ├── clone_003.php │ ├── dateinterval_001.php │ ├── dateinterval_002.php │ ├── dateperiod_001.php │ ├── datetime_001.php │ ├── set_timezone_001.php │ ├── timezone_offset_001.php │ └── timezone_offset_002.php ├── ftp │ ├── TestingFileClient.txt │ ├── TestingFileClientCopy.txt │ ├── TestingFileServer.txt │ └── ftp_test.php ├── functions │ ├── __call_001.php │ ├── __call_002.php │ ├── anonymous_001.php │ ├── anonymous_002.php │ ├── anonymous_003.php │ ├── anonymous_004.php │ ├── anonymous_005_this.php │ ├── anonymous_006_args.php │ ├── anonymous_007.php │ ├── anonymous_008.php │ ├── anonymous_009_calls_callback.php │ ├── callback_001.php │ ├── callback_002.php │ ├── callback_003.php │ ├── callback_004.php │ ├── callback_005.php │ ├── callback_006.php │ ├── conditional_001.php │ ├── factorial.php │ ├── fdiv.php │ ├── indirect_001_varargs.php │ ├── instance_call_001.php │ ├── instance_call_002.php │ ├── instance_call_003.php │ ├── instance_call_004.php │ ├── is_a.php │ ├── is_file_001.php │ ├── is_numeric.php │ ├── late_static_001.php │ ├── late_static_002.php │ ├── leibnitz.php │ ├── math_001.php │ ├── math_002.php │ ├── param_default_001.php │ ├── param_default_002.php │ ├── param_default_003.php │ ├── param_default_004.php │ ├── param_default_005.php │ ├── param_default_006.php │ ├── param_null_001.php │ ├── param_null_002.php │ ├── param_out_001.php │ ├── param_out_002.php │ ├── param_out_003_default.php │ ├── param_typehint_001.php │ ├── random_int.php │ ├── recursion_001.php │ ├── return_dereference.php │ ├── return_finally.php │ ├── return_finally2.php │ ├── return_type.php │ ├── runtimechain_001.php │ ├── static_call_001.php │ ├── static_call_002.php │ ├── static_call_003.php │ ├── unpacking_001.php │ ├── unpacking_002.php │ ├── unpacking_003_byref.php │ ├── unpacking_004_new.php │ └── unpacking_005.php ├── gd │ ├── gd_imageaffinematrixconcat001.php │ ├── gd_imageaffinematrixget001.php │ ├── gd_imagecrop001.php │ ├── gd_imageflip001.php │ ├── gd_imageresolution001.php │ └── gd_imagescale001.php ├── generators │ ├── generators_001.php │ ├── generators_002.php │ ├── generators_003.php │ ├── generators_004.php │ ├── generators_005.php │ ├── generators_006.php │ ├── generators_007.php │ ├── generators_008.php │ ├── generators_009.php │ ├── generators_010.php │ ├── generators_011.php │ ├── generators_012.php │ ├── generators_013.php │ ├── generators_014.php │ ├── generators_015.php │ ├── generators_016.php │ ├── generators_017.php │ ├── generators_018.php │ └── generators_019.php ├── gettext │ ├── gettext_001.php │ ├── translations │ │ └── cs_CZ │ │ │ └── LC_MESSAGES │ │ │ ├── gettext_001_alternate.mo │ │ │ ├── gettext_001_alternate.po │ │ │ ├── gettext_001_default.mo │ │ │ ├── gettext_001_default.po │ │ │ ├── gettext_001_invalid.mo │ │ │ └── gettext_001_invalid.po │ └── translations2 │ │ └── cs_CZ │ │ └── LC_MESSAGES │ │ ├── gettext_001_default.mo │ │ └── gettext_001_default.po ├── hash │ ├── crypt_001.php │ ├── crypt_002.php │ ├── crypt_003.php │ ├── crypt_004.php │ ├── password_get_info_001.php │ ├── password_get_info_002.php │ ├── password_hash_001.php │ ├── password_hash_002.php │ ├── password_hash_003.php │ ├── password_hash_004.php │ ├── password_needs_rehash_001.php │ └── password_needs_rehash_002.php ├── image │ ├── imageinfo.php │ └── round-socialmedia-68x68.png ├── ini │ ├── parse_ini_001.php │ └── parse_ini_002.php ├── openssl │ ├── openssl_decrypt_001.php │ ├── openssl_decrypt_002.php │ ├── openssl_decrypt_003.php │ ├── openssl_digest.php │ ├── openssl_encrypt_001.php │ ├── openssl_encrypt_002.php │ ├── openssl_encrypt_003.php │ ├── openssl_encrypt_decrypt_raw.php │ ├── openssl_x509_export.php │ ├── openssl_x509_fingerprint.php │ ├── openssl_x509_read.php │ └── test.pem ├── operators │ ├── assign_001.php │ ├── assign_002.php │ ├── assign_003.php │ ├── assign_004.php │ ├── assign_005.php │ ├── binary_001.php │ ├── binary_002.php │ ├── cast_001.php │ ├── cast_002.php │ ├── cast_003.php │ ├── cast_bool.php │ ├── coalesce.php │ ├── comparison_001.php │ ├── comparison_002.php │ ├── comparison_003.php │ ├── comparison_004.php │ ├── div_001.php │ ├── equality_001.php │ ├── equality_002.php │ ├── instanceof_001.php │ ├── instanceof_002.php │ ├── isset_fields.php │ ├── isset_locals.php │ ├── objop.php │ ├── pow_001.php │ ├── strictequality_001.php │ ├── sub_001.php │ ├── ternary_003.php │ ├── ternary_ex.php │ └── ternary_short.php ├── pcre │ ├── pcre_split_ungreedy_001.php │ ├── pcre_subroutines_001.php │ ├── preg_filter.php │ ├── preg_match_001.php │ ├── preg_match_002.php │ ├── preg_match_003.php │ ├── preg_match_004.php │ ├── preg_match_005.php │ ├── preg_match_006.php │ ├── preg_replace_001.php │ ├── preg_replace_callback_001.php │ ├── reset_match_start_001.php │ ├── reset_match_start_002.php │ └── reset_match_start_003.php ├── pdo │ ├── bindparam_001.php │ ├── bindparam_002.php │ ├── errmode.php │ ├── fetch_001.php │ ├── fetch_002.php │ ├── fetch_003.php │ ├── reflection.php │ ├── sqlite_udf.php │ ├── sqlite_udf_aggregate.php │ ├── sqlite_udf_sort.php │ ├── sqlite_udf_with_parameters.php │ └── stmtclass.php ├── program.phpx ├── readme.md ├── reflection │ ├── ReflectionExtension.php │ ├── ReflectionFunction_001.php │ ├── ReflectionMethod_001.php │ ├── class_constant_001.php │ ├── class_instance_001.php │ ├── class_interface_001.php │ ├── class_methods_001.php │ ├── class_parent_001.php │ ├── class_property_001.php │ ├── class_property_002.php │ ├── closure_allows_null_001.php │ ├── function_parameters_001.php │ ├── method_visibility_001.php │ ├── subclass_001.php │ ├── variadic_parameters_001.php │ ├── variadic_parameters_002.php │ └── variadic_parameters_003.php ├── scripting │ ├── create_function_001.php │ └── eval_001.php ├── spl │ ├── AppendIterator_001.php │ ├── AppendIterator_002.php │ ├── AppendIterator_003.php │ ├── ArrayIterator_001.php │ ├── CachingIterator_001.php │ ├── CachingIterator_002.php │ ├── MultipleIterator_001.php │ ├── OuterIterator_001.php │ ├── ParentIterator_001.php │ ├── RecursiveArrayIterator_001.php │ ├── RecursiveCachingIterator_001.php │ ├── RecursiveDirectoryIterator_001.php │ ├── RecursiveDirectoryIterator_002.php │ ├── RecursiveDirectoryIterator_003.php │ ├── RecursiveIteratorIterator_001.php │ ├── RecursiveIteratorIterator_002.php │ ├── RecursiveRegexIterator_001.php │ ├── RecursiveTreeIterator_001.php │ ├── RegexIterator_001.php │ ├── SplObjectStorage.php │ ├── SplTempFileObject_001.php │ ├── serialization_001.php │ └── subdir │ │ ├── sample_file.txt │ │ └── subsubdir │ │ └── other_sample_file.txt ├── strings │ ├── addcslashes.php │ ├── base64.php │ ├── concat_001.php │ ├── concat_002.php │ ├── double_001.php │ ├── echo_001.php │ ├── echo_002.php │ ├── hash_001.php │ ├── heredoc.php │ ├── htmlspecialchars.php │ ├── is_object_001.php │ ├── json_001.php │ ├── json_002_JsonSerializable.php │ ├── json_003.php │ ├── json_004.php │ ├── json_005.php │ ├── json_006.php │ ├── mb_strlen_001.php │ ├── mb_substr.php │ ├── nl2br.php │ ├── number_format.php │ ├── pack.php │ ├── sprintf2.php │ ├── str_contains.php │ ├── str_ireplace.php │ ├── str_repeat.php │ ├── str_replace.php │ ├── str_word_count.php │ ├── stripslashes.php │ ├── strtr.php │ ├── substr_operations.php │ ├── tostring.php │ ├── vsprintf_001.php │ ├── wordwrap.php │ └── zlib_001.php ├── traits │ ├── anonymous_function_001.php │ ├── instanceof_001.php │ ├── namespaces_001.php │ ├── static_001.php │ ├── static_002.php │ ├── static_003.php │ ├── trait_001.php │ ├── trait_002.php │ ├── trait_003.php │ ├── trait_004.php │ ├── trait_005.php │ ├── trait_006.php │ └── trait_007.php ├── transformations │ ├── arithmetic_001.php │ ├── callable_001.php │ ├── conditional_001.php │ ├── define_001.php │ ├── empty_001.php │ ├── ord_001.php │ ├── ord_002.php │ ├── skipcopy_001.php │ ├── skippass_001.php │ └── skippass_002.php ├── variables │ ├── arguments.php │ ├── chains_001.php │ ├── dump_001.php │ ├── empty_001.php │ ├── empty_002.php │ ├── extract_refs.php │ ├── get_resource_type_001.php │ ├── globals_001.php │ ├── globals_002.php │ ├── globals_003.php │ ├── globals_004.php │ ├── globals_005.php │ ├── hinting_001.php │ ├── indirect_001.php │ ├── indirect_002.php │ ├── indirect_003.php │ ├── indirect_004.php │ ├── indirect_005.php │ ├── indirect_007.php │ ├── indirect_008.php │ ├── isset_001.php │ ├── isset_002.php │ ├── isset_003.php │ ├── isset_004.php │ ├── isset_005.php │ ├── isset_006.php │ ├── makearray.php │ ├── nullable_001.php │ ├── serialize_001.php │ ├── static_001.php │ ├── static_002.php │ ├── static_003.php │ ├── typeerror_001.php │ ├── unset_001.php │ ├── unset_002.php │ ├── unset_003.php │ ├── unset_004.php │ ├── unset_005.php │ ├── unset_006.php │ ├── valueref_001.php │ ├── valueref_002.php │ ├── valueref_003.php │ ├── valueref_004.php │ ├── valueref_005.php │ └── valueref_sscanf.php ├── web │ ├── filter_var.php │ ├── filter_var_array.php │ ├── parse_url.php │ ├── parse_url_2.php │ ├── parse_url_at_bug.php │ └── rawurlencode.php ├── xml │ ├── SimpleXMLIterator_001.php │ ├── SimpleXMLIterator_002.php │ ├── area_list.xsl │ ├── area_name.xml │ ├── book.xml │ ├── bug_26384.php │ ├── bug_28721.php │ ├── bug_32615.php │ ├── bug_33853.php │ ├── bug_34276.php │ ├── dom_001.php │ ├── dom_002.php │ ├── dom_003.php │ ├── dom_004.php │ ├── dom_005.php │ ├── dom_006.php │ ├── dom_007.php │ ├── dom_008.php │ ├── dom_009.php │ ├── dom_010.php │ ├── schemas │ │ ├── dom_010.xsd │ │ └── dom_010_ref.xsd │ ├── simpleXMLIterator_003.php │ ├── simpleXMLIterator_004.php │ ├── simpleXMLIterator_005.php │ ├── simplexml_001.php │ ├── simplexml_002.php │ ├── simplexml_003.php │ ├── simplexml_004.php │ ├── simplexml_005.php │ ├── simplexml_006.php │ ├── simplexml_007.php │ ├── simplexml_008.php │ ├── simplexml_009.php │ ├── simplexml_010.php │ ├── simplexml_011.php │ ├── simplexml_014.php │ ├── simplexml_015.php │ ├── simplexml_016.php │ ├── simplexml_017.php │ ├── simplexml_018.php │ ├── simplexml_019.php │ ├── simplexml_020.php │ ├── simplexml_021.php │ ├── xincludeData │ │ ├── xinclude001a.xml │ │ ├── xinclude001b.xml │ │ ├── xinclude001c.xml │ │ ├── xinclude002a.xml │ │ ├── xinclude002b.xml │ │ ├── xinclude002c.xml │ │ ├── xinclude002d.xml │ │ ├── xinclude003a.xml │ │ ├── xinclude003b.xml │ │ ├── xinclude004a.xml │ │ ├── xinclude004b.xml │ │ ├── xinclude004c.xml │ │ ├── xinclude006a.xml │ │ ├── xinclude006b.xml │ │ ├── xinclude007a.xml │ │ └── xinclude007b.xml │ ├── xinclude_001.php │ ├── xinclude_002.php │ ├── xinclude_003.php │ ├── xinclude_004.php │ ├── xinclude_006.php │ ├── xinclude_007.php │ ├── xmlreader_001.php │ ├── xmlreader_002.php │ ├── xmlreader_003.php │ ├── xmlreader_004.php │ ├── xmlreader_005.php │ ├── xmlreader_006.php │ ├── xmlwriter_001.php │ ├── xmlwriter_002.php │ ├── xmlwriter_003.php │ ├── xmlwriter_004.php │ ├── xmlwriter_005.php │ ├── xmlwriter_006.php │ ├── xmlwriter_007.php │ ├── xpath_001.php │ ├── xpath_002.php │ ├── xpath_003.php │ ├── xslt.xml │ ├── xslt.xsl │ ├── xslt_001.php │ ├── xslt_002.php │ ├── xslt_003.php │ ├── xslt_004.php │ ├── xslt_005.php │ ├── xslt_006.php │ ├── xslt_007.php │ ├── xslt_008.php │ ├── xslt_008.xml │ ├── xslt_008.xsl │ ├── xslt_009.php │ ├── xslt_009.xsl │ └── xslt_010.php └── zip │ ├── archive.zip │ ├── zip_001.php │ ├── zip_002.php │ ├── ziparchive_001.php │ ├── ziparchive_001.txt │ ├── ziparchive_002.php │ └── ziparchive_003.php └── tools ├── cslex.exe ├── gppg.exe ├── nuget.exe └── readme.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | patreon: pchpcompiler 4 | 5 | -------------------------------------------------------------------------------- /.nugs/readme.md: -------------------------------------------------------------------------------- 1 | Placeholder for development nuget packages. -------------------------------------------------------------------------------- /Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | all 7 | runtime; build; native; contentfiles; analyzers 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /NuGet.Config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /build/StrongKeys/core.snk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/build/StrongKeys/core.snk -------------------------------------------------------------------------------- /build/build.ps1: -------------------------------------------------------------------------------- 1 | Param( 2 | [string]$version = "1.0.0-dev", 3 | [string]$config = "Debug" 4 | ) 5 | 6 | $props = "/p:Version=$version,Configuration=$config" 7 | 8 | Write-Host -f Green "msbuild $props ..." 9 | 10 | msbuild /t:restore "$PSScriptRoot/../Peachpie.sln" /v:m $props 11 | dotnet restore "$PSScriptRoot/../src/Peachpie.NET.Sdk" /v:m $props 12 | msbuild /t:build "$PSScriptRoot/../Peachpie.sln" /v:m $props 13 | -------------------------------------------------------------------------------- /build/devps.cmd: -------------------------------------------------------------------------------- 1 | cmd.exe /k ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" & powershell" -------------------------------------------------------------------------------- /build/readme.md: -------------------------------------------------------------------------------- 1 | # Peachpie Compiler & Runtime Build Toolset 2 | 3 | http://www.peachpie.io 4 | 5 | - *StrongKeys* - files used for strong assembly signing. 6 | - *Targets* - common build targets for all Peachpie components. 7 | - *dummy* - a simple project referencing Peachpie packages used to restore built packages into NuGet cache. 8 | -------------------------------------------------------------------------------- /docs/logos/dotnet-foundation-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/docs/logos/dotnet-foundation-logo.png -------------------------------------------------------------------------------- /docs/logos/peachpie-round-pieonly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/docs/logos/peachpie-round-pieonly.png -------------------------------------------------------------------------------- /docs/logos/round-orange-196x196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/docs/logos/round-orange-196x196.png -------------------------------------------------------------------------------- /docs/readme.md: -------------------------------------------------------------------------------- 1 | ## PeachPie Compiler and Runtime 2 | 3 | --- 4 | 5 | - [Getting Started](https://docs.peachpie.io/get-started/) - for a quick start with PeachPie, and how to use the platform. 6 | - [Documentation](https://docs.peachpie.io/) - The project documentation. 7 | -------------------------------------------------------------------------------- /src/Compiler/peach/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/Compiler/peach/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Pchp.CodeAnalysis.CommandLine 8 | { 9 | class Program 10 | { 11 | static int Main(string[] args) 12 | { 13 | return 14 | new Pchp(args, new SimpleAnalyzerAssemblyLoader()) 15 | .Run(Console.Out); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO.Firebird/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Pchp.Core; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: PhpExtension("pdo_firebird")] 11 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO.IBM/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Pchp.Core; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: PhpExtension("pdo_ibm")] -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO.MySQL/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using Pchp.Core; 3 | 4 | // General Information about an assembly is controlled through the following 5 | // set of attributes. Change these attribute values to modify the information 6 | // associated with an assembly. 7 | [assembly: AssemblyTrademark("")] 8 | [assembly: PhpExtension("pdo_mysql")] 9 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO.PgSQL/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Pchp.Core; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: PhpExtension("pdo_pgsql")] 11 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO.SqlSrv/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | using Pchp.Core; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTrademark("")] 10 | [assembly: PhpExtension("pdo_sqlsrv")] 11 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO.Sqlite/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using Pchp.Core; 3 | 4 | [assembly: AssemblyTrademark("")] 5 | [assembly: PhpExtension("pdo_sqlite")] 6 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO/PDORegistrator.cs: -------------------------------------------------------------------------------- 1 | using Pchp.Core; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Reflection; 6 | 7 | namespace Peachpie.Library.PDO 8 | { 9 | internal sealed class PDORegistrator 10 | { 11 | public PDORegistrator() 12 | { 13 | Context.RegisterConfiguration(new PDOConfiguration()); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using Pchp.Core; 3 | 4 | [assembly: AssemblyTrademark("")] 5 | [assembly: PhpExtension("pdo", Registrator = typeof(Peachpie.Library.PDO.PDORegistrator))] 6 | -------------------------------------------------------------------------------- /src/PDO/Peachpie.Library.PDO/Utilities/DbValueHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Peachpie.Library.PDO.Utilities 6 | { 7 | static class DbValueHelper 8 | { 9 | /// 10 | /// Gets boxed boolean value. 11 | /// 12 | public static object/*!*/AsObject(this bool value) => value ? s_TrueObject : s_FalseObject; 13 | 14 | static readonly object s_TrueObject = (object)true; 15 | 16 | static readonly object s_FalseObject = (object)false; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Peachpie.AspNetCore.Mvc/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyConfiguration("")] 9 | [assembly: AssemblyCompany("")] 10 | [assembly: AssemblyProduct("Peachpie.AspNetCore.Mvc")] 11 | [assembly: AssemblyTrademark("")] 12 | -------------------------------------------------------------------------------- /src/Peachpie.AspNetCore.Web/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyConfiguration("")] 9 | [assembly: AssemblyCompany("")] 10 | [assembly: AssemblyProduct("Peachpie.AspNetCore.Web")] 11 | [assembly: AssemblyTrademark("")] 12 | -------------------------------------------------------------------------------- /src/Peachpie.AspNetCore.Web/RequestCompletionReason.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Peachpie.AspNetCore.Web 6 | { 7 | /// 8 | /// Request end reason. 9 | /// 10 | internal enum RequestCompletionReason 11 | { 12 | None = 0, 13 | Finished, 14 | ForceEnd, 15 | Timeout, 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Peachpie.CodeAnalysis/CodeGen/Symbols/SourceFileSymbol.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using Microsoft.CodeAnalysis; 5 | 6 | namespace Pchp.CodeAnalysis.Symbols 7 | { 8 | partial class SourceFileSymbol 9 | { 10 | internal void SynthesizeInit(Emit.PEModuleBuilder module, DiagnosticBag diagnostics) 11 | { 12 | // module.EmitBootstrap(this); // unnecessary 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Peachpie.CodeAnalysis/CommandLine/SimpleAnalyzerAssemblyLoader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Pchp.CodeAnalysis 6 | { 7 | class SimpleAnalyzerAssemblyLoader : Microsoft.CodeAnalysis.IAnalyzerAssemblyLoader 8 | { 9 | public void AddDependencyLocation(string fullPath) 10 | { 11 | throw new NotImplementedException(); 12 | } 13 | 14 | public System.Reflection.Assembly LoadFromPath(string fullPath) 15 | { 16 | throw new NotImplementedException(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Peachpie.CodeAnalysis/Emitter/Model/NamespaceSymbolAdapter.cs: -------------------------------------------------------------------------------- 1 | using Cci = Microsoft.Cci; 2 | 3 | namespace Pchp.CodeAnalysis.Symbols 4 | { 5 | internal partial class NamespaceSymbol : Cci.INamespace 6 | { 7 | Cci.INamespace Cci.INamespace.ContainingNamespace => this.ContainingNamespace as Cci.INamespace; 8 | string Cci.INamedEntity.Name => MetadataName; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Peachpie.CodeAnalysis/FlowAnalysis/Symbols/SourceCustomAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using Pchp.CodeAnalysis.FlowAnalysis; 5 | 6 | namespace Pchp.CodeAnalysis.Symbols 7 | { 8 | partial class SourceCustomAttribute 9 | { 10 | /// 11 | /// Associated instance. 12 | /// 13 | internal TypeRefContext TypeCtx { get; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/Peachpie.CodeAnalysis/FlowAnalysis/Symbols/SourceFieldSymbol.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using Pchp.CodeAnalysis.FlowAnalysis; 5 | 6 | namespace Pchp.CodeAnalysis.Symbols 7 | { 8 | partial class SourceFieldSymbol 9 | { 10 | /// 11 | /// Field's instance. 12 | /// 13 | internal TypeRefContext EnsureTypeRefContext() => _typeCtx ?? (_typeCtx = TypeRefFactory.CreateTypeRefContext(_containingType)); 14 | 15 | TypeRefContext _typeCtx; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Peachpie.CodeAnalysis/Utilities/EmptyStruct.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using Pchp.CodeAnalysis.Semantics; 5 | 6 | namespace Peachpie.CodeAnalysis.Utilities 7 | { 8 | /// 9 | /// Empty structure to be used in generic classes requiring return or argument type (such as ). 10 | /// 11 | public struct VoidStruct 12 | { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Peachpie.Library.MySql/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTrademark("")] 9 | 10 | // annotates this library as a php extension, 11 | // all its public static methods with compatible signatures will be seen as global functions to php scope 12 | [assembly: Pchp.Core.PhpExtension("mysql", "mysqli")] 13 | -------------------------------------------------------------------------------- /src/Peachpie.Library.XmlDom/DOMConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Xml; 5 | using Pchp.Core; 6 | 7 | namespace Peachpie.Library.XmlDom 8 | { 9 | /// 10 | /// Represents a configuration of a , currently not implemented in PHP nor Peachpie. 11 | /// 12 | [PhpType(PhpTypeAttribute.InheritName), PhpExtension("dom")] 13 | public class DOMConfiguration 14 | { 15 | } 16 | } -------------------------------------------------------------------------------- /src/Peachpie.Library/Generators/Generate.cmd: -------------------------------------------------------------------------------- 1 | "..\..\..\Tools\cslex" "StrToTime.lex" "..\Parsers\StrToTimeScanner.cs" /v:2 2 | 3 | REM "..\..\..\Tools\cslex" "json.lex" "..\Parsers\jsonLexer.cs" /v:2 4 | REM "..\..\..\Tools\gppg" /l /r "json.y" "..\Parsers\jsonParser.cs" "..\Parsers\json.log" 5 | 6 | @pause -------------------------------------------------------------------------------- /src/Peachpie.Library/Parsers/GPPG.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/src/Peachpie.Library/Parsers/GPPG.cs -------------------------------------------------------------------------------- /src/Peachpie.Library/Reflection/ReflectionException.cs: -------------------------------------------------------------------------------- 1 | using Pchp.Core; 2 | using Pchp.Library.Spl; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | namespace Pchp.Library.Reflection 9 | { 10 | [PhpType(PhpTypeAttribute.InheritName), PhpExtension(ReflectionUtils.ExtensionName)] 11 | public class ReflectionException : Spl.Exception 12 | { 13 | public ReflectionException(string message = "", long code = 0, Throwable previous = null) 14 | :base(message, code, previous) 15 | { 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/Peachpie.Library/Reflection/Reflector.cs: -------------------------------------------------------------------------------- 1 | #nullable enable 2 | 3 | using Pchp.Core; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Threading.Tasks; 8 | 9 | namespace Pchp.Library.Reflection 10 | { 11 | [PhpType(PhpTypeAttribute.InheritName), PhpExtension(ReflectionUtils.ExtensionName)] 12 | public interface Reflector 13 | { 14 | // public static string export(void ) 15 | 16 | /// 17 | /// The reflected object name. 18 | /// 19 | string __toString(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/Peachpie.NET.Sdk/Sdk/Sdk.targets: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/Peachpie.NET.Sdk/Sdk/Version.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/Peachpie.NET.Sdk/SimpleAnalyzerAssemblyLoader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Peachpie.NET.Sdk 6 | { 7 | //class SimpleAnalyzerAssemblyLoader : Microsoft.CodeAnalysis.IAnalyzerAssemblyLoader 8 | //{ 9 | // public void AddDependencyLocation(string fullPath) 10 | // { 11 | // throw new NotImplementedException(); 12 | // } 13 | 14 | // public System.Reflection.Assembly LoadFromPath(string fullPath) 15 | // { 16 | // throw new NotImplementedException(); 17 | // } 18 | //} 19 | } 20 | -------------------------------------------------------------------------------- /src/Peachpie.Runtime/Utilities/PhpClassName.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace Pchp.Core.Utilities 6 | { 7 | /// 8 | /// Helper for PHP namespaced class name. 9 | /// 10 | struct PhpClassName 11 | { 12 | /// 13 | /// Namespace separator character (\\). 14 | /// 15 | public const char NamespaceSeparator = '\\'; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Peachpie.Runtime/std/Stringable.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using Pchp.Core; 3 | 4 | /// 5 | /// Built-in interface for classes that implement the __toString(). 6 | /// 7 | [EditorBrowsable(EditorBrowsableState.Advanced)] 8 | [PhpType(PhpTypeAttribute.InheritName, MinimumLangVersion = "8.0"), PhpExtension("Core")] 9 | public interface Stringable 10 | { 11 | /// 12 | /// Converts object to string. 13 | /// 14 | string __toString(); 15 | } 16 | -------------------------------------------------------------------------------- /src/Peachpie.Runtime/std/Traversable.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using Pchp.Core; 3 | 4 | /// 5 | /// Built-in marker interface. 6 | /// 7 | [EditorBrowsable(EditorBrowsableState.Advanced)] 8 | [PhpType(PhpTypeAttribute.InheritName), PhpExtension("Core")] 9 | public interface Traversable 10 | { 11 | } -------------------------------------------------------------------------------- /src/Tests/Benchmarks/Benchmarks.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Exe 5 | $(NoWarn);1591; 6 | 8.0 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Tests/Benchmarks/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using BenchmarkDotNet.Running; 3 | 4 | namespace Benchmarks 5 | { 6 | class Program 7 | { 8 | static void Main(string[] args) 9 | { 10 | var summary = BenchmarkRunner.Run(); 11 | 12 | //var b = new PhpArrayBenchmark { Index = 47, }; 13 | //for (int i = 0; i < 219200000; i++) 14 | //{ 15 | // b.ReadArrayItemsByStringKey(); 16 | //} 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.App.Tests/PCRETest.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Text; 4 | using Microsoft.VisualStudio.TestTools.UnitTesting; 5 | using Pchp.Core; 6 | 7 | namespace Peachpie.App.Tests 8 | { 9 | [TestClass] 10 | public class PCRETest 11 | { 12 | [TestMethod] 13 | public void PregMatchPerf() 14 | { 15 | Pchp.Library.PCRE.preg_match( 16 | "/^(([A-Za-z0-9!#$%&'*+\\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\\/=?^_`{|}~\\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", 17 | "something@example.org"); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /src/Tests/Peachpie.App.Tests/nullability_extension.php: -------------------------------------------------------------------------------- 1 | returnNull($x); 5 | } 6 | 7 | function non_nullable(Nullability $x) { 8 | return $x->noNull($x); 9 | } 10 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/4087_false_null_check.php: -------------------------------------------------------------------------------- 1 | 0) { 9 | $maybeUndefined = 0; 10 | } 11 | echo $maybeUndefined/* non strict !PHP5007 */; 12 | 13 | echo $alwaysDefined; 14 | } 15 | 16 | bar(3); 17 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/5007_undefined_variable_02.php: -------------------------------------------------------------------------------- 1 | 'answer'); 6 | } 7 | 8 | if (isset($maybeDefined[42])) { 9 | echo $maybeDefined; 10 | echo $maybeDefined[42]; 11 | echo $maybeDefined[1000]; 12 | } else { 13 | echo $maybeDefined;/* non strict PHP5007 */ 14 | } 15 | 16 | echo $maybeDefined/* non strict PHP5007 */[42]; 17 | } 18 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/5008_undefined_class_01.php: -------------------------------------------------------------------------------- 1 | 'Lorem', 12 | $s => 'Ipsum', 13 | $mc/*!PHP5021!*/ => 'Dolor', 14 | $any => 'Sit', 15 | $is => 'Amet', 16 | $ismc/*!PHP5021!*/ => 'Consecteurer', 17 | $number => "int|double", 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/5022_duplicate_array_key.php: -------------------------------------------------------------------------------- 1 | 'Bla', 6 | 1 => 'Bal', 7 | true/*!PHP5022!*/ => 'Alb', 8 | false/*!PHP5022!*/ => 'Lab', 9 | 42 => 'Foo', 10 | "42"/*!PHP5022!*/ => 'Bar', 11 | 42.75/*!PHP5022!*/ => 'Baz' 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/5023_clone_nonobject.php: -------------------------------------------------------------------------------- 1 | = 5) { 5 | return pad_right(substr($a, 1)); 6 | } else { 7 | return $a; 8 | } 9 | } 10 | 11 | function pad_right(string $a) { 12 | if (strlen($a) >= 5) { 13 | return pad_left(substr($a, 0, strlen($a) - 1)); 14 | } else { 15 | return $a; 16 | } 17 | } 18 | 19 | /*|string|*/$res = pad_right("Lorem Ipsum"); 20 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/transformation_01.php.ignore: -------------------------------------------------------------------------------- 1 | 0) { 5 | echo "a"; 6 | $a--; 7 | } 8 | 9 | if (!function_exists('print_r')) { 10 | return "foo";/*!PHP5011!*/ 11 | } else { 12 | return 0.1; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/transformation_06.php: -------------------------------------------------------------------------------- 1 | = 0; /*|integer|*/$i--) 13 | { 14 | echo /*|integer|*/$i; 15 | /*|integer|*/$i = $i - 1; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.DiagnosticTests/tests/type_analysis_09.php: -------------------------------------------------------------------------------- 1 | 1 ) { 6 | /*|double|*/$prev_page = /*|double|*/$page - 1; 7 | 8 | if ( /*|double|*/$prev_page > /*|double|*/$max_pages ) { 9 | /*|double|*/$prev_page = /*|double|*/$max_pages; 10 | } 11 | 12 | echo /*|double|*/$prev_page; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.Test/Peachpie.Test.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Exe 5 | $(NoWarn);1591 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | PreserveNewest 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.Test/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "debug \"index.php\"": { 4 | "commandName": "Project" 5 | }, 6 | "build \"index.php\"": { 7 | "commandName": "Executable", 8 | "executablePath": "..\\..\\..\\..\\..\\Compiler\\peach\\bin\\Debug\\net50\\peach.exe", 9 | "commandLineArgs": "/o- /xmldoc index.php" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/Tests/Peachpie.Test/index.php: -------------------------------------------------------------------------------- 1 |  null]; 10 | set($arr['foo'], ['bar']); 11 | 12 | print_r(str_replace('a', 'o', $arr['foo'])); 13 | } 14 | 15 | test(); 16 | -------------------------------------------------------------------------------- /tests/arrays/array_combine.php: -------------------------------------------------------------------------------- 1 | "bar", "bar" => "foo"))); 9 | print_r($c); 10 | // Update a specific subkey, should not mutate the others 11 | $c["B"]["foo"] = "notbar"; 12 | print_r($c); 13 | } 14 | 15 | test(['a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D'], ['w' => 'W', 'x' => 'X', 'y' => 'Y', 'z' => 'Z'], 'array_combine'); 16 | -------------------------------------------------------------------------------- /tests/arrays/array_fill.php: -------------------------------------------------------------------------------- 1 | "bar", "bar" => "foo")); 9 | print_r($p); 10 | // Update a specific subkey, should not mutate the others 11 | $p[1]["foo"] = "notbar"; 12 | print_r($p); 13 | } 14 | 15 | test('array_fill'); 16 | -------------------------------------------------------------------------------- /tests/arrays/array_merge.php: -------------------------------------------------------------------------------- 1 | 1], ["a" => 2]) ); // ["a" => 2] 7 | -------------------------------------------------------------------------------- /tests/arrays/array_merge_recursive_001.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'sub' => [ 8 | 'foo' => 0 9 | ] 10 | ] 11 | ]; 12 | 13 | $a2 = [ 14 | 'sub' => [ 15 | 'sub' => [ 16 | 'foo' => 1 17 | ] 18 | ] 19 | ]; 20 | 21 | $res = array_merge_recursive($a1, $a2); 22 | 23 | print_r($a1); 24 | } 25 | 26 | test(); 27 | -------------------------------------------------------------------------------- /tests/arrays/array_pad.php: -------------------------------------------------------------------------------- 1 | "bar", "bar" => "foo")); 9 | print_r($p); 10 | // Update a specific subkey, should not mutate the others 11 | $p[1]["foo"] = "notbar"; 12 | print_r($p); 13 | } 14 | 15 | test(["test" => "test"], 'array_pad'); 16 | -------------------------------------------------------------------------------- /tests/arrays/array_pop_001.php: -------------------------------------------------------------------------------- 1 | "foo", 8 => "bar"]); 14 | test(["foo" => "foo", "bar" => "bar"]); 15 | test(["foo" => "foo", 4 => "bar", 8 => "baz"]); 16 | test(["foo" => "foo", 8 => "baz", 4 => "bar"]); 17 | -------------------------------------------------------------------------------- /tests/arrays/array_push.php: -------------------------------------------------------------------------------- 1 | [ 7 | 'foo' => 'bar' 8 | ] 9 | ]; 10 | 11 | $a2 = [ 12 | 'sub' => [ 13 | 'baz' => 'baz' 14 | ] 15 | ]; 16 | 17 | array_replace_recursive($a1, $a2); 18 | 19 | print_r($a1); 20 | } 21 | 22 | test(); 23 | -------------------------------------------------------------------------------- /tests/arrays/array_reverse.php: -------------------------------------------------------------------------------- 1 | 3], true) ); 7 | -------------------------------------------------------------------------------- /tests/arrays/array_shift_001.php: -------------------------------------------------------------------------------- 1 | 1 ) 8 | -------------------------------------------------------------------------------- /tests/arrays/array_slice.php: -------------------------------------------------------------------------------- 1 | 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D'], 'array_slice'); 10 | -------------------------------------------------------------------------------- /tests/arrays/array_sum.php: -------------------------------------------------------------------------------- 1 | 1, "b" => 2, 3 => 3]; 6 | $arr[] = 4; 7 | $arr[] = [["Hello"]]; 8 | 9 | echo $arr[5][0][0]; // Hello 10 | } 11 | 12 | testarr(); 13 | 14 | echo "\nDone."; 15 | -------------------------------------------------------------------------------- /tests/arrays/arrays_004_keys.php: -------------------------------------------------------------------------------- 1 | 'test']; // https://github.com/peachpiecompiler/peachpie/issues/1084 6 | echo 7 | isset($a[1]) ? 'fail' : 'ok', 8 | PHP_EOL, 9 | isset($a['+1']) ? 'ok' : 'fail' 10 | ; 11 | } 12 | 13 | testarr(); 14 | 15 | echo PHP_EOL, "Done."; 16 | -------------------------------------------------------------------------------- /tests/arrays/ensure_001.php: -------------------------------------------------------------------------------- 1 | $char ) { 14 | echo "[][$type] = '$char'\n"; 15 | } 16 | } 17 | } 18 | 19 | testarr(); 20 | 21 | echo "\nDone."; 22 | -------------------------------------------------------------------------------- /tests/arrays/ensure_002.php: -------------------------------------------------------------------------------- 1 | foo(42); 12 | -------------------------------------------------------------------------------- /tests/arrays/foreach_001.php: -------------------------------------------------------------------------------- 1 | $value) { 12 | echo $key, " => ", $value, "; "; 13 | } 14 | } 15 | 16 | test1(); 17 | -------------------------------------------------------------------------------- /tests/arrays/foreach_002.php: -------------------------------------------------------------------------------- 1 | &$value) { 11 | echo $key, " => ", $value, "; "; 12 | } 13 | } 14 | 15 | test_aliases([1,2,3,4,5]); 16 | -------------------------------------------------------------------------------- /tests/arrays/foreach_003.php: -------------------------------------------------------------------------------- 1 | &$x); 11 | foreach ($a as $k => $v) 12 | { 13 | $x[1] = 10; 14 | echo "$k => "; 15 | print_r($v); 16 | } 17 | -------------------------------------------------------------------------------- /tests/arrays/foreach_004_list.php: -------------------------------------------------------------------------------- 1 | $a, "b" => $b) = ["b" => 1,"a" => 2]; 5 | 6 | print_r($a); 7 | print_r($b); -------------------------------------------------------------------------------- /tests/arrays/list_002.php: -------------------------------------------------------------------------------- 1 | 'foo']; 5 | @$a[] = 'bar'; // won't be added 6 | print_r(count($a)); // 1 7 | -------------------------------------------------------------------------------- /tests/arrays/spread_operator.php: -------------------------------------------------------------------------------- 1 | 1, 'b' => 2, 'c' => 3]; 8 | $traversable = new \ArrayObject([1,2,3]); 9 | 10 | print_r( [1, 2, 3, ...$nums] ); 11 | print_r( [1, 2, 3, ...$keyed] ); 12 | print_r( [1, 2, 3, ...$traversable] ); 13 | print_r( [...$nums, 0, 0, 0] ); 14 | } 15 | 16 | test(); 17 | echo 'Done.'; -------------------------------------------------------------------------------- /tests/bcmath/bcadd.php: -------------------------------------------------------------------------------- 1 | p]"; 9 | default: return "(default)"; 10 | } 11 | } 12 | } 13 | 14 | function f() { 15 | echo (new X)->p; 16 | echo (new X)->nonexisting; 17 | } 18 | 19 | f(); 20 | -------------------------------------------------------------------------------- /tests/classes/__get_002.php: -------------------------------------------------------------------------------- 1 | bc; 8 | else 9 | return $name; 10 | } 11 | } 12 | 13 | print_r((new TestClass)->abc); 14 | 15 | echo "Done."; -------------------------------------------------------------------------------- /tests/classes/__invoke.php: -------------------------------------------------------------------------------- 1 | "; 11 | echo $x; 12 | -------------------------------------------------------------------------------- /tests/classes/__tostring_002.php: -------------------------------------------------------------------------------- 1 | foo(); 12 | } 13 | 14 | f(); 15 | 16 | echo "Done."; 17 | -------------------------------------------------------------------------------- /tests/classes/anonymous_002.php: -------------------------------------------------------------------------------- 1 | foo(); 13 | C::bar(); 14 | }; 15 | } 16 | } 17 | 18 | // 19 | $f = C::getFn(); 20 | $f(); 21 | 22 | echo "\nDone."; -------------------------------------------------------------------------------- /tests/classes/chaining_test.php: -------------------------------------------------------------------------------- 1 | a->b->c[0][1][2]->x["A"]->y["B"]->z["C"] = "Hujer"; 11 | Class1::$y->a->b->c[0][1][2]->x["A"]->y["B"]->z["C"] =& Class1::$x->a->b->c; 12 | 13 | echo Class1::$y->a->b->c[0][1][2]->x["A"]->y["B"]->z["C"][0][1][2]->x["A"]->y["B"]->z["C"]; 14 | -------------------------------------------------------------------------------- /tests/classes/clone_001.php: -------------------------------------------------------------------------------- 1 | p =& $var; 9 | } 10 | } 11 | 12 | function test() { 13 | $var = 42; 14 | $a = new A($var); 15 | $b = clone $a; 16 | $var = 24; 17 | echo $b->p; 18 | } 19 | 20 | test(); 21 | -------------------------------------------------------------------------------- /tests/classes/conditional_001.php: -------------------------------------------------------------------------------- 1 | foo(); 20 | (new Y)->bar(); 21 | 22 | echo "Done."; 23 | -------------------------------------------------------------------------------- /tests/classes/conditional_002.php: -------------------------------------------------------------------------------- 1 | foo(); 37 | 38 | echo "Done."; 39 | -------------------------------------------------------------------------------- /tests/classes/constant_test.php: -------------------------------------------------------------------------------- 1 | getMessage(); 10 | } 11 | } 12 | 13 | test(); 14 | -------------------------------------------------------------------------------- /tests/classes/exceptions_002.php: -------------------------------------------------------------------------------- 1 | fld; 9 | } 10 | } 11 | 12 | class B extends A { 13 | var $fld; 14 | } 15 | 16 | class C extends B { 17 | var $FLD = "FLD"; 18 | } 19 | 20 | class D extends B { 21 | var $fld = 4; 22 | } 23 | 24 | (new A)->f(); 25 | (new B)->f(); 26 | (new C)->f(); 27 | (new D)->f(); 28 | -------------------------------------------------------------------------------- /tests/classes/interfaces_001.php: -------------------------------------------------------------------------------- 1 | foo(666); 18 | 19 | echo "Done"; 20 | -------------------------------------------------------------------------------- /tests/classes/interfaces_003.php: -------------------------------------------------------------------------------- 1 | rewind(); 18 | } 19 | 20 | test(new B); 21 | -------------------------------------------------------------------------------- /tests/classes/new_001.php: -------------------------------------------------------------------------------- 1 | Bark(); 25 | } 26 | 27 | test(__NAMESPACE__ . "\\dog"); 28 | test(__NAMESPACE__ . "\\bigDog"); 29 | 30 | echo "Done."; 31 | -------------------------------------------------------------------------------- /tests/classes/new_003.php: -------------------------------------------------------------------------------- 1 | Whof(); 14 | } 15 | 16 | function test2() { 17 | $dog = new BigDog; 18 | $dog->Whof(); 19 | } 20 | 21 | test(new Dog); 22 | test(new BigDog); 23 | test2(); 24 | 25 | echo "Done."; 26 | -------------------------------------------------------------------------------- /tests/classes/overloading_002.php: -------------------------------------------------------------------------------- 1 | foo(); 17 | 18 | $a = new B; 19 | echo $a->foo(555); 20 | echo $a->foo(); 21 | } 22 | 23 | test(); 24 | 25 | echo "Done."; 26 | -------------------------------------------------------------------------------- /tests/classes/overloading_003.php: -------------------------------------------------------------------------------- 1 | foo(); 21 | 22 | echo "Done."; 23 | -------------------------------------------------------------------------------- /tests/classes/overloading_004.php: -------------------------------------------------------------------------------- 1 | foo(); 25 | 26 | echo "Done."; 27 | -------------------------------------------------------------------------------- /tests/classes/overloading_005.php: -------------------------------------------------------------------------------- 1 | foo(); 19 | 20 | echo "Done."; 21 | -------------------------------------------------------------------------------- /tests/classes/overloading_006.php: -------------------------------------------------------------------------------- 1 | foo(); 27 | echo (new B)->foo(); 28 | echo (new C)->foo(); 29 | echo (new D)->foo(); 30 | 31 | echo "Done."; 32 | -------------------------------------------------------------------------------- /tests/classes/overloading_006_.php: -------------------------------------------------------------------------------- 1 | foo(); 24 | -------------------------------------------------------------------------------- /tests/classes/overloading_009.php: -------------------------------------------------------------------------------- 1 | foo(); 19 | -------------------------------------------------------------------------------- /tests/classes/overloading_011.php: -------------------------------------------------------------------------------- 1 | foo(1, 2, 3); // calling foo(string, params PhpValue[]); 17 | } 18 | 19 | test(new B); 20 | 21 | echo PHP_EOL, "Done."; 22 | -------------------------------------------------------------------------------- /tests/classes/overriding_001.php: -------------------------------------------------------------------------------- 1 | getMessage(); 14 | } 15 | } 16 | 17 | 18 | echo "Done."; 19 | -------------------------------------------------------------------------------- /tests/classes/properties_001.php: -------------------------------------------------------------------------------- 1 | id = 10; // Notice: Accessing static property X::$id as non static // PHP creates runtime field "id" different to self::$id 15 | self::$id = 11; 16 | 17 | echo self::$id, ' ', @$this->id, ' '; 18 | 19 | $a = new Y(); 20 | $a->fld = $this; 21 | @$a->fld->id = 4; 22 | 23 | $v = "fld"; 24 | $this->$v = 5; 25 | } 26 | } 27 | 28 | (new X); 29 | 30 | echo "Done."; 31 | -------------------------------------------------------------------------------- /tests/classes/properties_002.php: -------------------------------------------------------------------------------- 1 | f; // 2 13 | 14 | echo "Done."; 15 | -------------------------------------------------------------------------------- /tests/classes/static_001.php: -------------------------------------------------------------------------------- 1 | foo(__NAMESPACE__ . "\\B"); 31 | $x->foo(__NAMESPACE__ . "\\A"); 32 | 33 | echo "Done."; 34 | -------------------------------------------------------------------------------- /tests/classes/static_006_late_static_forwarding.php: -------------------------------------------------------------------------------- 1 | a = 1; 7 | $x->b = 2; 8 | echo $x->a, $x->b; 9 | 10 | $y = null; 11 | @$y->a = 3; 12 | @$y->b = 4; 13 | echo $y->a, $y->b; 14 | } 15 | 16 | test(); 17 | 18 | echo "Done."; 19 | -------------------------------------------------------------------------------- /tests/classes/streams_001.php: -------------------------------------------------------------------------------- 1 | bar2("hello",1,2,3,4,5,6,7,8,9) . 20 | $this->bar2("hello") . 21 | $this->bar3("hello",1,2,3,4,5,6,7,8,9); 22 | } 23 | } 24 | 25 | $x = new X(); 26 | echo $x->bar(); 27 | -------------------------------------------------------------------------------- /tests/classes/visibility_001.php: -------------------------------------------------------------------------------- 1 | _privateMember.'-DEBUG'; 9 | } 10 | } 11 | class B extends A { 12 | protected $_privateMember = "Hi there!"; 13 | } 14 | 15 | echo (new B())->getSomeText(); 16 | 17 | echo "Done."; 18 | -------------------------------------------------------------------------------- /tests/classes/visibility_002.php: -------------------------------------------------------------------------------- 1 | foo(); 14 | X::bar(); 15 | 16 | echo "Done."; 17 | } 18 | -------------------------------------------------------------------------------- /tests/constants/pseudoconsts.php: -------------------------------------------------------------------------------- 1 | modify("+120 minutes"); 7 | $datetime2 = clone $datetime1; 8 | 9 | return $datetime1->getTimestamp() === $datetime2->getTimestamp() ? "equal" : "not_equal"; 10 | } 11 | 12 | echo test(); 13 | 14 | echo "Done."; 15 | -------------------------------------------------------------------------------- /tests/datetime/clone_002.php: -------------------------------------------------------------------------------- 1 | modify("+120 minutes"); 7 | $datetime2 = clone $datetime1; 8 | 9 | return $datetime1->getTimestamp() === $datetime2->getTimestamp() ? "equal" : "not_equal"; 10 | } 11 | 12 | echo test(); 13 | 14 | echo "Done."; 15 | -------------------------------------------------------------------------------- /tests/datetime/clone_003.php: -------------------------------------------------------------------------------- 1 | diff($sdate); 12 | 13 | echo "y:, ", $diff->y, "m: ", $diff->m, PHP_EOL; 14 | } 15 | 16 | test(); 17 | 18 | echo "Done."; 19 | -------------------------------------------------------------------------------- /tests/datetime/dateperiod_001.php: -------------------------------------------------------------------------------- 1 | format('Y-m-d')}\n"; 7 | } 8 | 9 | echo "\n"; 10 | 11 | foreach ($p as $k => $v) { 12 | echo "{$k}: {$v->format('Y-m-d')}\n"; 13 | } 14 | } 15 | 16 | test(new \DatePeriod(new \DateTime('2020-02-02'), new \DateInterval('P2D'), 2)); 17 | -------------------------------------------------------------------------------- /tests/datetime/datetime_001.php: -------------------------------------------------------------------------------- 1 | timezone_type, ", timezone: ", $obj->timezone, PHP_EOL; 10 | } 11 | 12 | test(); 13 | 14 | echo "Done."; 15 | -------------------------------------------------------------------------------- /tests/datetime/set_timezone_001.php: -------------------------------------------------------------------------------- 1 | setTimezone(new \DateTimeZone('Europe/Kiev')); 10 | echo $dt->format('Y-m-d H:i:s'); 11 | echo "\n"; 12 | 13 | $dt = date_create('2019-04-25 02:59:00'); 14 | $dt->setTimezone(new \DateTimeZone('America/New_York')); 15 | echo $dt->format('Y-m-d H:i:s'); 16 | } 17 | 18 | test(); 19 | -------------------------------------------------------------------------------- /tests/datetime/timezone_offset_001.php: -------------------------------------------------------------------------------- 1 | getTimestamp(); 8 | } 9 | 10 | echo test(); 11 | 12 | echo 'Done.'; -------------------------------------------------------------------------------- /tests/datetime/timezone_offset_002.php: -------------------------------------------------------------------------------- 1 | getTimestamp(); 8 | } 9 | 10 | echo test(); 11 | 12 | echo 'Done.'; -------------------------------------------------------------------------------- /tests/ftp/TestingFileClient.txt: -------------------------------------------------------------------------------- 1 | Jake Brigance woke at 5.30 a.m. as usual, rolled out of bed, and went downstairs to make coffee for his wife, Carla. 2 | 3 | It is just another day in the life of a small town Southern lawyer, an ambitious man with a loving wife and a new car that he has not yet paid for. 4 | But, like everyone else in Clanton, Mississippi, Jake soon hears awful news — two local men have attacked and raped ten-year-old Tonya Hailey. -------------------------------------------------------------------------------- /tests/ftp/TestingFileClientCopy.txt: -------------------------------------------------------------------------------- 1 | Jake Brigance woke at 5.30 a.m. as usual, rolled out of bed, and went downstairs to make coffee for his wife, Carla. 2 | 3 | It is just another day in the life of a small town Southern lawyer, an ambitious man with a loving wife and a new car that he has not yet paid for. 4 | But, like everyone else in Clanton, Mississippi, Jake soon hears awful news — two local men have attacked and raped ten-year-old Tonya Hailey. -------------------------------------------------------------------------------- /tests/functions/__call_002.php: -------------------------------------------------------------------------------- 1 | ppp; }; 11 | } 12 | } 13 | 14 | (new X)->foo()(); 15 | 16 | echo "Done."; 17 | -------------------------------------------------------------------------------- /tests/functions/anonymous_006_args.php: -------------------------------------------------------------------------------- 1 | $method(); 12 | }; 13 | $fn(); 14 | } 15 | } 16 | 17 | (new A)->bar('foo'); 18 | -------------------------------------------------------------------------------- /tests/functions/anonymous_008.php: -------------------------------------------------------------------------------- 1 | foo = 42; 12 | yield 42; 13 | }; 14 | } 15 | 16 | public function test() { 17 | foreach ($this->bar()() as $v) { 18 | echo $v; 19 | } 20 | } 21 | } 22 | 23 | (new A)->test(); 24 | -------------------------------------------------------------------------------- /tests/functions/anonymous_009_calls_callback.php: -------------------------------------------------------------------------------- 1 | var; 11 | } 12 | } 13 | 14 | class TestClass extends BaseClass 15 | { 16 | public function testFunc() 17 | { 18 | return call_user_func_array("parent::testFunc", []); 19 | } 20 | } 21 | 22 | echo (new TestClass())->testFunc(), PHP_EOL; 23 | 24 | echo "Done."; -------------------------------------------------------------------------------- /tests/functions/callback_005.php: -------------------------------------------------------------------------------- 1 | bar(); 20 | (new B)->bar(); 21 | 22 | @A::bar(); 23 | @B::bar(); 24 | 25 | echo "Done."; 26 | -------------------------------------------------------------------------------- /tests/functions/instance_call_002.php: -------------------------------------------------------------------------------- 1 | foo("lorem", "ipsum"); // be careful, do not call IA::foo() directly 16 | } 17 | 18 | test(new A); 19 | 20 | echo "Done."; 21 | -------------------------------------------------------------------------------- /tests/functions/instance_call_004.php: -------------------------------------------------------------------------------- 1 | handleDependencies(); // call to a private method so $this variable must be resolved to be able to call it in ct 17 | } 18 | } 19 | 20 | class Y extends X { 21 | } 22 | 23 | (new X)->test(); 24 | 25 | echo "Done."; -------------------------------------------------------------------------------- /tests/functions/is_a.php: -------------------------------------------------------------------------------- 1 | g(); 21 | (new Y)->g(); 22 | 23 | echo "\nDone."; 24 | -------------------------------------------------------------------------------- /tests/functions/leibnitz.php: -------------------------------------------------------------------------------- 1 | foo(); 16 | } 17 | 18 | test(new C); 19 | 20 | // 21 | echo "Done."; 22 | -------------------------------------------------------------------------------- /tests/functions/param_default_004.php: -------------------------------------------------------------------------------- 1 | 100, 'b' => 200))); 11 | 12 | echo "Done."; 13 | -------------------------------------------------------------------------------- /tests/functions/param_default_005.php: -------------------------------------------------------------------------------- 1 | test(); // callsite 15 | 16 | // 17 | echo 'Done.'; 18 | -------------------------------------------------------------------------------- /tests/functions/param_null_001.php: -------------------------------------------------------------------------------- 1 | foo($matches); 13 | echo $matches; 14 | } 15 | 16 | test( new X ); 17 | 18 | // 19 | echo 'Done.'; 20 | -------------------------------------------------------------------------------- /tests/functions/random_int.php: -------------------------------------------------------------------------------- 1 | $max) echo "error: $min < $x < $max"; 9 | } 10 | } 11 | 12 | test(0, PHP_INT_MAX); 13 | test(PHP_INT_MIN, 0); 14 | test(PHP_INT_MIN, PHP_INT_MAX); 15 | test(0, 0); 16 | test(0, 1); 17 | test(PHP_INT_MIN, PHP_INT_MIN + 1); 18 | 19 | echo "Done."; 20 | -------------------------------------------------------------------------------- /tests/functions/recursion_001.php: -------------------------------------------------------------------------------- 1 | foo(); 11 | } 12 | } 13 | 14 | class B extends A { 15 | static function foo() { 16 | echo __CLASS__, PHP_EOL; 17 | } 18 | } 19 | 20 | (new A)->test(); 21 | (new B)->test(); 22 | 23 | echo "Done."; 24 | -------------------------------------------------------------------------------- /tests/functions/static_call_003.php: -------------------------------------------------------------------------------- 1 | test(new Y); 17 | 18 | echo "Done."; 19 | -------------------------------------------------------------------------------- /tests/functions/unpacking_001.php: -------------------------------------------------------------------------------- 1 | 0) { 7 | $value--; 8 | yield $value; 9 | } 10 | } 11 | 12 | foreach (gnr() as $val) { 13 | echo (--$val).' '; 14 | } 15 | 16 | echo "\n"; 17 | 18 | function &gr() { 19 | $value = 5; 20 | 21 | while ($value > 0) { 22 | $value--; 23 | yield $value; 24 | } 25 | } 26 | 27 | foreach (gr() as &$val2) { 28 | echo (--$val2).' '; 29 | } 30 | 31 | echo "Done."; 32 | 33 | -------------------------------------------------------------------------------- /tests/generators/generators_010.php: -------------------------------------------------------------------------------- 1 | key()."v:".$gen->current()."\n"; 12 | 13 | echo "s:".$gen->send(4)."\n"; 14 | echo "s:".$gen->send(8)."\n"; 15 | 16 | echo "Done."; 17 | -------------------------------------------------------------------------------- /tests/generators/generators_012.php: -------------------------------------------------------------------------------- 1 | $value){ 13 | echo "k:".$key."v:".$value."\n"; 14 | } 15 | 16 | echo "----------------------\n"; 17 | 18 | $gen = g(1); 19 | foreach($gen as $key => $value){ 20 | echo "k:".$key."v:".$value."\n"; 21 | } 22 | 23 | echo "Done."; 24 | -------------------------------------------------------------------------------- /tests/generators/generators_013.php: -------------------------------------------------------------------------------- 1 | 0"; 7 | $$var = 10; 8 | 1 + yield; 9 | 10 | echo "indirectValue:".$$var."\n"; 11 | foreach(get_defined_vars() as $key => $value){ 12 | echo "localVariable:".$key.":".$value."\n"; 13 | } 14 | } 15 | 16 | $gen = f(); 17 | echo "k:".$gen->key()."v:".$gen->current()."\n"; 18 | f()->next(); 19 | 20 | echo "Done."; 21 | -------------------------------------------------------------------------------- /tests/generators/generators_014.php: -------------------------------------------------------------------------------- 1 | 5; 14 | yield 4 => 4; 15 | yield 6; 16 | } 17 | print_r(iterator_to_array(gen())); 18 | -------------------------------------------------------------------------------- /tests/generators/generators_016.php: -------------------------------------------------------------------------------- 1 | $cost, 8 | ]; 9 | $hashWithCost = @password_hash($password, PASSWORD_BCRYPT, $options); 10 | $hashWithoutCost = @password_hash($password, PASSWORD_BCRYPT); 11 | 12 | echo 'Verify hash with cost : ' . password_verify($password,$hashWithCost) . "\n"; 13 | echo 'Verify hash without cost : ' . password_verify($password,$hashWithoutCost) . "\n"; 14 | -------------------------------------------------------------------------------- /tests/image/imageinfo.php: -------------------------------------------------------------------------------- 1 | "value"]; -------------------------------------------------------------------------------- /tests/operators/cast_002.php: -------------------------------------------------------------------------------- 1 | test(new A); 11 | 12 | echo "\nDone."; 13 | -------------------------------------------------------------------------------- /tests/operators/isset_locals.php: -------------------------------------------------------------------------------- 1 | 1] ); 18 | foo( ["y" => 1] ); 19 | 20 | echo "Done."; 21 | -------------------------------------------------------------------------------- /tests/operators/pow_001.php: -------------------------------------------------------------------------------- 1 | 0) 7 | { 8 | for ($i = 0; $i < ($iSbdSize - 1); $i++) // https://github.com/peachpiecompiler/peachpie/issues/993 9 | { 10 | echo $i, '.'; 11 | } 12 | } 13 | } 14 | 15 | f(2.0); 16 | 17 | echo 'Done.'; -------------------------------------------------------------------------------- /tests/operators/ternary_003.php: -------------------------------------------------------------------------------- 1 | function_exists('key') ? 1:0, 7 | function_exists('unknown') ? 1:0 => function_exists('unknown') ? 1:0 8 | 9 | ); 10 | 11 | $b = array(1,2,3,4); 12 | 13 | $c = array(1=>1,2=>2); 14 | 15 | $d = $a ? 1 : 2; 16 | 17 | print_r($a); 18 | print_r($b); 19 | print_r($c); 20 | print_r($d); 21 | -------------------------------------------------------------------------------- /tests/pcre/pcre_split_ungreedy_001.php: -------------------------------------------------------------------------------- 1 | )/U', "hello", -1, PREG_SPLIT_DELIM_CAPTURE ) ); 6 | } 7 | 8 | f(); 9 | -------------------------------------------------------------------------------- /tests/pcre/preg_filter.php: -------------------------------------------------------------------------------- 1 | video|object|embed|iframe)[^<]*?(?:>[\s\S]*?<\/(?P=tag)>|\s*\/>)#', 7 | "", 8 | $matches ); 9 | 10 | print_r( $matches ); 11 | } 12 | 13 | f(); 14 | -------------------------------------------------------------------------------- /tests/pcre/preg_match_006.php: -------------------------------------------------------------------------------- 1 | foo)?(bar)/', 'bar', $matches, PREG_OFFSET_CAPTURE); 5 | 6 | $is_fooname = isset( $matches['fooname'] ) && -1 !== $matches['fooname'][1]; 7 | 8 | echo "is_fooname:" . ($is_fooname ? "true" : "false") . "\n"; //is_fooname:false -------------------------------------------------------------------------------- /tests/pcre/preg_replace_001.php: -------------------------------------------------------------------------------- 1 | exec("CREATE TABLE posts (id INTEGER PRIMARY KEY)"); 10 | $pdo->exec("INSERT INTO posts (id) VALUES (null), (null), (null), (null)"); 11 | 12 | $value = null; 13 | $stmt = $pdo->prepare("SELECT * FROM posts WHERE id != ?"); 14 | $stmt->bindParam(1, $value, \PDO::PARAM_STR); 15 | $stmt->execute(); 16 | 17 | print_r($stmt->fetchAll()); 18 | } 19 | 20 | test(); 21 | 22 | echo "Done."; 23 | -------------------------------------------------------------------------------- /tests/pdo/errmode.php: -------------------------------------------------------------------------------- 1 | setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 10 | } 11 | 12 | errmode(); 13 | 14 | echo "Done."; -------------------------------------------------------------------------------- /tests/pdo/sqlite_udf.php: -------------------------------------------------------------------------------- 1 | sqliteCreateFunction( 'foo', foo ); 9 | $stmt = $pdo->prepare("SELECT foo()"); 10 | $stmt->execute(); 11 | $result = $stmt->fetch(\PDO::FETCH_NUM)[0]; 12 | if ($result != foo()) { 13 | throw new ErrorException("Expecting 'Hello World'"); 14 | } -------------------------------------------------------------------------------- /tests/pdo/sqlite_udf_with_parameters.php: -------------------------------------------------------------------------------- 1 | sqliteCreateFunction( 'php_add', php_add ); 10 | $stmt = $pdo->prepare("SELECT php_add(1, 2)"); 11 | $stmt->execute(); 12 | $result = $stmt->fetch(\PDO::FETCH_NUM)[0]; 13 | if ($result != 3) { 14 | throw new ErrorException("Expecting '3'"); 15 | } -------------------------------------------------------------------------------- /tests/pdo/stmtclass.php: -------------------------------------------------------------------------------- 1 | setAttribute(\PDO::ATTR_STATEMENT_CLASS, [CustomStatement::class, []]); 17 | 18 | $stmt = $pdo->prepare("SELECT name FROM sqlite_master"); 19 | 20 | echo \get_class($stmt), PHP_EOL; 21 | } 22 | 23 | stmtclass(); 24 | 25 | echo "Done."; 26 | -------------------------------------------------------------------------------- /tests/program.phpx: -------------------------------------------------------------------------------- 1 | getName() . PHP_EOL; 11 | echo count( $re->getClasses() ), PHP_EOL; // 0 12 | 13 | $constants = $re->getConstants(); 14 | echo $constants['PCRE_VERSION'] == PCRE_VERSION ? "ok" : "fail", PHP_EOL; // ok 15 | } 16 | 17 | test(); 18 | -------------------------------------------------------------------------------- /tests/reflection/ReflectionFunction_001.php: -------------------------------------------------------------------------------- 1 | getFileName() ) ); 9 | 10 | echo "\nDone."; 11 | -------------------------------------------------------------------------------- /tests/reflection/class_instance_001.php: -------------------------------------------------------------------------------- 1 | isInstance(new TestClass1()) ? "true" : "false"; 16 | echo $tmp1->isInstance(new TestClass2()) ? "true" : "false"; 17 | echo $tmp2->isInstance(new TestClass1()) ? "true" : "false"; 18 | echo $tmp2->isInstance(new TestClass2()) ? "true" : "false"; -------------------------------------------------------------------------------- /tests/reflection/class_interface_001.php: -------------------------------------------------------------------------------- 1 | implementsInterface(TestInterface::class) ? "true" : "false"; 20 | echo $tmp2->implementsInterface(TestInterface::class) ? "true" : "false"; -------------------------------------------------------------------------------- /tests/reflection/class_parent_001.php: -------------------------------------------------------------------------------- 1 | getParameters()[0]; 13 | $param2 = (new \ReflectionFunction($tmp2))->getParameters()[0]; 14 | 15 | echo $param1->allowsNull() ? "true" : "false"; 16 | echo $param2->allowsNull() ? "true" : "false"; -------------------------------------------------------------------------------- /tests/reflection/variadic_parameters_001.php: -------------------------------------------------------------------------------- 1 | getParameters()[0]->isVariadic(); 15 | $variadic2 = $tmp2->getParameters()[0]->isVariadic(); 16 | 17 | echo $variadic1 ? "true" : "false"; 18 | echo $variadic2 ? "true" : "false"; -------------------------------------------------------------------------------- /tests/reflection/variadic_parameters_002.php: -------------------------------------------------------------------------------- 1 | isVariadic() ? "true" : "false"; 16 | echo $tmp2->isVariadic() ? "true" : "false"; -------------------------------------------------------------------------------- /tests/reflection/variadic_parameters_003.php: -------------------------------------------------------------------------------- 1 | getParameters()); 14 | -------------------------------------------------------------------------------- /tests/scripting/create_function_001.php: -------------------------------------------------------------------------------- 1 | foo(); 8 | (new B)->foo(); 9 | 10 | echo "Done."; 11 | -------------------------------------------------------------------------------- /tests/spl/AppendIterator_002.php: -------------------------------------------------------------------------------- 1 | append($filterIt); 10 | 11 | foreach ($appendIt as $key => $item) { 12 | echo $appendIt->getIteratorIndex() . ' => ' . $key . ' => ' . $item . "\n"; 13 | } 14 | } 15 | 16 | test(); 17 | -------------------------------------------------------------------------------- /tests/spl/ParentIterator_001.php: -------------------------------------------------------------------------------- 1 | isDot()) { 11 | continue; 12 | } 13 | 14 | for ($i = 0; $i < $it->getDepth(); $i++) { 15 | echo " "; 16 | } 17 | echo $file->getFilename() ."\n"; 18 | } 19 | } 20 | 21 | test(); 22 | -------------------------------------------------------------------------------- /tests/spl/RecursiveIteratorIterator_001.php: -------------------------------------------------------------------------------- 1 | $value) { 8 | $d = $iteriter->getDepth(); 9 | echo "depth=$d k=$key v=$value\n"; 10 | } 11 | 12 | echo "Done."; 13 | -------------------------------------------------------------------------------- /tests/spl/RecursiveRegexIterator_001.php: -------------------------------------------------------------------------------- 1 | new A(), array("bla" => 856, "bal" => "no"), "bar", "832", 8123, 8.12)); 15 | $it = new \RecursiveRegexIterator($it, "/^8/"); 16 | print_r(iterator_to_array($it)); 17 | 18 | $it = new \RecursiveIteratorIterator($it); 19 | print_r(iterator_to_array($it)); 20 | } 21 | 22 | test(); 23 | -------------------------------------------------------------------------------- /tests/spl/subdir/sample_file.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/tests/spl/subdir/sample_file.txt -------------------------------------------------------------------------------- /tests/spl/subdir/subsubdir/other_sample_file.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/tests/spl/subdir/subsubdir/other_sample_file.txt -------------------------------------------------------------------------------- /tests/strings/addcslashes.php: -------------------------------------------------------------------------------- 1 | fff = "World"; 9 | 10 | echo "Hello $o->fff!"; 11 | 12 | echo "Done."; -------------------------------------------------------------------------------- /tests/strings/concat_002.php: -------------------------------------------------------------------------------- 1 | 'bar']; 6 | echo "{$arr['foo']}''"; 7 | } 8 | 9 | test(); 10 | -------------------------------------------------------------------------------- /tests/strings/double_001.php: -------------------------------------------------------------------------------- 1 | >>$test<<<", PHP_EOL; 9 | echo "Done."; -------------------------------------------------------------------------------- /tests/strings/htmlspecialchars.php: -------------------------------------------------------------------------------- 1 | Test", "&Test''<>", " "] as $str) { 12 | f($str); 13 | } 14 | -------------------------------------------------------------------------------- /tests/strings/is_object_001.php: -------------------------------------------------------------------------------- 1 | array = $array; 9 | } 10 | 11 | public function jsonSerialize() { 12 | return $this->array; 13 | } 14 | } 15 | 16 | $array = [1, 2, 3]; 17 | echo json_encode(new ArrayValue($array)), "Done."; 18 | -------------------------------------------------------------------------------- /tests/strings/json_003.php: -------------------------------------------------------------------------------- 1 | "hi", "hi" => "hello"); 8 | echo strtr("hi all, I said hello\n", $trans); 9 | 10 | // hello all, I said hi 11 | 12 | $trans = array_flip(array("a" => "e", "b" => "e")); 13 | echo strtr("hi all, I said hello\n", $trans); 14 | 15 | $trans = array("a" => 1, "e" => false, 1 => "ONE", 3.14 => round(M_PI,5)); 16 | echo strtr("12[3]45, hi all, I said hello\n", $trans); 17 | -------------------------------------------------------------------------------- /tests/strings/tostring.php: -------------------------------------------------------------------------------- 1 | bar; }; 9 | } 10 | } 11 | 12 | class C { 13 | use T; 14 | } 15 | 16 | echo (new C)->getFn()(); 17 | -------------------------------------------------------------------------------- /tests/traits/instanceof_001.php: -------------------------------------------------------------------------------- 1 | bar()); 15 | -------------------------------------------------------------------------------- /tests/traits/namespaces_001.php: -------------------------------------------------------------------------------- 1 | bar(); 17 | -------------------------------------------------------------------------------- /tests/traits/static_001.php: -------------------------------------------------------------------------------- 1 | sayHello(); 24 | 25 | echo "\nDone."; 26 | -------------------------------------------------------------------------------- /tests/traits/trait_002.php: -------------------------------------------------------------------------------- 1 | sayHello(); 20 | echo "\nDone."; 21 | -------------------------------------------------------------------------------- /tests/traits/trait_004.php: -------------------------------------------------------------------------------- 1 | inc(); // echo 1 23 | $p = new C2(); $p->inc(); // echo 1 24 | -------------------------------------------------------------------------------- /tests/traits/trait_006.php: -------------------------------------------------------------------------------- 1 | x, PropertiesExample::$sx; // , PropertiesExample::C; 19 | -------------------------------------------------------------------------------- /tests/traits/trait_007.php: -------------------------------------------------------------------------------- 1 | foo( 1, 2 ); 22 | -------------------------------------------------------------------------------- /tests/transformations/arithmetic_001.php: -------------------------------------------------------------------------------- 1 | 42; 10 | } 11 | 12 | if (bar(43)) { 13 | define("FOO_COND", "bar_cond "); 14 | } else { 15 | define("FOO_COND", "foo_cond "); 16 | } 17 | 18 | echo FOO_COND; 19 | 20 | function foo() { 21 | define("FOO_LOCAL", "foo_local "); 22 | echo FOO_LOCAL; 23 | } 24 | 25 | if (define("FOO_IN_EXPR", "foo_in_expr ") && bar(43)) { 26 | echo FOO_IN_EXPR; 27 | } 28 | -------------------------------------------------------------------------------- /tests/transformations/ord_002.php: -------------------------------------------------------------------------------- 1 | 42]; 10 | $a2 = return_direct($a1); 11 | 12 | $a2[0] = 666; 13 | echo $a1[0]; 14 | } 15 | 16 | function return_indirect($a) { 17 | $b = $a; 18 | $b[1] = 1; 19 | return $b; 20 | } 21 | 22 | function test_indirect() { 23 | $a1 = [0 => 42]; 24 | $a2 = return_indirect($a1); 25 | 26 | $a2[0] = 666; 27 | echo $a1[0]; 28 | } 29 | 30 | test_direct(); 31 | test_indirect(); 32 | -------------------------------------------------------------------------------- /tests/transformations/skippass_002.php: -------------------------------------------------------------------------------- 1 | \n"; 8 | if ($numargs >= 2) 9 | { 10 | echo "Second argument is: " . func_get_arg (1) . "
\n"; 11 | } 12 | $arg_list = func_get_args(); 13 | 14 | for ($i = 0; $i < $numargs; $i++) 15 | echo "Argument $i is: " . $arg_list[$i] . "
\n"; 16 | } 17 | 18 | A(1,2,3,4,5,6); 19 | -------------------------------------------------------------------------------- /tests/variables/dump_001.php: -------------------------------------------------------------------------------- 1 | 1.2, "text", "multiline 14 | text", true, false, &$a, ["a", "b", "c"], [], 'text\with\\backslashes\\\\']); 15 | 16 | echo "Done."; 17 | -------------------------------------------------------------------------------- /tests/variables/empty_001.php: -------------------------------------------------------------------------------- 1 | p = new \stdClass; 6 | $a->p->p = 123; 7 | 8 | echo empty($a) ? 1 : 0; 9 | echo empty($a->p) ? 1 : 0; 10 | echo empty($a->p->p) ? 1 : 0; 11 | 12 | class X { 13 | var $p = 1; 14 | } 15 | 16 | function test( $test, X $x ) { 17 | $a = $test ? $x : false; 18 | echo empty( $a->p ) ? 1 : 0; // $a is null|X, we have to check nullref here 19 | } 20 | 21 | test(false, new X); 22 | test(true, new X); 23 | 24 | echo "Done."; 25 | -------------------------------------------------------------------------------- /tests/variables/empty_002.php: -------------------------------------------------------------------------------- 1 | 123)); 7 | } 8 | 9 | $x = 0; 10 | 11 | foo($x); 12 | 13 | echo $x; 14 | -------------------------------------------------------------------------------- /tests/variables/get_resource_type_001.php: -------------------------------------------------------------------------------- 1 | fff = "World"; 7 | 8 | echo "$b ", $c[0]->fff; -------------------------------------------------------------------------------- /tests/variables/globals_002.php: -------------------------------------------------------------------------------- 1 | "hello", "two"=>"world"); 5 | $GLOBALS["b"] = $a; 6 | echo $GLOBALS["b"][1]." ".$GLOBALS["b"]["two"]; 7 | -------------------------------------------------------------------------------- /tests/variables/globals_003.php: -------------------------------------------------------------------------------- 1 | "; 6 | // Take reference of $GLOBALS 7 | $a = array(1=>"hello", "two"=>"world"); 8 | $b =& $GLOBALS; 9 | echo $b["a"][1]." ".$b["a"]["two"]."
"; 10 | // Set $GLOBALS 11 | $GLOBALS["a"] = "Set via GLOBALS"."
"; 12 | echo $a; 13 | -------------------------------------------------------------------------------- /tests/variables/globals_004.php: -------------------------------------------------------------------------------- 1 | "hello", "two"=>"world"); 6 | $b = "b"; 7 | $$b = $a; 8 | echo $b[1]." ".$b["two"]; 9 | } 10 | 11 | $a = array(1=>"hello", "two"=>"world"); 12 | $b = "b"; 13 | $$b = $a; 14 | echo $b[1]." ".$b["two"]; 15 | 16 | f(); -------------------------------------------------------------------------------- /tests/variables/indirect_003.php: -------------------------------------------------------------------------------- 1 | "; 7 | // Take reference of $GLOBALS 8 | $a = array(1=>"hello", "two"=>"world"); 9 | $b = "c"; 10 | $$b =& $a; 11 | echo $c[1]." ".$c["two"]."
"; 12 | // Set $$a 13 | $a = "b"; 14 | $$a = "Set via indirect variable"; 15 | echo $b; 16 | -------------------------------------------------------------------------------- /tests/variables/indirect_004.php: -------------------------------------------------------------------------------- 1 | "hello", "two"=>"world"); 7 | $b = "b"; 8 | $$b = $a; 9 | echo $b[1]." ".$b["two"]; 10 | } 11 | f(); 12 | -------------------------------------------------------------------------------- /tests/variables/indirect_007.php: -------------------------------------------------------------------------------- 1 | p = new \stdClass; 6 | $a->p->p = 123; 7 | 8 | echo isset($a) ? 1 : 0; 9 | echo isset($a->p) ? 1 : 0; 10 | echo isset($a->p->p) ? 1 : 0; 11 | 12 | echo "Done."; 13 | -------------------------------------------------------------------------------- /tests/variables/isset_003.php: -------------------------------------------------------------------------------- 1 | 42], "bar"); 9 | 10 | echo "Done."; 11 | -------------------------------------------------------------------------------- /tests/variables/isset_005.php: -------------------------------------------------------------------------------- 1 | null, ]; 7 | echo "isset: ", isset( $obj->$name ) ? "1" : "0", PHP_EOL; 8 | 9 | $obj = (object)[$name => true, ]; 10 | echo "isset: ", isset( $obj->$name ) ? "1" : "0", PHP_EOL; 11 | } 12 | 13 | test("xxx"); 14 | 15 | echo "Done."; 16 | -------------------------------------------------------------------------------- /tests/variables/makearray.php: -------------------------------------------------------------------------------- 1 | 5 | return true; 6 | } 7 | 8 | function test2(): ?float { // CLR Nullable 9 | return 123.456; 10 | } 11 | 12 | function test3(): ?double { // CLR Nullable 13 | return null; 14 | } 15 | 16 | $value = test(); // converts bool? -> bool|null 17 | 18 | echo $value, PHP_EOL; 19 | echo test(), PHP_EOL; 20 | echo (string)test(), PHP_EOL; 21 | echo round(test2()), PHP_EOL; 22 | echo "'", test3(), "'", PHP_EOL; 23 | 24 | echo "Done."; 25 | -------------------------------------------------------------------------------- /tests/variables/serialize_001.php: -------------------------------------------------------------------------------- 1 | 123, "b" => [1, 2, 3]]; 7 | print_r($o); 8 | 9 | $s = serialize($o); 10 | print_r($s); 11 | 12 | $o = unserialize($s); 13 | print_r($o); 14 | } 15 | 16 | f(); 17 | 18 | echo "Done"; 19 | -------------------------------------------------------------------------------- /tests/variables/static_001.php: -------------------------------------------------------------------------------- 1 | message) { // https://github.com/peachpiecompiler/peachpie/issues/564 // we have to be able to make PhpAlias from Exception::$message 8 | public function __construct(&$message) { } 9 | }; 10 | } 11 | } 12 | 13 | echo "Done."; 14 | -------------------------------------------------------------------------------- /tests/variables/valueref_005.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/web/parse_url_at_bug.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/web/rawurlencode.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | HERE 9 | 10 | 11 | -------------------------------------------------------------------------------- /tests/xml/area_name.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 13 6 | "Автово" м. 7 | m."Avtovo" 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /tests/xml/book.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The Grapes of Wrath 5 | John Steinbeck 6 | 7 | 8 | The Pearl 9 | John Steinbeck 10 | 11 | 12 | -------------------------------------------------------------------------------- /tests/xml/dom_001.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | HERE; 8 | 9 | $xml2 = << 11 | 12 | HERE; 13 | 14 | $dom = new \DOMDocument(); 15 | $dom->loadXML($xml); 16 | $root = $dom->documentElement; 17 | $attr = $root->getAttributeNode('a'); 18 | 19 | $dom2 = new \DOMDocument(); 20 | $dom2->loadXML($xml2); 21 | $root2 = $dom2->documentElement; 22 | try { 23 | $root2->setAttributeNode($attr); 24 | } 25 | catch (\DOMException $e) { 26 | echo $e->getCode(); 27 | } 28 | -------------------------------------------------------------------------------- /tests/xml/dom_003.php: -------------------------------------------------------------------------------- 1 | load("book.xml"); 7 | $rootNode = $dom->documentElement; 8 | print "--- Catch exception with try/catch\n"; 9 | try { 10 | $rootNode->appendChild($rootNode); 11 | } 12 | catch (\DOMException $e) { 13 | echo $e->getCode(); 14 | } 15 | } 16 | 17 | test(); 18 | -------------------------------------------------------------------------------- /tests/xml/dom_007.php: -------------------------------------------------------------------------------- 1 | length; 7 | } 8 | 9 | test(new \DOMNodeList); 10 | -------------------------------------------------------------------------------- /tests/xml/dom_009.php: -------------------------------------------------------------------------------- 1 | loadHTML("hello world"); // no root element 7 | } 8 | 9 | test(); 10 | 11 | echo "Done."; 12 | -------------------------------------------------------------------------------- /tests/xml/schemas/dom_010.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tests/xml/schemas/dom_010_ref.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/xml/simpleXMLIterator_005.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | EOF; 11 | 12 | class SXETest extends SimpleXMLIterator 13 | { 14 | function count() 15 | { 16 | echo __METHOD__ . "\n"; 17 | return parent::count(); 18 | } 19 | } 20 | 21 | $sxe = new SXETest($xml); 22 | 23 | print_r(count($sxe)); 24 | print_r(count($sxe->elem1)); 25 | print_r(count($sxe->elem2)); 26 | -------------------------------------------------------------------------------- /tests/xml/simplexml_007.php: -------------------------------------------------------------------------------- 1 | 7 | barbar 8 | EOF; 9 | 10 | $sxe = simplexml_load_string($xml); 11 | 12 | echo (string)$sxe; 13 | } 14 | 15 | test(); 16 | -------------------------------------------------------------------------------- /tests/xml/simplexml_011.php: -------------------------------------------------------------------------------- 1 | bar'); 6 | print $doc->name["attr"]; 7 | print "\n"; 8 | if ((string)$doc->name["attr"] == "foo") { 9 | print "Works\n"; 10 | } else { 11 | print "Error\n"; 12 | } 13 | if ($doc->name["attr"] == "foo") { 14 | print "Works\n"; 15 | } else { 16 | print "Error\n"; 17 | } 18 | } 19 | 20 | test(); 21 | -------------------------------------------------------------------------------- /tests/xml/simplexml_017.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | EOF; 16 | 17 | $people = simplexml_load_string($xml); 18 | 19 | foreach($people as $name => $person) 20 | { 21 | echo $name ."\n"; 22 | echo (string)$person['name'] ."\n"; 23 | echo count($people) ."\n"; 24 | echo count($person) ."\n"; 25 | } 26 | } 27 | 28 | test(); 29 | -------------------------------------------------------------------------------- /tests/xml/simplexml_021.php: -------------------------------------------------------------------------------- 1 | Not in namespaceIn example namespace'; 4 | 5 | $sx0 = new SimpleXMLElement($xml, 0, false); 6 | $sx1 = new SimpleXMLElement($xml, 0, false, 'http://example.com'); 7 | $sx2 = new SimpleXMLElement($xml, 0, false, 'ws', true); 8 | 9 | echo " 10 | Without: {$sx0->child} 11 | By namespace: {$sx1->child} 12 | By prefix: {$sx2->child} 13 | "; -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude001a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Include tag in root:

4 | 5 |

IncludeTag in some other tag:

6 |

7 | Some text 8 |

9 |
10 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude001b.xml: -------------------------------------------------------------------------------- 1 | 2 | Ok -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude001c.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Ok

4 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude002a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

First include:

4 |

5 | 6 | Text in include parent tag 7 |

8 |

Second include:

9 | Some text 10 |
11 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude002b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Recursive include

4 |

5 | 6 |

7 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude002c.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Ok 4 | 5 |

6 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude002d.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Ok

4 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude003a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

First include:

4 | 5 |

Missing file:

6 | 7 | Substituted text for document... 8 | 9 |
10 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude003b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Somthing...

4 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude004a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

First include(without other tags):

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

Missing file(with other tags):

12 | 13 | Substituted text for document... 14 | 15 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude004b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Somthing...

4 | 5 | 6 | 7 | 8 | 9 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude004c.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

ok

4 |
-------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude006a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

4 | 5 |

6 |

Ahoj 7 |

8 |
9 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude006b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude007a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Include tag in root, which has id 2:

4 | 5 |
6 | -------------------------------------------------------------------------------- /tests/xml/xincludeData/xinclude007b.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Ok 4 |

tag s id 1

5 |

tag s id 2

6 |
-------------------------------------------------------------------------------- /tests/xml/xinclude_001.php: -------------------------------------------------------------------------------- 1 | load("xincludeData/xinclude001a.xml"); 5 | @$dom->xinclude(); 6 | echo $dom -> saveXML(); 7 | ?> 8 | -------------------------------------------------------------------------------- /tests/xml/xinclude_002.php: -------------------------------------------------------------------------------- 1 | load("xincludeData/xinclude002a.xml"); 5 | @$dom->xinclude(); 6 | echo $dom -> saveXML(); 7 | ?> 8 | -------------------------------------------------------------------------------- /tests/xml/xinclude_003.php: -------------------------------------------------------------------------------- 1 | load("xincludeData/xinclude003a.xml"); 5 | @$dom->xinclude(); 6 | echo $dom -> saveXML(); 7 | ?> 8 | -------------------------------------------------------------------------------- /tests/xml/xinclude_004.php: -------------------------------------------------------------------------------- 1 | load("xincludeData/xinclude004a.xml"); 5 | @$dom->xinclude(); 6 | echo $dom -> saveXML(); 7 | ?> 8 | -------------------------------------------------------------------------------- /tests/xml/xinclude_006.php: -------------------------------------------------------------------------------- 1 | load("xincludeData/xinclude006a.xml"); 5 | @$dom->xinclude(); 6 | echo $dom -> saveXML(); 7 | ?> 8 | -------------------------------------------------------------------------------- /tests/xml/xinclude_007.php: -------------------------------------------------------------------------------- 1 | load("xincludeData/xinclude007a.xml"); 5 | @$dom->xinclude(); 6 | echo $dom -> saveXML(); 7 | ?> 8 | -------------------------------------------------------------------------------- /tests/xml/xmlreader_001.php: -------------------------------------------------------------------------------- 1 | 6 | '; 7 | 8 | $reader = new \XMLReader(); 9 | $reader->XML($xmlstring); 10 | 11 | // Only go through 12 | while ($reader->read()) { 13 | echo $reader->name."\n"; 14 | } 15 | 16 | $xmlstring = ''; 17 | $reader = new \XMLReader(); 18 | echo @$reader->XML($xmlstring); 19 | } 20 | 21 | test(); 22 | -------------------------------------------------------------------------------- /tests/xml/xmlwriter_001.php: -------------------------------------------------------------------------------- 1 | "), array("utf-8", "/>"), $xml)); 6 | } 7 | 8 | function test() { 9 | $xw = new \XMLWriter(); 10 | $xw->openMemory(); 11 | $xw->startDocument('1.0', 'utf-8', 'no'); 12 | $xw->startElement("tag1"); 13 | $xw->endDocument(); 14 | 15 | // Force to write and empty the buffer 16 | echo normalize($xw->flush(true)); 17 | } 18 | 19 | test(); 20 | -------------------------------------------------------------------------------- /tests/xml/xslt_008.xml: -------------------------------------------------------------------------------- 1 | This is from the Input Document 2 | -------------------------------------------------------------------------------- /tests/xml/xslt_010.php: -------------------------------------------------------------------------------- 1 | <", "\r\n"), array("/", "?>\n<", "\n"), $str); 5 | 6 | if ($str[strlen($str) - 1] != "\n") $str = $str . "\n"; 7 | 8 | return $str; 9 | } 10 | 11 | function test() { 12 | $dom = new \DOMDocument; 13 | $dom->load("xslt.xml"); 14 | 15 | $xsl = simplexml_load_file('xslt.xsl'); 16 | 17 | $proc = new \XSLTProcessor; 18 | $proc->importStylesheet($xsl); 19 | 20 | print __xml_norm($proc->transformToXml($dom)); 21 | } 22 | 23 | test(); 24 | -------------------------------------------------------------------------------- /tests/zip/archive.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/tests/zip/archive.zip -------------------------------------------------------------------------------- /tests/zip/ziparchive_001.txt: -------------------------------------------------------------------------------- 1 | Lorem Ipsum dolor sit amet... -------------------------------------------------------------------------------- /tools/cslex.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/tools/cslex.exe -------------------------------------------------------------------------------- /tools/gppg.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/tools/gppg.exe -------------------------------------------------------------------------------- /tools/nuget.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/peachpiecompiler/peachpie/d1fc1792fb73ea2e69726788561d32d25fdd706d/tools/nuget.exe -------------------------------------------------------------------------------- /tools/readme.md: -------------------------------------------------------------------------------- 1 | ## Build Chain Tools 2 | 3 | The directory contains tools required during development of the project, running tests and generated source code. --------------------------------------------------------------------------------